User Tools

Site Tools


fordprog:basic2016

Differences

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

Link to this comparison view

Next revision
Previous revision
fordprog:basic2016 [2016/02/17 09:58]
deva created
fordprog:basic2016 [2016/03/25 11:09] (current)
deva
Line 3: Line 3:
 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.
  
-A nyelv az [[http://​en.wikipedia.org/​wiki/​ABAP|ABAP]] egyszerűsített változata.+A nyelv [[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.
  
-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/​basic2016-tesztfajlok.zip|letölthetőek]]!
- +
-Tesztfájlok [[http://​deva.web.elte.hu/​fordprog/​abap2015-tesztfajlok.zip|letölthetőek]]!+
  
 <​code>​ <​code>​
-* Osszegzes +REM Legkisebb valódi osztó meghatározása 
-PROGRAM osszeg. +INPUT a& 
-DATA: +LET i& = 2 
-  ​TYPE I, +WHILE i& < a& 
-  s TYPE I, + ​IF ​a& MOD i& = 0 THEN 
-  more TYPE B. +  ​PRINT ​i& 
-MOVE 0 TO s. +  ​END 
-READ TO more. + ENDIF 
-WHILE more. + LET i& = i& + 1 
-  READ TO i. +WEND
-  IF i> 10 AND i < 100. +
-    ​ADD ​TO s. +
-  ENDIF. +
-  READ TO more. +
-ENDWHILE. +
-WRITE s.+
 </​code>​ </​code>​
  
Line 35: Line 27:
   * az angol abc kis és nagybetűi   * az angol abc kis és nagybetűi
   * számjegyek (0-9)   * számjegyek (0-9)
-  * ''​():<>=_,​.''​ +  * ()+-*\<>=& 
-  * szóköz, tab, sorvége ​+  * 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.+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 ===
  
-=== Azonosítók ===+A nyelv kulcsszavai a következők:​ 
 +''​INPUT'',​ ''​PRINT'',​ ''​LET'',​ ''​IF'',​ ''​THEN'',​ ''​ELSE'',​ ''​ENDIF'',​ ''​WHILE'',​ ''​WEND'',​ ''​REM'',​ ''​END'',​ ''​NOT''​
  
-A változók nevei, illetve a program neve az angol ábécé kisbetűibőlszámjegyekből ​és ''​_''​ jelből állhatnak, és betűvel ​kell kezdődniük.+=== Változók === 
 + 
 +A változók nevei betűvel kezdődnekbetű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 === === 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 +  * Egész szám típusNé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ávaltehát például ​a ''​00''​ és ''​0987'' ​hibásak! 
-  * ''​B''​: egy bájton kell ábrázolniliteráljai ​a ''​FALSE''​ és ''​TRUE''​+  * 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 === === Megjegyzések ===
  
-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.+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 felépítése ===
  
-A program ​szignatúrábóldeklará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. +A program ​utasítások sorozatából áll, és 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 == == Kifejezések ==
  
-  * ''​I'' ​típusú kifejezések:​ számliterálok, ​''​I''​ típusú ​változók+  * 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. 
-  * ''​B'' ​típusú kifejezések: ​''​TRUE'' ​és ''​FALSE'',​ ''​B'' ​típusú változókkét ''​I''​ típusú ​kifejezésből ​az ''​=''​ (egyenlőség),​ ''<''​ (kisebb), ''>''​ (nagyobb) ​infix operátorralvalamint az ezekbő''​AND''​ (konjunkció),​ ''​OR''​ (diszjunkció) infix és a ''​NOT''​ (negáció) prefix operátorral é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 infix operátorok mind balasszociatívak és a precedenciájuk ​növevő sorrendben a következő:​+  * Az operátorok mind balasszociatívak és a precedenciájuk ​növekvő sorrendben a következő:​
     * ''​OR''​     * ''​OR''​
     * ''​AND''​     * ''​AND''​
 +    * ''​NOT''​
     * ''​=''​     * ''​=''​
-    * ''<''​ ''>''​+    * ''<''​ ''>'' ​''<''''​=''​ ''>​=''​ 
 +    * ''​+''​ ''​-''​ 
 +    * ''​*''​ ''​\''​ ''​MOD''​ 
 +  * A kifejezések a szokásos módon zárójelezhetők.
  
 == Utasítások == == 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+  * Értékadás: ​''​LET'' ​kulcsszó után, az ''​='' ​operátorral. A bal oldalon egy változójobb oldalon egy egész típusú ​kifejezés ​állhat
-  * 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.) +  * 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.) 
-  * Í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.) +  * 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.) 
-  * Aritmetika+  * Ciklus
-    * ''​ADD''​ kifejezés ''​TO''​ változó ''​.''​ +    * ''​WHILE''​ feltétel utasítások ''​WEND''​
-    * ''​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.     * 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:   * Elágazás:
-    * ''​IF''​ feltétel ''​.''​ utasítások ''​ENDIF''​ ''​.''​ +    * ''​IF''​ feltétel ''​THEN''​ utasítások ''​ENDIF''​ 
-    * ''​IF''​ feltétel ''​.''​ utasítások ''​ELSE''​ ''​.''​ utasitasok ''​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.     * 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.1455699501.txt.gz · Last modified: 2016/02/17 09:58 by deva