uszczegolowie:
Plik źródłowy > Skaner > Parser > Wykonawca kodu
plik zrodlowy - no.. wiadomo.. strumien tekstowy, np. int x;x=5;++x;
skaner - jest to 'program' ktory tlumaczy kod zrodlowy na postac prostsza w zrozumieniu dla parsera. w szczegolnosci polega to na dzieleniu strumienia wejsciowego na tzw. tokeny: operatory, slowa kluczowe, wartosci itp. i tak dla owego przykladu, wyjsciem skanera by byl strumien tokenow {datatype:int} {identifier:'x'} {parserhelper:semicolon} {identifier:'x'} {operator:assign} {value:5} {parserhelper:semicolon} {operator:increment} {identifier:'x'} {parserhelper:semicolon}
parser - to 'program' sprawdzajacy poprawnosc skladni i - uwaga - albo wykonywacz na biezaco (czysty interpreter!) albo tlumacz na kod binarny (kompilator!). w Twoim przypadku wyglada na to masz zrobic parser-kompilator a potem jego wynik wykonac.. parsery generalnie sa zbudowane jako reguly, np.
datatype, identifier => createvariable identifier with datatype
identifier, assign, value => setvariable identifier to value
identifier, assign, identifier2 => setvariable identifier to getvalueofvariable(identifier2)
increment, identifier => prefixincrement of identifier
identifier, increment => postfixincrement of identifier
etc
oczywiscie postac regul strywializowalem, sa one czysto zalezne od tego jak Twoj jezyk ma wygladac.. a wiec wynikiem Twojego parsera powinien byc ciag instrukcji/bytecodu: {createvariable name=x type=int} {setvariable name='x' value='5'} {incrementvariable name='x'}
.. albo bytecode np. {01 "x\0" 01} {02 "x\0" 0000005} {03 "x\0"}
tak na prawde architekturalnie to bez roznicy - jak Ci wygodniej - po prostu bytecode bezdie szybszy w wykonywaniu
no i na koniec wykonywacz, generalnie w postaci wielkej petli czytajacej rozkazy, w srodki gigantyczny switch pobierajacy kodziki instrukcji, i nastepnie juz w bloczku case wykonujacy pobranie i kontrole specyficznych argumentow no i wykonanie samej operacji..
oczywiscie na kazdym poziomie - skaner - parser - executive - moga wystapic bledy. skaner - nierozpoznane konstrukcje znakowe, parser - blad skladni, executive - np. division by zero
zanim zaczniesz pisac samemu cos w Javie, badzo polecam zapoznac sie z FLEX i BISON albo YACC generujacymi kod skanerow, parserow, interpreterow/kompilatorow na podstawie podanych regul przetwarzania oraz kawalkow kodu