2. uloha mlaskal

Úvodní kurz překladačů se soustřeďuje zejména na teoretické i praktické základy konstrukce přední části překladače. Součástí předmětu je i cvičení zaměřující se na základy práce s nástroji pro konstrukci překladačů. Po absolvování tohoto kurzu bude posluchač schopen sestrojit vlastní překladač do mezikódu nebo jiného jazyka.
blabla
Matfyz(ák|ačka) level II
Příspěvky: 70
Registrován: 27. 1. 2010 23:14
Typ studia: Informatika Mgr.

2. uloha mlaskal

Příspěvek od blabla »

zdravim,
vedeli by ste mi niekto presne napisat co vsetko sa v druhej ulohe povazuje za malformovany int a co za malformovany real? pocul som totiz uz viacero verzii a ziadne dve rovnake tak ak by to niekto vedel pekne prehladne napisat podla toho co sa dozvedel na cviku tak budem vdacny.
ondr4
Matfyz(ák|ačka) level I
Příspěvky: 9
Registrován: 31. 5. 2009 11:17
Typ studia: Informatika Bc.

Re: 2. uloha mlaskal

Příspěvek od ondr4 »

Ahoj,
podle toho co jsem pochopil na cviceni je malformace (nepocitam overflow) u intu neco jako

Kód: Vybrat vše

[0-9]+[a-zA-Z][0-9a-zA-Z]*
Jen je potreba dat si pozor a nesplest si jej se SPRAVNE zapsanym realem (treba 1e10).
Pod malformovanym realem je neco jako

Kód: Vybrat vše

[0-9]+[.][0-9]*[a-zA-Z][a-zA-Z0-9]*
EDIT: tohle pravidlo ale je i pro korektni real a proto je treba dat na nejakou predchazejici radku flex souboru pravidlo jej odchytavajici
Jestli me pamet neklame, cvicici tvrdil, ze

Kód: Vybrat vše

[0-9]+[e][a-zA-Z][a-zA-Z0-9]*
[0-9]+[e][0-9][a-zA-Z0-9]+
mame brat jako vadne inty a nepokouset se to rekonstruovat jako real. Behem psani tohoto textu me napadla jeste jedna silenost a nejak nevim, jak bych to resil, nejspis pres malformovany real.

Kód: Vybrat vše

[0-9]+[e][+-][0-9][a-zA-Z0-9]+
Taky bych uvital nazor nekoho dalsiho :-)
Naposledy upravil(a) ondr4 dne 12. 11. 2010 00:34, celkem upraveno 1 x.
Uživatelský avatar
mifeet
Matfyz(ák|ačka) level I
Příspěvky: 14
Registrován: 27. 1. 2010 14:37
Typ studia: Informatika Ph.D.

Re: 2. uloha mlaskal

Příspěvek od mifeet »

Ahoj,
já jsem to pochopil tak, že malformovaný uint je uint následovaný identifikátorem (bez mezery).

Malformovaný real by potom měl být buď real následovaný identifikátorem (bez mezery), nebo nesprávně ukončený real, volitelně následovaný identifikátorem. IMHO jsou dvě možnosti, jak real nesprávně ukončit - "12." nebo "12e". Zápis "12e+abc" bych jako real neřešil, spíš jako malformovaný uint, '+', identifikátor.

Na cvičení jsme si jako příklady malformovaných realů explicitně uváděli "1.2a8", "1. " (s mezerou na konci), "1e". Příklady malformovaných uintů byly "1234567890123a8", "1a". A speciálně upozorňoval na to, že "1..2" se musí interpretovat jako uint, "..", uint - tj. zde "1." není malformovaný real.
blabla
Matfyz(ák|ačka) level II
Příspěvky: 70
Registrován: 27. 1. 2010 23:14
Typ studia: Informatika Mgr.

Re: 2. uloha mlaskal

Příspěvek od blabla »

toto je podla mna zle, pozri sa napriklad na 1.1e10, vyhovuje to regexpu a pritom je to vhodny real, ty tvrdis ze je malformovany...
ondr4 píše: ...Pod malformovanym realem je neco jako

Kód: Vybrat vše

[0-9]+[.][0-9]*[a-zA-Z][a-zA-Z0-9]*
aa toto by som urcite riesil cez malformovany real, kedze je to vhodne zapisany real a za neho je prilepeny identifikator... napriklad 11e+2ABCDE
ondr4 píše: ... Behem psani tohoto textu me napadla jeste jedna silenost a nejak nevim, jak bych to resil, nejspis pres malformovany real.

Kód: Vybrat vše

[0-9]+[e][+-][0-9][a-zA-Z0-9]+
Taky bych uvital nazor nekoho dalsiho :-)
teraz k tomu co napisal mifeet, ked som sa prehrabal forom z minulych rokov tak som natrafil dvakrat na nieco co som mal aj ja v poznamkach ale velmi som tomu nerozumel... a to ze za malformovany real sa povazuje aj take nieco, ze ak v diagrame pre real skoncime v stave z ktoreho nevedie priamo cesta na vzstup.. tj aj 11. napriklad a za tym moze byt znova nalepeny identifikator.. cim viac o tom citam tym som len viac zmateny, ak si je niekto isty ze vie co a ako tak ho upenlivo ziadam nech to sem napise :)
ondr4
Matfyz(ák|ačka) level I
Příspěvky: 9
Registrován: 31. 5. 2009 11:17
Typ studia: Informatika Bc.

Re: 2. uloha mlaskal

Příspěvek od ondr4 »

Jo, vidis, mam to blbe. Chtel jsem tim vystihnout to, co popisuje mifeet, a neuvedl jsem, ze predchozim pravidlem je treba odchytit korektni real. Myslel jsem [0-9]+[.][0-9]*[a-df-zA-DF-Z][a-zA-Z0-9]* ale stejne to neodchyti vsechny problemy, ktere muzou nastat. Ve svem reseni jsem proste vyuzival techniku matchovani flexu. Nejdriv jsem napsal popis korektniho uint, real a pak podstatne obecnejsi ale podobna pravidla na odchyt malformaci.
Odpovědět

Zpět na „SWI098 Principy překladačů“