A félév során az alábbi programozási nyelvhez kell fordítóprogramot írni flex és bisonc++ segítségével.
A nyelv az ABAP egyszerűsített változata.
Az alábbi példaprogram a bemenetről logikai értékeket és egészeket olvas felváltva. Az egészek közül a 10 és 100 közöttieket összeadja, amíg először hamis értéket nem kap a bemeneten. Az összeget kiírja a kimenetre.
Tesztfájlok letölthetőek!
* Osszegzes PROGRAM osszeg. DATA: i TYPE I, s TYPE I, more TYPE B. MOVE 0 TO s. READ TO more. WHILE more. READ TO i. IF i> 10 AND i < 100. ADD i TO s. ENDIF. READ TO more. ENDWHILE. WRITE s.
A forrásfájlok a következő ASCII karaktereket tartalmazhatják:
():<>=,.
Minden más karakter esetén hibajelzést kell adnia a fordítónak, kivéve megjegyzések belsejében, mert ott tetszőleges karakter megengedett. Az ABAP-pal ellentétben ebben a nyelvben számítanak a kis és nagybetűk.
A változók nevei, illetve a program neve az angol ábécé kisbetűiből, nagybetűiből és számjegyekből állhatnak, és betűvel kell kezdődniük.
I
: négy bájtos, előjel nélküli egészként kell megvalósítani; literáljai számjegyekből állnak és nincs előttük előjelB
: egy bájton kell ábrázolni, literáljai a FALSE
és a TRUE
A sor elején álló *
karakterektől kezdve a sor végéig. Megjegyzések a program tetszőleges sorában előfordulhatnak (de csak a sor elején). A fordítást és a keletkező programkódot nem befolyásolják.
A program szignatúrából, deklarációs részből és törzsből. A szignatúra tartalma: PROGRAM
név .
, ahol a név tetszőleges azonosító. A deklarációs részt DATA:
vezeti be. A deklarációs rész nem kötelező, de ha van, akkor legalább egy változódeklarációt tartalamaz. A törzs utasításokat tartalamaz, de lehet üres is.
Minden változót név TYPE
típus alakban, egy vesszőkkel elválasztott listában kell deklarálni, minden változóhoz külön feltüntetve a típusát
I
típusú kifejezések: számliterálok, I
típusú változók.B
típusú kifejezések: TRUE
és FALSE
, B
típusú változók, két I
típusú kifejezésből az =
(egyenlőség), <
(kisebb), >
(nagyobb) infix operátorral, valamint az ezekből AND
(konjunkció), OR
(diszjunkció) infix és a NOT
(negáció) prefix operátorral és zárójelekkel felépített kifejezések.OR
AND
=
<
>
MOVE
kifejezés TO
változó .
alakú. A változó és a kifejezés típusa csak azonos lehet.READ
TO
változó .
utasítás a megadott változóba olvas be egy megfelelő típusú értéket a standard bemenetről. (Megvalósítása: meg kell hívni a be eljárást, amit a 4. beadandó feladathoz mellékelt C fájl tartalmaz. A beolvasott érték az eax (logikai típus esetén az al) regiszterben lesz.)WRITE
utasítás .
a megadott kifejezés értékét a képernyőre írja (és egy sortöréssel fejezi be). (Megvalósítása: meg kell hívni a ki eljárást, amit a 4. beadandó feladathoz mellékelt C fájl tartalmaz. Paraméterként a kiírandó értéket (mindkét esetben 4 bájtot) kell a verembe tenni.)ADD
kifejezés TO
változó .
SUBTRACT
kifejezés FROM
változó .
MULTIPLY
változó BY
kifejezés .
DIVIDE
változó BY
kifejezés .
WHILE
feltétel .
utasítások ENDWHILE
.
IF
feltétel .
utasítások ENDIF
.
IF
feltétel .
utasítások ELSE
.
utasitasok ENDIF
.
IF
feltétel .
utasítások ELSEIF
feltétel .
utasitasok … ENDIF
.
IF
ágból pontosan egy van, ami az első ág. ELSEIF
ágból akárhány lehet. Az ELSE
ág nem kötelező, legfeljebb egy lehet belőle, és ha van, akkor az az utolsó ág. A megszokott módon működik.