Fordítóprogramok projektfeladatok 2016

1. Skript nyelv megvalósítása AST generálással. A nyelv utasításai (amelyek ;-vel záródnak) a következők legyenek:

  • Egy kifejezés a következő operátorokkal/műveletekkel, megfelelő precedenciákkal: +,-,*,/,(,),ABS(),?:,=,==,<,>. Az utolsó 3 logiai kifejezés értéke 0 ha nem igaz, 1 ha igaz.
  • Legyen penne print(...) utasítás, ami a paraméterül kapott kifejezést, vagy kifejezéseket kiírja).
  • A kifejezés levelében lehet szám (egész és tizedes tört is), lehet változónév (ha eddig nem volt neki érték adva, akkor az értéke legyen 0), és lehet TIME is, ami az aktuális idő (a UNIX idő, azaz az 1970 óta eltelt másodpercek száma).
  • Lehessen benne változókat deklarálni int vagy double típusokkal (csak ez a kettő).
  • Lehessen benne for és while ciklus C szerű szintaktikával, break és continue.
  • Legyen benne if és switch-case-default utasítás is.
int starttime;
int sum;
starttime = TIME;
sum = 0;
for (x=0;x<1000;x=x+1) {
  sum = sum + x;
}
print(sum);
print(TIME-starttime);

Eddig választották:Vince Dániel, Vakula Mariann, Hajagos Károly, Domány Szilveszter, Bánkeszi Ádám, Gajdácsi Enikő, Vetráb Mercedes, Sinkó Péter, Balázs Tibor [megtelt]

2. Táblázatkezelő megvalósítása AST generálással. A program bemenetként egy CSV fájlt várjon, ahol az egyes cellákban vagy számok, vagy stringek, vagy kifejezések lehetnek. Kimentként ki kell számolnia az összes kifejezést és HTML táblázatba kiírni a kiszámoltakat. A kifejezést tartalmazó cellák = jellel kezdődnek. Egy kifejezésben lehet:

  • Egyszerű (egész vagy tizedestört) szám, vagy szöveg macskakörmök között
  • A számokra legyen értelmeve a 4 alapművelet zárójelezéssel
  • A szövegnél a + operátor konkatenációt jelentsen. Ha stringet kell számmal összefűzni, akkor a szám értéke szövegesen fűződjön hozzá. Pl. "Eredemény="+(2+2) értéke "Eredmény=4" legyen.
  • Tartalmazhat cellahivatkozást is. (Pl. A1 az első cella értékét jelenti) Körkörös hivatkozásba ne halljon bele - detektálja valahogy.
  • Tartalmazhat SUM(...) kifejezést, ami paraméterül egy cellatartományt vár kezdőcella:végcella formában.
12;=35.5+6*2;=A1+B1
"szöveg";"másik szöveg";=A2+B2+C1

Eddig választották: Aladics Tamás, Kószó Dávid, Keleti Márton, Márkus András, Torma Roland, Kokrehel Grácián

3. Byte-kódgenerálás és futtatás. A program inputként kifejezéseket kap a négy alapművelettel, zárójelezéssel és értékadással, ahol a változók m[x] nevűek, ahol x 0 és 99 között szám lehet. (Azaz fixen 100 féle változó van csak összesen a rendszerben, kezdetben mindegyik értéke 0). Ebből kell ANTLR nyelvtan segítségével saját bájtkódot generálni. A bájtkód specifikációjában (milyen kódú opkód milyen utasítást jelent) szabad kezed van, és abban is, hogy az azt futtató virtuális gépet milyen nyelven implementálod - azaz annak nem kell ANTLR-rel készülnie. Lényeg, hogy a generált kód a virtuális gépen futtatva kiírja a konzolra az összes kifejezés értékét.

m[1]=12+3*5
23-(5-1)+2*m[1]

Eddig választották: Cirok Dávid, Krizsák Tibor, Cserni Bálint