User Tools

Site Tools


fordprog:basic2016

Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Last revision Both sides next revision
fordprog:basic2016 [2016/02/17 10:03]
deva
fordprog:basic2016 [2016/03/25 11:08]
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 a [[http://​en.wikipedia.org/​wiki/​BASIC_programming_language|Basic]] egyszerűsített változata.+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.
  
-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/​basic2016-tesztfajlok.zip|letölthetőek]]!
- +
-Tesztfájlok [[http://​deva.web.elte.hu/​fordprog/​abap2015-tesztfajlok.zip|letölthetőek]]!+
  
 <​code>​ <​code>​
Line 37: Line 35:
  
 A nyelv kulcsszavai a következők:​ A nyelv kulcsszavai a következők:​
-''​INPUT'',​ ''​PRINT'',​ ''​LET'',​ ''​IF'',​ ''​THEN'',​ ''​ELSE'',​ ''​ENDIF'',​ ''​WHILE'',​ ''​WEND'',​ ''​REM'',​ ''​END''​+''​INPUT'',​ ''​PRINT'',​ ''​LET'',​ ''​IF'',​ ''​THEN'',​ ''​ELSE'',​ ''​ENDIF'',​ ''​WHILE'',​ ''​WEND'',​ ''​REM'',​ ''​END'',​ ''​NOT''​
  
-=== Azonosítók ​===+=== Változók ​===
  
-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.+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övevő 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.txt · Last modified: 2016/03/25 11:09 by deva