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 a Basic egyszerűsített változata. Az alábbi példaprogram a bemeneten kapott nemnegatív egész szám legkisebb valódi osztóját számolja ki.
Tesztfájlok letölthetőek!
REM Legkisebb valódi osztó meghatározása INPUT a& LET i& = 2 WHILE i& < a& IF a& MOD i& = 0 THEN PRINT i& END ENDIF LET i& = i& + 1 WEND
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. A nyelv case-sensitive, azaz számít a kis és nagybetűk közötti különbség.
A nyelv kulcsszavai a következők:
INPUT
, PRINT
, LET
, IF
, THEN
, ELSE
, ENDIF
, WHILE
, WEND
, REM
, END
, NOT
A változók nevei betűvel kezdődnek, betűkkel és számjegyekkel folytatódhatnak és a & karakterrel kell végződniük.
Valamennyi változó egész szám típusú, és nem kell deklarálni őket.
0
számliterál kezdődhet nullával, tehát például a 00
és 0987
hibásak!A REM kulcsszótól kezdve a sor végéig. Megjegyzések a program tetszőleges pontján előfordulhatnak, a fordítást és a keletkező programkódot nem befolyásolják.
A program utasítások sorozatából áll, és lehet üres is.
+
(összedás), -
(kivonás), *
(szorzás), \
(egészosztás), MOD
(maradékképzés) infix operátorokkal és zárójelekkel felépített kifejezések.=
(egyenlőség), <
(kisebb), >
(nagyobb), <
=
(kisebb egyenlő), >=
(nagyobb egyenlő), AND
(konjunkció), OR
(diszjunkció) infix és a NOT
(negáció) prefix operátorral és zárójelekkel felépített kifejezések.OR
AND
NOT
=
<
>
<
=
>=
+
-
*
\
MOD
LET
kulcsszó után, az =
operátorral. A bal oldalon egy változó, a jobb oldalon egy egész típusú kifejezés állhat.INPUT
utasítás a megadott változóba olvas be egy értéket a standard bemenetről. (Megvalósítása: meg kell hívni a be_egesz
eljárást, amit a 4. beadandóhoz mellékelt C fájl tartalmaz. A beolvasott érték az eax
regiszterben lesz.)PRINT
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_egesz
vagy ki_logikai
eljárást, amit a 4. beadandóhoz mellékelt C fájl tartalmaz. Paraméterként a kiírandó értéket (mindkét esetben 4 bájtot) kell a verembe tenni.)WHILE
feltétel utasítások WEND
IF
feltétel THEN
utasítások ENDIF
IF
feltétel THEN
utasítások ELSE
utasitasok ENDIF
END
utasítás terminálja a programot. (A program akkor is véget ér, ha nincs több végrehajtandó utasítás: nem kötelező, hogy a program utolsó utasítása END
legyen.)