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 for és while ciklus C szerű szintaktikával, break és continue.
  • Legyen benne if és switch-case-default utasítás is.
starttime = TIME
sum = 0;
for (x=0;x<1000;x=x+1) {
  sum = sum + x;
}
print(sum)
print(TIME-starttime)

Eddig választották: Budavári Mátyás, Ficand Tamás, Tóth Róbert, Dér Gergely, Börcsök Péter [betelt]

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: Gulyás Róbert, Birkás Tamás

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: Nagy Tamás, Vincze Attila, Kopasz Tamás, Hornyák Ádám