User Tools

Site Tools


fordprog:basic2016

This is an old revision of the document!


A PCRE internal error occured. This might be caused by a faulty plugin

===== 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 [[http://en.wikipedia.org/wiki/BASIC_programming_language|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 [[http://deva.web.elte.hu/fordprog/abap2015-tesztfajlok.zip|letölthetőek]]! <code> 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 </code> ==== 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'' === Azonosítók === A változók nevei, illetve a program neve az angol ábécé kisbetűiből, számjegyekből és ''_'' jelből állhatnak, és betűvel kell kezdődniük. === Típusok === * ''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őjel * ''B'': egy bájton kell ábrázolni, literáljai a ''FALSE'' és a ''TRUE'' === Megjegyzések === A sor elején álló ''*'' karakterektő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 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. == Változódeklarációk == 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 == Kifejezések == * ''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. * Az infix operátorok mind balasszociatívak és a precedenciájuk növevő sorrendben a következő: * ''OR'' * ''AND'' * ''='' * ''<'' ''>'' == Utasítások == * Értékadás: ''MOVE'' kifejezés ''TO'' változó ''.'' alakú. A változó és a kifejezés típusa csak azonos lehet. * Olvasás: A ''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.) * Írás: A ''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.) * Aritmetika: * ''ADD'' kifejezés ''TO'' változó ''.'' * ''SUBTRACT'' kifejezés ''FROM'' változó ''.'' * ''MULTIPLY'' változó ''BY'' kifejezés ''.'' * ''DIVIDE'' változó ''BY'' kifejezés ''.'' * ''MOD'' változó ''BY'' kifejezés ''TO'' változó ''.'' * Ciklus: ''WHILE'' feltétel ''.'' utasítások ''ENDWHILE'' ''.'' * 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 ''.'' utasítások ''ENDIF'' ''.'' * ''IF'' feltétel ''.'' 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.

fordprog/basic2016.1455699816.txt.gz · Last modified: 2016/02/17 10:03 by deva