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 |
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.
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.
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.