This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
fordprog:basic2016 [2016/02/17 10:03] deva |
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 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ől, számjegyekből és ''_'' jelből állhatnak, és betűvel kell kezdődniük. | + | A változók nevei betűvel kezdődnek, betű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ípus: Né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ával, tehát például a ''00'' és ''0987'' hibásak! |
- | * ''B'': egy bájton kell ábrázolni, literáljai a ''FALSE'' és a ''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 === | ||
- | 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 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ó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. | + | 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ó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. | + | * 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: a ''LET'' kulcsszó után, az ''='' operátorral. A bal oldalon egy változó, a 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.) | ||
+ |