User Tools

Site Tools


fordprog:plang2017

Differences

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

Link to this comparison view

Next revision
Previous revision
fordprog:plang2017 [2017/09/20 17:30]
deva created
fordprog:plang2017 [2017/11/04 17:32] (current)
deva
Line 7: Line 7:
 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/​plang2017-tesztfajlok.zip|letölthetőek]]!+Tesztfájlok [[http://​deva.web.elte.hu/​fordprog/​plang-2017-osz-tesztfajlok.zip|letölthetőek]]!
  
 <​code>​ <​code>​
-** A legkisebb valodi oszto meghatarozasa.+A legkisebb valodi oszto meghatarozasa. ​#
 PROGRAM oszto PROGRAM oszto
 VALTOZOK: VALTOZOK:
Line 44: Line 44:
   * 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
   * megjegyzések belsejében pedig tetszőleges karakterek állhatnak   * megjegyzések belsejében pedig tetszőleges karakterek állhatnak
  
-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.+Minden más karakter esetén hibajelzést kell adnia a fordítónak. A nyelv case-sensitive,​ azaz számít a kis és nagybetűk közötti különbség.
  
 === Kulcsszavak === === Kulcsszavak ===
  
-A nyelv kulcsszavai a következők:​ ''​program'',​ ''​begin'',​ ''​end'',​ ''​natural'',​ ''​boolean'',​ ''​true'',​ ''​false'',​ ''​div'',​ ''​mod'',​ ''​and'',​ ''​or'',​ ''​not'',​ ''​skip'',​ ''​if'',​ ''​then'',​ ''​else'',​ ''​endif'',​ ''​while'',​ ''​for'',​ ''​in'',​ ''​do'',​ ''​done'',​ ''​read'',​ ''​write''​+A nyelv kulcsszavai a következők:​ ''​PROGRAM'',​ ''​PROGRAM_VEGE'',​ ''​VALTOZOK:'',​ ''​UTASITASOK:'',​ ''​EGESZ'',​ ''​LOGIKAI'',​ ''​IGAZ'',​ ''​HAMIS'',​ ''​ES'',​ ''​VAGY'',​ ''​NEM'',​ ''​SKIP'',​ ''​HA'',​ ''​AKKOR'',​ ''​KULONBEN'',​ ''​HA_VEGE'',​ ''​CIKLUS'',​ ''​AMIG'',​ ''​CIKLUS_VEGE'',​ ''​KI:'',​ ''​BE:''​
  
 === Azonosítók === === Azonosítók ===
  
-A változók nevei betűkbőlszámjegyekből és ''​_''​ jelből állhatnak, de nem kezdődhetnek számjeggyel,​ és nem ütközhetnek egyik kulcsszóval sem.+A változók nevei, illetve a program neve kis- és nagybetűkből ​és számjegyekből állhatnak, de nem kezdődhetnek számjeggyel,​ és nem ütközhetnek egyik kulcsszóval sem.
  
 === Típusok === === Típusok ===
  
-  * ''​natural'':​ négy bájtos, előjel nélküli egészként kell megvalósítani;​ konstansai számjegyekből állnak és nincs előttük előjel +  * ''​EGESZ'':​ négy bájtos, előjel nélküli egészként kell megvalósítani;​ konstansai számjegyekből állnakés nincs előttük előjel 
-  * ''​boolean'':​ egy bájton kell ábrázolniértékei: ''​false'',​ ''​true''​+  * ''​LOGIKAI'':​ egy bájton kell ábrázolniértékei: ''​HAMIS'',​ ''​IGAZ''​
  
 === Megjegyzések === === Megjegyzések ===
  
-A ''#'' ​karaktertől kezdve ​sor végéig. Megjegyzések a program tetszőleges pontján előfordulhatnak, ​fordítást és a keletkező programkódot nem befolyásolják.+A ''#'' ​karakteretől a következő ''#''​ karakterig. Megjegyzések a program tetszőleges pontján előfordulhatnak, ​és akár több sorosak is lehetnek. 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 ===
  
-program szignatúrából,​ deklarációs részből, törzsből és befejezésből áll. A szignatúra tartalma: ​''​program'' ​//név//, ahol a //​név// ​tetszőleges azonosító. A szignatúrát ​deklarációs rész követimajd ''​begin'' ​kulcsszó ​vezeti be a törzset. A deklarációs rész lehet üres is. A törzs ​legalább egy utasítást tartalmaz. A befejezést ​az ''​end'' ​kulcsszó jelzi+A ''​PROGRAM'' ​kulcsszóval kezdődik (amit egy tetszőleges azonosító, a program neve követ) és a ''​PROGRAM_VEGE''​ kulcsszóval fejeződik be(Ezek előtt illetve után csak megjegyzések állhatnak.) ​változódeklarációk ​program elején találhatóakés a ''​VALTOZOK:'' ​szöveg ​vezeti be őket. A deklarációs rész opcionális,​ de ha a ''​VALTOZOK:''​ szöveg megjelenik, akkor legalább egy változót deklarálni kell. A deklarációk után a program utasításai következnek,​ ezt a részt ​az ''​UTASITASOK:'' ​szöveg vezeti be, és legalább egy utasítást tartalmaznia kell
  
 == Változódeklarációk == == Változódeklarációk ==
  
-Minden változót ​//típus név// '';''​ alakban ​kell deklarálni,​ több azonos típusú változó esetén ​mindegyiket külön-külön. ​+Minden változót ​a típusának és nevének megadásával ​kell deklarálni,​ több azonos típusú változó esetén ​mindegyikhez ​külön ​ki kell írni a típust
  
 == Kifejezések == == Kifejezések ==
  
-  * ''​natural''​ típusú kifejezések:​ számkonstansok, ​natural ​típusú változók és az ezekből a ''​+'' ​(összedás), ​''​-'' ​(kivonás), ​''​*'' ​(szorzás), ​''​div'' ​(egészosztás), ​''​mod'' ​(maradékképzés) infix operátorokkal és zárójelekkel felépített kifejezések. +  * ''​EGESZ''​ típusú kifejezések:​ számkonstansok, ​''​EGESZ'' ​típusú változók és az ezekből a + (összedás),​ - (kivonás), * (szorzás), ​(egészosztás), ​(maradékképzés) infix operátorokkal és zárójelekkel ​a szokásos módon ​felépített kifejezések.  
-  * ''​boolean''​ típusú kifejezések:​ ''​true''​ és ''​false'',​ ''​boolean''​ típusú változók, ​és két ''​natural''​ típusú kifejezésből az ''​='' ​(egyenlőség), ​''​<'' ​(kisebb), ​''​>'' ​(nagyobb) infix operátorral, valamint ​a boolean típusú kifejezésekből az ''​and''​ (konjunkció),​ ''​or''​ (diszjunkció), ​''​='' ​(egyenlőség) infix és a ''​not''​ (negáció) prefix operátorral és zárójelekkel felépített kifejezések.+  * ''​LOGIKAI''​ típusú kifejezések: ​az ''​IGAZ''​ és ''​HAMIS'' ​literálok, ''​LOGIKAI''​ típusú változók, két ''​EGESZ''​ típusú kifejezésből az = (egyenlőség),​ < (kisebb), > (nagyobb) infix operátorokkal előállított, valamint ​az ezekből ''​ES''​ (konjunkció),​ ''​VAGY''​ (diszjunkció),​ = (egyenlőség) infix és a ''​NEM''​ (negáció) prefix operátorral és zárójelekkel ​a szokásos módon ​felépített kifejezések.
   * Az infix operátorok mind balasszociatívak és a precedenciájuk növevő sorrendben a következő:​   * Az infix operátorok mind balasszociatívak és a precedenciájuk növevő sorrendben a következő:​
-    * ''​and''​ ''​or''​+    * ''​VAGY''​ 
 +    * ''​ES''​
     * ''​=''​     * ''​=''​
     * ''<''​ ''>''​     * ''<''​ ''>''​
     * ''​+''​ ''​-''​     * ''​+''​ ''​-''​
-    * ''​*''​ ''​div''​ ''​mod''​+    * ''​*''​ ''​/''​ ''​%'' ​
  
 == Utasítások == == Utasítások ==
    
-  * ''​skip''​ utasítás: a változók értékeinek megváltoztatása nélküli továbblépés.+  * ''​SKIP''​ utasítás: a változók értékeinek megváltoztatása nélküli továbblépés.
   * Értékadás:​ az '':​=''​ operátorral. Baloldalán egy változó, jobboldalán egy - a változóéval megegyező típusú - kifejezés állhat.   * Értékadás:​ az '':​=''​ operátorral. Baloldalán egy változó, jobboldalán egy - a változóéval megegyező típusú - kifejezés állhat.
-  * Olvasás: A ''​read(''​ //​változó//​ ''​);​''​ utasítás a megadott változóba olvas be egy megfelelő típusú értéket a konzolról. (Megvalósítása:​ meg kell hívni a ''​be_egesz'' ​(vagy a ''​be_logikai''​) ​eljárást, amit a 4. beadandó ​leírásához ​mellékelt C fájl tartalmaz. A beolvasott érték ​natural ​típus esetén az ''​eax'', ​logikai ​típus esetén az ''​al''​ regiszterben lesz.) +  * Olvasás: A ''​BE:''​ utasítás a megadott változóba olvas be egy megfelelő típusú értéket a standard bementeről. (Megvalósítása:​ meg kell hívni a ''​be''​ eljárást, amit a negyedik ​beadandó ​kiírásához ​mellékelt C fájl tartalmaz. A beolvasott érték ​''​EGESZ'' ​típus esetén az ''​eax'', ​''​LOGIKAI'' ​típus esetén az ''​al''​ regiszterben lesz.) 
-  * Írás: A ''​write(''​ //​kifejezés//​ ''​);​''​ 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 a ''​ki_logikai''​) eljárást, amit a 4. beadandó leírásá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.)  +  * Írás: A ''​KI:''​ utasítás a megadott kifejezés értékét a standard kimenetre ​írja (és egy sortöréssel fejezi be). (Megvalósítása:​ meg kell hívni a ''​ki_egesz''​ (vagy a ''​ki_logikai''​) eljárást, amit a 4. beadandó leírásá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.)  
-  * While ciklus: ''​while''​ //feltétel// ''​do''​ //utasítások//​ ''​done''​ A feltétel logikai kifejezés, a ciklusmag legalább egy utasítást tartalmaz. A megszokott módon, elöltesztelős ciklusként működik+  * Ciklus: ''​CIKLUS AMIG''​ //feltétel utasítások//​ ''​CIKLUS_VEGE'' ​alakú. ​A feltétel logikai kifejezés. A ciklus utasításlistája lehet üres is. A megszokott módon, elöltesztelős ciklusként működik.  
-  * For ciklus: ''​for''​ //​változó//​ ''​in''​ //​kifejezés//​ ''​..''​ //​kifejezés//​ ''​do''​ //​utasítások//​ ''​done''​ A változónak a deklarációs részben deklarált, natural típusú változónak kell lennie, az intervallum határait jelző kifejezések szintén natural típusúak. Az intervallum határai a ciklus első iterációja előtt kiértékelésre kerülnek, és az értékük akkor sem változik meg, ha a kifejezésekben szereplő változók módosulnak. A ciklus változója az első iteráció előtt megkapja az intervallum alsó határának értékét, minden iteráció végén eggyel nő, az utolsó iterációban a felső határral egyezik meg. Ha az alsó határ nagyobb a felsőnél, a ciklus egyszer sem fut le+  * Elágazás: ''​HA''​ //​feltétel//​ ''​AKKOR''​ //​utasítások//​ ''​HA_VEGE''​ vagy ''​HA''​ //​feltétel//​ ''​AKKOR''​ //​utasítások//​ ''​KULONBEN''​ //utasitasok// ''​HA_VEGE'' ​alakú. ​A feltétel logikai kifejezés. Az egyes ágak utasításlistája lehet üres ismegszokott módon működik.
-  * Elágazás: ''​if''​ //​feltétel//​ ''​then''​ //​utasítások//​ ''​endif''​ vagy ''​if''​ //​feltétel//​ ''​then''​ //​utasítások//​ ''​else''​ //utasítások// ''​endif''​ A feltétel logikai kifejezés, az ágak legalább egy utasítást tartalmaznakAz elágazások a megszokott módon működnek.+
fordprog/plang2017.1505921442.txt.gz · Last modified: 2017/09/20 17:30 (external edit)