This shows you the differences between two versions of the page.
Both sides previous revision Previous revision | |||
abap2015 [2016/02/17 09:48] deva removed |
— (current) | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ===== A beadandóhoz használandó programozási nyelv leírása ===== | ||
- | 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 [[http://en.wikipedia.org/wiki/ABAP|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 [[http://deva.web.elte.hu/fordprog/abap2015-tesztfajlok.zip|letölthetőek]]! | ||
- | |||
- | <code> | ||
- | * 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. | ||
- | </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. Az ABAP-pal ellentétben ebben a nyelvben számítanak a kis és nagybetűk. | ||
- | |||
- | |||
- | === 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. |