javapas
Class VM

java.lang.Object
  |
  +--javapas.VM

public class VM
extends java.lang.Object

Klasa reprezentująca maszynę wirtualną systemu. Symuluje działanie prostego procesora. Działa na wektorze zawierającym skompilowany pseudokod programu oraz wektorze zawierającym zmienne.


Field Summary
(package private)  int instr
          Reprezentuje licznik instrucji w procesorze.
(package private)  java.util.Stack powrot
          Stos pomocniczy zawierający adresy skoków.
(package private)  java.util.Stack stos
          Stos zawierający w trakcie wykonania programu cząstkowe wyniki operacji.
(package private)  java.util.Vector v
          Wektor zawierający pseudokod programu.
(package private)  java.util.Vector zm
          Wektor zmiennych.
 
Constructor Summary
VM()
          Konstruktor tworzący maszynę wirtualną z przykładowym kodem programu.
VM(java.util.Vector vect, java.util.Vector zmienne)
          Konstruktor tworzący maszynę wirtualną z zadanymi parametrami wektorami.
 
Method Summary
(package private)  int AND(int i)
          Metoda obsługująca operator logiczny and.
private  void createVec()
          Tworzy wektor zawierający przykładowy kod programu.
private  void createZm()
          Tworzy wektor zmiennych używanych w przykładowym kodzie programu utworzonym za pomocą createVec.
private  boolean czyOperator(java.lang.String str)
           
private  boolean czyZmienna(java.lang.String str)
          Sprawdza, czy dany ciąg znaków identyfikuje zmienną.
(package private)  int dodaj(int i)
          Metoda obsługująca operator dodawania ( + ).
private  Zmienna getVar(java.lang.String str)
           
(package private)  int IF(int i)
          Metoda obsługująca instrukcję if pseudokodu.
(package private)  int minus(int i)
          Metoda obsługująca operator odejmowania ( - ).
(package private)  int mniejsze(int i)
          Metoda obsługująca operator mniejszości ( < ).
(package private)  int mniejszeRowne(int i)
          Metoda obsługująca operator "mniejsze bądź równe" ( <= ).
(package private)  int mnozenie(int i)
          Metoda obsługująca operator mnozenia ( * ).
(package private)  int OR(int i)
          Metoda obsługująca operator logiczny OR.
(package private)  int podstawienie(int i)
          Metoda obsługująca operator postawienia ( := ).
(package private)  int podziel(int i)
          Metoda obsługująca operator dzielenia ( / ).
(package private)  int READ(int i)
          Funkcja obsługująca instrukcję READ pseudokodu odpowiedzialną za wczytywanie danych z klawiatury.
(package private)  int READLN(int i)
          Funkcja obsługująca instrukcję READLN pseudokodu odpowiedzialną za wczytywanie danych z klawiatury.
(package private)  int rowne(int i)
          Metoda obsługująca operator równości ( = ).
(package private)  int rozne(int i)
          Metoda obsługująca operator "różne od" ( <> ).
 void runCode()
          Uruchamia wykonywanie kodu przez maszynę wirtualną.
(package private)  int wieksze(int i)
          Metoda obsługująca operator większości ( > ).
(package private)  int wiekszeRowne(int i)
          Metoda obsługująca operator "większe bądź równe" ( >= ).
(package private)  int wykonajInstrukcje(int NR)
          Wykonuje pojedynczą instrukcję pseudokodu.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

instr

int instr
Reprezentuje licznik instrucji w procesorze. Wskazuje na adres instrukcji w wektorze z pseudokodem programu, która ma być wykonana w następnej kolejności. UWAGA !!! Wywołanie konstruktora VM powoduje uruchomienie od razu kodu programu.


v

java.util.Vector v
Wektor zawierający pseudokod programu. Zawiera on zarówno instrukcje jak i ich argumenty oraz odwołania do wektora zmiennych.


zm

java.util.Vector zm
Wektor zmiennych. Zawiera obiekty klasy Zmienna.


stos

java.util.Stack stos
Stos zawierający w trakcie wykonania programu cząstkowe wyniki operacji.


powrot

java.util.Stack powrot
Stos pomocniczy zawierający adresy skoków.

Constructor Detail

VM

public VM()
Konstruktor tworzący maszynę wirtualną z przykładowym kodem programu.


VM

public VM(java.util.Vector vect,
          java.util.Vector zmienne)
Konstruktor tworzący maszynę wirtualną z zadanymi parametrami wektorami.

Parameters:
vect - wektor zawierający kod programu,
zmienne - wektor zawierajacy zmienne występujące w kodzie.
Method Detail

runCode

public void runCode()
Uruchamia wykonywanie kodu przez maszynę wirtualną. Zawiera główną pętlę wykonującą instrukcje. Na początku wywołania licznik instrukcji jest ustawiany na zero. Metoda kończy działanie gdy licznik instrukcji dojdzie do końca wektora z instrukcjami.


wykonajInstrukcje

int wykonajInstrukcje(int NR)
                throws java.lang.Throwable
Wykonuje pojedynczą instrukcję pseudokodu. Rozpoznawany jest rodzaj instrukcji, a następnie wywoływana jest odpowiednia metoda obsługująca dany rodzaj instrukcji ze wskazaniem indeksu pierwszego z parametrów instrukcji. Wyjątkiem są instrukcje write i writeln, które są obsługiwane w ciele metody. Wywoływane metody obsługujące instrukcje mogą wyrzucać wyjątki klasy Throwable.

Parameters:
NR - numer instrukcji do wykonania, jest to indeks instrukcji w wektorze instrukcji (v).
Returns:
Funkcja zwraca indeks następnej instrukcji, która ma być wykonana.
Throws:
java.lang.Throwable - ewentualne wyjątki są wyrzucane wyżej.

READ

int READ(int i)
Funkcja obsługująca instrukcję READ pseudokodu odpowiedzialną za wczytywanie danych z klawiatury.

Parameters:
i - indeks parametru w wektorze instrukcji. Wektor v powinien w tym miejscu zawierać zmienną, na którą ma zostać wczytana wartość z klawiatury.
Returns:
Funkcja zwraca adres (indeks) następnej instrukcji w wektorze instrukcji.

READLN

int READLN(int i)
Funkcja obsługująca instrukcję READLN pseudokodu odpowiedzialną za wczytywanie danych z klawiatury.

Parameters:
i - indeks parametru w wektorze instrukcji. Wektor v powinien w tym miejscu zawierać zmienną, na którą ma zostać wczytana wartość z klawiatury.
Returns:
Funkcja zwraca adres (indeks) następnej instrukcji w wektorze instrukcji.

IF

int IF(int i)
 throws java.lang.Throwable
Metoda obsługująca instrukcję if pseudokodu. Instrukcja if ma dwa agumenty. Najpierw pobierany jest argument tuż za instrukcją. Jest to adres pierwszej instrukcji za blokiem instrukcji wenątrz if. Adres ten zostaje umieszczony na stosie powrot. Następnie pobierany jest drugi argument, który w najprostszym przypadku jest wartością lub zmienną logiczną. Jeśli wartość ta jest prawdą, następuje zdjęcie ze stosu uprzednio umieszczonego tam adresu, gdyż nie będzie on wykorzystany w tym kroku. Następnie zwracany jest adres (indeks) następnej instrukcji (o jeden większy niż drugiego argumentu). Drugim argumentem może również być operator logiczny. Wtedy wywoływana jest metoda wykonajInstrukcje z indeksem tego operatora. Następnie w wyniku ciągu rekurencyjnych wywołań funkcji (po powrocie do aktualnego wywołania funkcji IF) na stosie stos jest obliczona wartość wyrażenia logicznego. Dalej wszystko dzieje się analogicznie do przypadku pierwszego.

Parameters:
i - indeks pierwszego parametru dla instrukcji if.
Returns:
Zwraca indeks następnej instrukcji do wykonania.
Throws:
java.lang.Throwable - ewentualne wyjątki wyrzyca wyżej.

dodaj

int dodaj(int i)
    throws java.lang.Throwable
Metoda obsługująca operator dodawania ( + ). Jest to operator dwuargumentowy. Najpierw pobierany jest pierwszy argument. Jeśli pierwszy argument jest innym operatorem (np. mnożenia), oznacza to że mamy do czynienia z bardziej skomplikowanym wyrażeniem arytmetycznym. Wtedy wywoływana jest metoda wykonajInstrukcje w celu ewaluacji tego podwyrażenia. Po powrocie z ciągu wywołań funkcji obliczona wartość podwyrażenia znajduje się na stosie stos. Podobnie dzieje się z drugim argumentem. Kiedy mamy już obydwa argumenty są one do siebie dodawane, a wynik zostaje położony na stosie stos.

Parameters:
i - indeks pierwszego argumentu w wektorze v.
Returns:
Zwraca indeks następnej instrukcji w wektorze v.
Throws:
java.lang.Throwable - ewentualne wyjątki wyrzuca wyżej.

podziel

int podziel(int i)
      throws java.lang.Throwable
Metoda obsługująca operator dzielenia ( / ). Jest to operator dwuargumentowy. Najpierw pobierany jest pierwszy argument. Jeśli pierwszy argument jest innym operatorem (np. dodawania), oznacza to że mamy do czynienia z bardziej skomplikowanym wyrażeniem arytmetycznym. Wtedy wywoływana jest metoda wykonajInstrukcje w celu ewaluacji tego podwyrażenia. Po powrocie z ciągu wywołań funkcji obliczona wartość podwyrażenia znajduje się na stosie stos. Podobnie dzieje się z drugim argumentem. Kiedy mamy już obydwa argumenty pierszy jest dzielony przez drugi, a wynik zostaje położony na stosie stos.

Parameters:
i - indeks pierwszego argumentu w wektorze v.
Returns:
Zwraca indeks następnej instrukcji w wektorze v.
Throws:
java.lang.Throwable - jeśli dzielnik jest zerem.

minus

int minus(int i)
    throws java.lang.Throwable
Metoda obsługująca operator odejmowania ( - ). Jest to operator dwuargumentowy. Najpierw pobierany jest pierwszy argument. Jeśli pierwszy argument jest innym operatorem (np. mnożenia), oznacza to że mamy do czynienia z bardziej skomplikowanym wyrażeniem arytmetycznym. Wtedy wywoływana jest metoda wykonajInstrukcje w celu ewaluacji tego podwyrażenia. Po powrocie z ciągu wywołań funkcji obliczona wartość podwyrażenia znajduje się na stosie stos. Podobnie dzieje się z drugim argumentem. Kiedy mamy już obydwa argumenty od pierwszego zostaje odjęty drugi, a wynik zostaje położony na stosie stos.

Parameters:
i - indeks pierwszego argumentu w wektorze v.
Returns:
Zwraca indeks następnej instrukcji w wektorze v.
Throws:
java.lang.Throwable - ewentualne wyjątki wyrzuca wyżej.

mnozenie

int mnozenie(int i)
       throws java.lang.Throwable
Metoda obsługująca operator mnozenia ( * ). Jest to operator dwuargumentowy. Najpierw pobierany jest pierwszy argument. Jeśli pierwszy argument jest innym operatorem (np. dodawania), oznacza to że mamy do czynienia z bardziej skomplikowanym wyrażeniem arytmetycznym. Wtedy wywoływana jest metoda wykonajInstrukcje w celu ewaluacji tego podwyrażenia. Po powrocie z ciągu wywołań funkcji obliczona wartość podwyrażenia znajduje się na stosie stos. Podobnie dzieje się z drugim argumentem. Kiedy mamy już obydwa argumenty są one przez siebie mnożone, a wynik zostaje położony na stosie stos.

Parameters:
i - indeks pierwszego argumentu w wektorze v.
Returns:
Zwraca indeks następnej instrukcji w wektorze v.
Throws:
java.lang.Throwable - ewentualne wyjątki wyrzuca wyżej.

AND

int AND(int i)
  throws java.lang.Throwable
Metoda obsługująca operator logiczny and. Jest to operator dwuargumentowy. Najpierw pobierany jest pierwszy argument. Jeśli pierwszy argument jest innym operatorem (np. większości), oznacza to że mamy do czynienia z bardziej skomplikowanym wyrażeniem logicznym. Wtedy wywoływana jest metoda wykonajInstrukcje w celu ewaluacji tego podwyrażenia. Po powrocie z ciągu wywołań funkcji obliczona wartość podwyrażenia znajduje się na stosie stos. Podobnie dzieje się z drugim argumentem. Kiedy mamy już obydwa argumenty są one poddane operacji logicznej and ( && ), a wynik zostaje położony na stosie stos.

Parameters:
i - indeks pierwszego argumentu w wektorze v.
Returns:
Zwraca indeks następnej instrukcji w wektorze v.
Throws:
java.lang.Throwable - ewentualne wyjątki wyrzuca wyżej.

OR

int OR(int i)
 throws java.lang.Throwable
Metoda obsługująca operator logiczny OR. Jest to operator dwuargumentowy. Najpierw pobierany jest pierwszy argument. Jeśli pierwszy argument jest innym operatorem (np. większości), oznacza to że mamy do czynienia z bardziej skomplikowanym wyrażeniem logicznym. Wtedy wywoływana jest metoda wykonajInstrukcje w celu ewaluacji tego podwyrażenia. Po powrocie z ciągu wywołań funkcji obliczona wartość podwyrażenia znajduje się na stosie stos. Podobnie dzieje się z drugim argumentem. Kiedy mamy już obydwa argumenty są one poddane operacji logicznej OR ( || ), a wynik zostaje położony na stosie stos.

Parameters:
i - indeks pierwszego argumentu w wektorze v.
Returns:
Zwraca indeks następnej instrukcji w wektorze v.
Throws:
java.lang.Throwable - ewentualne wyjątki wyrzuca wyżej.

wieksze

int wieksze(int i)
      throws java.lang.Throwable
Metoda obsługująca operator większości ( > ). Jest to operator dwuargumentowy. Najpierw pobierany jest pierwszy argument. Jeśli pierwszy argument jest innym operatorem (np. dodawania), oznacza to że mamy do czynienia z bardziej skomplikowanym wyrażeniem. Wtedy wywoływana jest metoda wykonajInstrukcje w celu ewaluacji tego podwyrażenia. Po powrocie z ciągu wywołań funkcji obliczona wartość podwyrażenia znajduje się na stosie stos. Podobnie dzieje się z drugim argumentem. Kiedy mamy już obydwa argumenty są one ze sobą porównywane, a wynik zostaje położony na stosie stos.

Parameters:
i - indeks pierwszego argumentu w wektorze v.
Returns:
Zwraca indeks następnej instrukcji w wektorze v.
Throws:
java.lang.Throwable - ewentualne wyjątki wyrzuca wyżej.

mniejsze

int mniejsze(int i)
       throws java.lang.Throwable
Metoda obsługująca operator mniejszości ( < ). Jest to operator dwuargumentowy. Najpierw pobierany jest pierwszy argument. Jeśli pierwszy argument jest innym operatorem (np. dodawania), oznacza to że mamy do czynienia z bardziej skomplikowanym wyrażeniem. Wtedy wywoływana jest metoda wykonajInstrukcje w celu ewaluacji tego podwyrażenia. Po powrocie z ciągu wywołań funkcji obliczona wartość podwyrażenia znajduje się na stosie stos. Podobnie dzieje się z drugim argumentem. Kiedy mamy już obydwa argumenty są one ze sobą porównywane, a wynik zostaje położony na stosie stos.

Parameters:
i - indeks pierwszego argumentu w wektorze v.
Returns:
Zwraca indeks następnej instrukcji w wektorze v.
Throws:
java.lang.Throwable - ewentualne wyjątki wyrzuca wyżej.

rowne

int rowne(int i)
    throws java.lang.Throwable
Metoda obsługująca operator równości ( = ). Jest to operator dwuargumentowy. Najpierw pobierany jest pierwszy argument. Jeśli pierwszy argument jest innym operatorem (np. dodawania), oznacza to że mamy do czynienia z bardziej skomplikowanym wyrażeniem. Wtedy wywoływana jest metoda wykonajInstrukcje w celu ewaluacji tego podwyrażenia. Po powrocie z ciągu wywołań funkcji obliczona wartość podwyrażenia znajduje się na stosie stos. Podobnie dzieje się z drugim argumentem. Kiedy mamy już obydwa argumenty są one ze sobą porównywane, a wynik zostaje położony na stosie stos.

Parameters:
i - indeks pierwszego argumentu w wektorze v.
Returns:
Zwraca indeks następnej instrukcji w wektorze v.
Throws:
java.lang.Throwable - ewentualne wyjątki wyrzuca wyżej.

wiekszeRowne

int wiekszeRowne(int i)
           throws java.lang.Throwable
Metoda obsługująca operator "większe bądź równe" ( >= ). Jest to operator dwuargumentowy. Najpierw pobierany jest pierwszy argument. Jeśli pierwszy argument jest innym operatorem (np. dodawania), oznacza to że mamy do czynienia z bardziej skomplikowanym wyrażeniem. Wtedy wywoływana jest metoda wykonajInstrukcje w celu ewaluacji tego podwyrażenia. Po powrocie z ciągu wywołań funkcji obliczona wartość podwyrażenia znajduje się na stosie stos. Podobnie dzieje się z drugim argumentem. Kiedy mamy już obydwa argumenty są one ze sobą porównywane, a wynik zostaje położony na stosie stos.

Parameters:
i - indeks pierwszego argumentu w wektorze v.
Returns:
Zwraca indeks następnej instrukcji w wektorze v.
Throws:
java.lang.Throwable - ewentualne wyjątki wyrzuca wyżej.

mniejszeRowne

int mniejszeRowne(int i)
            throws java.lang.Throwable
Metoda obsługująca operator "mniejsze bądź równe" ( <= ). Jest to operator dwuargumentowy. Najpierw pobierany jest pierwszy argument. Jeśli pierwszy argument jest innym operatorem (np. dodawania), oznacza to że mamy do czynienia z bardziej skomplikowanym wyrażeniem. Wtedy wywoływana jest metoda wykonajInstrukcje w celu ewaluacji tego podwyrażenia. Po powrocie z ciągu wywołań funkcji obliczona wartość podwyrażenia znajduje się na stosie stos. Podobnie dzieje się z drugim argumentem. Kiedy mamy już obydwa argumenty są one ze sobą porównywane, a wynik zostaje położony na stosie stos.

Parameters:
i - indeks pierwszego argumentu w wektorze v.
Returns:
Zwraca indeks następnej instrukcji w wektorze v.
Throws:
java.lang.Throwable - ewentualne wyjątki wyrzuca wyżej.

rozne

int rozne(int i)
    throws java.lang.Throwable
Metoda obsługująca operator "różne od" ( <> ). Jest to operator dwuargumentowy. Najpierw pobierany jest pierwszy argument. Jeśli pierwszy argument jest innym operatorem (np. dodawania), oznacza to że mamy do czynienia z bardziej skomplikowanym wyrażeniem. Wtedy wywoływana jest metoda wykonajInstrukcje w celu ewaluacji tego podwyrażenia. Po powrocie z ciągu wywołań funkcji obliczona wartość podwyrażenia znajduje się na stosie stos. Podobnie dzieje się z drugim argumentem. Kiedy mamy już obydwa argumenty są one ze sobą porównywane, a wynik zostaje położony na stosie stos.

Parameters:
i - indeks pierwszego argumentu w wektorze v.
Returns:
Zwraca indeks następnej instrukcji w wektorze v.
Throws:
java.lang.Throwable - ewentualne wyjątki wyrzuca wyżej.

podstawienie

int podstawienie(int i)
           throws java.lang.Throwable
Metoda obsługująca operator postawienia ( := ). Jest to operator dwuargumentowy. Pierwszym argumentem jest zmienna, na którą ma być podstawiona wartość, a drugim wyrażenie, zmienna lub wartość. Jeśli jest to wartość lub zmienna, to zostaje ustawiona odpowiednia wartość w wektorze zmiennych. Jeśli jest to wyrażenie, to najpierw zostaje wywołana funkcja wykonajInstrukcje w celu obliczenia wartosci wyrażenia. Następnie obliczona wartość jest ściągana ze stosu i podstawiana na odpowiednią zmienną w wektorze zmiennych.

Parameters:
i - indeks pierwszego argumentu w wektorze v.
Returns:
indeks następnej instrukcji w wektorze instrukcji (v).
Throws:
java.lang.Throwable - jeśli pierszym argumentem nie jest zmienna.

czyZmienna

private boolean czyZmienna(java.lang.String str)
Sprawdza, czy dany ciąg znaków identyfikuje zmienną. Wszystkie ciągi znaków reprezentujące zmienne zaczynają się od znaku dolara ( $ ).

Parameters:
str - ciąg znaków poddawany testowi.
Returns:
true, jeśli str reprezentuje zmienną lub false w przeciwnym przypadku.

getVar

private Zmienna getVar(java.lang.String str)
Parameters:
str - ciąg znaków identyfikujący zmienną.
Returns:
Zwraca zmienną identyfikowaną przez dany ciąg znaków.

czyOperator

private boolean czyOperator(java.lang.String str)
Parameters:
str - ciąg znaków poddawanych testowi.
Returns:
true, jeśli ciąg znaków jest operatorem, false jeśli nim nie jest.

createVec

private void createVec()
Tworzy wektor zawierający przykładowy kod programu.


createZm

private void createZm()
Tworzy wektor zmiennych używanych w przykładowym kodzie programu utworzonym za pomocą createVec.