Kihagyás

6. gyakorlat

The only and wonderful while by ELTE

while nyelv

  • ELTE szabadalmaztatott
  • programok program kulcsszóval kezdődnek
  • read, write
  • while do done
  • if then endif
  • begin end
  • :=, =

Példa

program test
    natural n
    natural divisor
    natural i
begin
    read(n)
    write(n)
end

Fordítás: make

A mai példa "tokenizálja" a kódot. Tehát felosztja tokenekre. pl

./while test.txt, ahol

text.txt:

then if b > 5
THE
IF
ID b
GR
NUM 5

A szintaktika egyértelműen nem helyes, de az itt még nem lényeges.

.: regex-ben ez illeszkedik bármilyen karakterre, kivéve a \n-re.

feladat 2

Helyezze át az azonosítók felismerésére szolgáló reguláris kifejezést az összes többi reguláris kifejezés elé! Hogyan változik meg az elemző működése? Miért?

Vonja vissza a módosítást!

A szavakat legelőször azonosítóként próbálja értelmezni, így a kulcsszavak is azonosítóként lesznek értelmezve

BTW

if ifthenwelsewhiledone < 5 then
IF
ID ifthenelsewhiledone
LS
NUM 5
THE

A regex a leghosszabb match-et használja, ezért nem lett az ifthenelsewhiledone-ből if.

feladat 3

Adja hozzá a .+ reguláris kifejezést az elemzőhöz valamilyen üzenet kiírásával együtt! Hogyan változik meg az elemző működése? Miért?

Vonja vissza a módosítást!

Ha az összes többi szabály után rakjuk, akkor minden sornál kiírja a megadott stringet, kivéve azoknál, amelyeknél maga a sor megegyezik egy már létező keyword-del.

A legtöbb dologra ez fog reagálni, mert van benne valami

feladat 4

Változtassa meg az azonosítók definícióját úgy, hogy csak nagybetűvel kezdődhessenek, több nagybetű ne szerepelhessen, és számokat ne követhessen betű! Készítsen tesztfájlt a megoldás ellenőrzéséhez!

Mentse el más néven, és térjen vissza az eredeti változathoz!

[A-Z][a-z]*[0-9]*

feladat 6

Adjon hozzá az elemzőhöz egy reguláris kifejezést, amely pontosan két tizedesjegyet és tetszőleges (de legalább egy) egész jegyet tartalmazó törtszámok felismerésére alkalmas!

Fontos-e, hogy ez a reguláris kifejezés hol helyezkedik el az egész számliterálok reguláris kifejezéséhez képest? Miért?

[0-9]+"."[0-9]{2}

vagy

[0-9]+"."[0-9][0-9]

Multiline comments

"/*"([^*]|"*"+[^/*])*"*"+"/"