User Tools

Site Tools


fordprog:cpp2016

This is an old revision of the document!


A PCRE internal error occured. This might be caused by a faulty plugin

===== A beadandóhoz használandó programozási nyelv leírása (Abap, 2015 ősz) ===== 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 C++ erősen leegyszerű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. Tesztfájlok [[http://deva.web.elte.hu/fordprog/cpp2016-tesztfajlok.zip|letölthetőek]]! <code> // A legkisebb valodi oszto meghatarozasa. int main() { unsigned a; unsigned i; unsigned oszto; bool vanoszto; cin >> a; vanoszto = false; i = 2; while( !vanoszto && i < a ) { if( a % i == 0 ) { vanoszto = true; oszto = i; } i = i+1; } if( vanoszto ) { cout << vanoszto; cout << oszto; } else { cout << vanoszto; } } </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. A nyelv case-sensitive, azaz számít a kis és nagybetűk közötti különbség. === Kulcsszavak === A nyelv kulcsszavai a következők: ''int'', ''main'', ''unsigned'', ''bool'', ''true'', ''false'', ''if'', ''else'', ''while'', ''cout'', ''cin'' === Azonosítók === A változók nevei betűkből, számjegyekből és ''_'' jelből állhatnak, de nem kezdődhetnek számjeggyel, és nem ütközhetnek egyik kulcsszóval sem. === Típusok === * ''unsigned'': 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 * ''bool'': egy bájton kell ábrázolni; értékei: ''false'', ''true'' === Megjegyzések === A ''/''''/'' 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 áll. A szignatúra tartalma: ''int main()''. A szignatúrát a deklarációs rész követi, amely lehet üres is. A törzs legalább egy utasítást tartalmaz. == 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. == Kifejezések == * ''unsigned'' típusú kifejezések: számkonstansok, unsigned 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 felépített kifejezések. * ''bool'' típusú kifejezések: ''true'' és ''false'', ''bool'' típusú változók, és két ''unsigned'' típusú kifejezésből az ''=='' (egyenlőség), ''<'' (kisebb), ''>'' (nagyobb) infix operátorral, valamint az ezekből ''&&'' (konjunkció), ''||'' (diszjunkció), ''=='' (egyenlőség) infix és a ''!'' (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ő: * ''&&'' ''||'' * ''=='' * ''<'' ''>'' * ''+'' ''-'' * ''/'' ''%'' == Utasítások == * É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 ''cin >> 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 az ''eax'' (logikai típus esetén az ''al'') regiszterben lesz.) * Írás: A ''cout << 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.) * Ciklus: ''while ( feltétel ) { utasítások }'' 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. * Elágazás: ''if( feltétel ) { utasítások }'' vagy ''if( feltétel ) { utasítások } else { utasítások }'' A feltétel logikai kifejezés, az ágak legalább egy utasítást tartalmaznak. Az elágazások a megszokott módon működnek.

fordprog/cpp2016.1475211880.txt.gz · Last modified: 2016/09/30 07:04 by deva