User Tools

Site Tools


abap2015

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
abap2015 [2015/10/02 16:06]
deva created
abap2015 [2016/02/17 09:48]
deva removed
Line 1: Line 1:
-==== A beadandóhoz használandó programozási nyelv leírása ====+===== 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 félév során az alábbi programozási nyelvhez kell fordítóprogramot írni //flex// és //​bisonc++//​ segítségével.
Line 8: Line 8:
  
 Tesztfájlok [[http://​deva.web.elte.hu/​fordprog/​abap2015-tesztfajlok.zip|letölthetőek]]! 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.