User Tools

Site Tools


fordprog:basic2016

A beadandóhoz használandó programozási nyelv leírása (Basic, 2016 tavasz)

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 nyelv definíciója

Karakterek

A forrásfájlok a következő ASCII karaktereket tartalmazhatják:

  • az angol abc kis és nagybetűi
  • számjegyek (0-9)
  • ()+-*\<>=&
  • szóköz, tab, sorvége

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.

Kulcsszavak

A nyelv kulcsszavai a következők: INPUT, PRINT, LET, IF, THEN, ELSE, ENDIF, WHILE, WEND, REM, END, NOT

Változók

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.

Típusok

  • Egész szám típus: Négy bájtos, előjel nélküli egészként kell megvalósítani. A számliterálok számjegyekből állnak és nincs előttük előjel. Kizárólag a 0 számliterál kezdődhet nullával, tehát például a 00 és 0987 hibásak!
  • Logikai típus: Egy bájton kell ábrázolni a generált assembly kódban. Logikai típusú literálok és változók nincsenek a nyelvben, logikai típusú kifejezések viszont létrehozhatók a logikai típusú operátorok segítségével.

Megjegyzések

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 felépítése

A program utasítások sorozatából áll, és lehet üres is.

Kifejezések
  • Egész szám típusú kifejezések: számliterálok, változók és az ezekből a + (ö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.
  • Logikai típusú kifejezések: az = (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.
  • Az operátorok mind balasszociatívak és a precedenciájuk növekvő sorrendben a következő:
    • OR
    • AND
    • NOT
    • =
    • < > <= >=
    • + -
    • * \ MOD
  • A kifejezések a szokásos módon zárójelezhetők.
Utasítások
  • Értékadás: a LET kulcsszó után, az = operátorral. A bal oldalon egy változó, a jobb oldalon egy egész típusú kifejezés állhat.
  • Az 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.)
  • A 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.)
  • Ciklus:
    • WHILE feltétel utasítások WEND
    • A feltétel logikai kifejezés, és a ciklus belsejében legalább egy utasításnak kell lennie. A megszokott módon, elöltesztelős ciklusként működik.
  • Elágazás:
    • IF feltétel THEN utasítások ENDIF
    • IF feltétel THEN utasítások ELSE utasitasok ENDIF
    • A feltétel logikai kifejezés, és az egyes ágakban legalább egy-egy utasítás van. A megszokott módon működik.
  • Az 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.)
fordprog/basic2016.txt · Last modified: 2016/03/25 11:09 by deva