Mi lenne a jobb megoldás?
A változók kezelése úgy történik, hogy egy dinamikus tömbben nyernek elhelyezést, egy-egy név-érték páros formájában. A tömb mérete mindig a változók számához igazodik.
Arra gondoltam, hogy az interpreter inicializálásánál a nyelv kulcsszavait változóként deklarálnám, tehát elhelyezném a kulcssaztavakat ebben a dinamikus tömbben és az eredetileg név-érték tartalmú struktúra kiegészülne egy boolean taggal is, amit a kulcsszavak esetében FALSE értékre állítanék.
Ha valaki tud valami ettől különböző, lehetőleg jobb, praktikusabb megoldást a kulcsszavak kezelésére, azt szívesen venném.
2-es vagyok.
A te módszered csak akkor fog müködni szépen, ha a kulcsszavaidnak nincs speciális szintaxisa(mint pl a lisp nyelvekben).
Gondolj csak bele, hogy pl a for ciklushoz tartozik egy 'for' kulcsszó, a nyelvedben meg leírod azt, hogy:
for i in (0..5) <- tegyük fel, hogy ez egy valid részlet.
Ha ezt tokenizálod, akkor kapsz valami olyan token streamet, hogy:
ID(for), ID(i), ID(in), L_BRACKET, LITERAL(0), DOTDOT, LITERAL(5), R_BRACKET.
Mivel ugyanolyan fajta tokent használsz(ID) a kulcsszavaidra(for, in) mint a változóidra(i), ezért a szintaktikai parseolásnál nem fogod tudni kiszürni az ilyen sorokat:
a b c (1 .. 5)
gondolom ennek a sornak nem kéne validnak lennie. De ezt már csak valami szemantikai ellenörzésnél fogod tudni kiszürni.
Jó az, amiket írsz, de én a forráskód feldolgozása során nem feleltetem meg a kulcsszavakat vagy a nyelv operátorait belső azonosítókkal. Bár tény, hogy általában így szokás ezt, ahogy te írod.
Az interpreter szerkezete roppant egyszerű. Első lépésben megtisztítja a kódot, tehát kiszórja a komment sorokat és némi előfeldolgozást végez, ami annyit tesz, hogy regisztrálja a függvények és a main loop belépési címét. Ezután soronként dolgozza fel és hajtja végre a forrást. Nincs tokenizálás, meg szintaxisfa.
LooooooooL
Végülis kb 80 éves szakirodalom van arról, hogy hogyan kell egy nyelvet/fordítót/interpretert megírni, de végülis minek vesztegetné az ember a drága idejét ilyen bohóckodásokkal. :D :D
Meg amúgyis minek kellenének egy nyelvbe függvények vagy egyéb bármilyen más úri huncutságok.
Összességében arról van szó, hogy ez az egyszerű kis interpreter egy részfeladat megkönnyítésére lett létrehozva. Teszi is a dolgát, ahogy kell. Nem lett 100 %-osan hibatűrő, mert nem láttam értelmét, csak az idő ment volna el vele. Elvégre, nyilván nem fogom, mondjuk a THEN kulcsszót változó azonosítóként felhasználni, ráadásul, egyedül én használtam eddig az interpretert.
A helyzet most változott, mert úgy alakult, hogy más is használni fogja ezt a vackot, neki meg nem szeretném úgy a kezébe adni, ahogy most van, mert ha így használja majd és belefut egy két hibába, az az egészről igénytelenséget sugalmazna.
Nincs nagy jelentősége a kérdésnek, mert az általam vázolt módon kivitelezhető a dolog csak kiváncsi voltam, akad-e valami más, frappánsabb megoldás.
Az első válaszolónak nagyon köszönöm a remek megállapításait, észrevételeit, a második válaszolónak meg azt javasolnám, hogy ne itt adjon kioktató jellegű "tanácsot" másoknak, hanem inkább ő fogadja meg, egy pszichológus tanácsait, mert innen úgy tűnik, hogy nagyon ráfér.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!