testovaci data pro du3

Uživatelský avatar
JJ
Matfyz(ák|ačka) level II
Příspěvky: 99
Registrován: 28. 1. 2005 14:03
Typ studia: Informatika Mgr.

Příspěvek od JJ »

rastik píše:a - premenna typu pole, teda mozem pisat a[1], a[1,2], ...
a[1] - premenna typu pole, teda mozem pisat a[1][2], a[1][2,3], ...
Keby tam bolo identifikator_premennej[...], tak je mozne pisat iba a[1,2]. Sucasny diagram IMHO tvrdi, ze sa to moze vnorit.
no jo, mas pravdu :D kdyz na to koukam ted tak nevim proc jsem tam napsal identifikator, doufam ze mi z toho nenaskoci konflikty
jipi
Matfyz(ák|ačka) level I
Příspěvky: 15
Registrován: 27. 10. 2004 22:41

Příspěvek od jipi »

Ja souhlasim s rastikem.
Podle diagramu se podle me da napsat:
a[1][1]
navic by to dobre korespondovalo s
var a array[m..n] of array[m..n] of real;
coz jde podle diagramu take napsat.
Uživatelský avatar
MyS
Donátor
Donátor
Příspěvky: 178
Registrován: 22. 9. 2004 00:13
Typ studia: Informatika Bc.
Bydliště: The city of Dobříš
Kontaktovat uživatele:

Příspěvek od MyS »

Co se tyce tech "expecting" hlasek, zalezi na tom, jak jsou zapsana pravidla.
Napr.:

Kód: Vybrat vše

mlaskal: lab DUTOK_BEGIN
lab:	DUTOK_LABEL uint_rep DUTOK_SEMICOLON
	| /*nic*/
	;
da pri vstupu "11 begin" jen unexpected UINT
Napr.:

Kód: Vybrat vše

mlaskal: DUTOK_LABEL uint_rep UTOK_SEMICOLON DUTOK_BEGIN
	|	DUTOK_BEGIN
        ;
zatimco tento da unexpected UINT, expected LABEL or BEGIN ... i kdyz je vyznam obou kodu IMHO ekvivalentni.
Vsem se to zasekne na stejnem unexpected, jen ty expected casti se lisi ... napr. v err1.mls si myslim by melo byt cele "Error (line 3): Encountered syntax error, unexpected DUTOK_UINT, expecting DUTOK_BEGIN or DUTOK_PROCEDURE or DUTOK_FUNCTION or DUTOK_VAR or DUTOK_TYPE or DUTOK_CONST." Ale to je proste neskutecnej hardcore, kdyby se to takhle melo programovat. Doufam, ze na tom nezalezi.
Jinak co se tyce tech poli, souhlasim s rastikem.
We don't need no education!
Uživatelský avatar
rastik
Supermatfyz(ák|ačka)
Příspěvky: 661
Registrován: 19. 10. 2005 21:45
Typ studia: Informatika Mgr.
Bydliště: Praha
Kontaktovat uživatele:

Příspěvek od rastik »

JJ píše:du3-test prosel v pohode, me prave zarazilo, ze pokud uz ti vypisuje ze tam muze byt function a procedure tak by ti mel asi taky napsat ze tam muze byt var, type a const
To praveze nie. Bison postupne prechadza jednotlive stavy a vzdy sa snazi co najviac to ide. Preto syntakticka analyza pre napr. err1.mls bude nasledujuca (cisla su rozne stavy):
1. V uvodnom stave ocakava PROGRAM, pokial ho najde urobi shift a prejde na dalsi stav.
2. Ocakava IDENTIFIER, urobi shift a ide dalej.
3. Ocakava SEMICOLON, urobi shift a ide dalej.
4. Ocakava LABEL alebo nic (a za tym nic idu dalsie mozne terminaly). Pokial ma LABEL urobi shift a pojde na jeden stav (nas pripad). V opacnom pripade by normalne urobil reduce celeho neterminalu s LABEL (teda pouzil to pravidlo s "nic") a isiel na iny stav.
5. Ocakava UINT, urobi shift a ide dalej.
6. Ocakava SEMICOLON alebo COMMA, v oboch pripadoch urobi shift a pojde na prislusny stav, v nasom pripade podla SEMICOLON.
7. Teraz ma hotovy LABEL a predpokladam, ze mas pravidla napisane tak, ze sa urobi reduce. Dostavame sa teda naspat na spracovanie programoveho bloku, teda podobne ako v stave 4, ale uz bude ocakavat CONST alebo nic. To co vidi LR(1) je UINT a teda v snahe vyhoviet sa zariadi podla "nic" (a normalne teda reduce podla tohoto pravidla) a ide dalej.
8. Podobne ako v predch. stave, ale teraz caka TYPE alebo nic. Zariadi sa podla "nic".
9. VAR alebo nic, ide podla "nic".
10. A teraz to zaujimave. Podla obrazku c. 1 si teraz musi vybrat "zahlavie procedury", "zahlavie funkcie" alebo BEGIN. Nic ine sa uz neda. Ked sa ale pozries na obr. 3, jedno zacina PROCEDURE, druhe FUNCTION. Chudak si teda musi vybrat medzi PROCEDURE, FUNCTION alebo BEGIN, to mu ale na vstupne UINT nesedi, nech sa snazi ako chce. Chybu teda vypise prave v stavoch, ked ocakava nieco konkretne a nema inu moznost. Pokial by teda vypisal, ze ocakava aj CONST, TYPE alebo VAR tak to znamena, ze sa sa nechova podla toho diagramu.

Podla toho ako napises pravidla tam v skutocnosti mozu byt (a budu) este dalsie reduce kroky, pre pochopenie postupu to ale nie je dolezite. Podstatne je len to, ze pri reduce sa vybera zo zasobnika, takze sa fakticky vracias.

Trochu som sa rozpisal, ale hadam je to teraz jasne. Dalo sa to popisat aj cisto pomocou toho diagramu, popisat shift/reduce implementaciu sa mi zdalo lepsie.

PS. V skutocnosti je to vsetko este zapuzdrene v jednom neterminali - mlaskal, tak nam to zadali. Fakticky teda po precitani koncovej bodky urobi z celeho programoveho bloku na zasobniku reduce na neterminal mlaskal, na ten potom shift a este jeden shift na $end, vdaka ktoremu vstupny subor akceptuje.

Doplnenie proti zmatkom: Tento popis predpoklada, ze jednotlive nepovinne casti su napisane cez samostatne pravidla obsahujuce aj "nic". Pokial bude pouzity iny postup, bude vysledok analyzy vyzerat inak.
Naposledy upravil(a) rastik dne 24. 11. 2006 18:23, celkem upraveno 1 x.
Uživatelský avatar
rastik
Supermatfyz(ák|ačka)
Příspěvky: 661
Registrován: 19. 10. 2005 21:45
Typ studia: Informatika Mgr.
Bydliště: Praha
Kontaktovat uživatele:

Příspěvek od rastik »

Tuetschek píše:A ten err3 -- podle mne je tam fakt 7 radku ... nebo mozna 8, kdyz pocitas posledni prazdny radek? Je teda fakt ze tohle je asi chyba lex. analyzy?
Ano, to je lex. analyza. A prazdny riadok je tiez riadok, teda koniec suboru je na riadku 9.
Uživatelský avatar
rastik
Supermatfyz(ák|ačka)
Příspěvky: 661
Registrován: 19. 10. 2005 21:45
Typ studia: Informatika Mgr.
Bydliště: Praha
Kontaktovat uživatele:

Příspěvek od rastik »

MyS píše:Co se tyce tech "expecting" hlasek, zalezi na tom, jak jsou zapsana pravidla.
Hm, to mas pravdu. Pokial sa to napr. cele zapise do jedneho, tak podla toho mojho popisu fungovania to bude vypisovat expecting aj na VAR a dalsie. Takze vsetky varianty vypisu chyby su OK.
Btw. Pozeral som do kodu a pokial by mal vypisat viac nez 4 terminaly v expecting zozname, tak nevypise nic - to bude dovod, preco to vobec nevypisuje Tuetschekovi.
Uživatelský avatar
MyS
Donátor
Donátor
Příspěvky: 178
Registrován: 22. 9. 2004 00:13
Typ studia: Informatika Bc.
Bydliště: The city of Dobříš
Kontaktovat uživatele:

Příspěvek od MyS »

To praveze nie. Bison postupne prechadza jednotlive stavy a vzdy sa snazi co najviac to ide.
No, tohle podle me prave zalezi na tom, jak jsou napsany ty pravidla. IMHO, z ciste logickeho pohledu, by mel bud vypsat zcela vse (od const dale) a nebo jen prvni POVINNY prvek, tj. jen begin. nepochopil jsem, v cem je v diagramu procedure/function odlisne od treba type.
Ano, to je lex. analyza.
Me to tedy vypisuje 7, ale myslim si, ze cislo radku by melo byt opravdu 9. Jen absolutne netusim, jak tohle provadis, protoze posledni token, ktery bison dostane je s radkem 7...jak se pak teda o $endu s radkem 9 dozvi?
Pozeral som do kodu a pokial by mal vypisat viac nez 4 terminaly v expecting zozname, tak nevypise nic
Nooo, ale v tom mym extra zkracenym prvnim prikladku opravdu vypise jen "unexpected uint" a zadny expected nevypise, a to ac jsou jen dve moznosti...
We don't need no education!
Uživatelský avatar
rastik
Supermatfyz(ák|ačka)
Příspěvky: 661
Registrován: 19. 10. 2005 21:45
Typ studia: Informatika Mgr.
Bydliště: Praha
Kontaktovat uživatele:

Příspěvek od rastik »

MyS píše:
To praveze nie. Bison postupne prechadza jednotlive stavy a vzdy sa snazi co najviac to ide.
No, tohle podle me prave zalezi na tom, jak jsou napsany ty pravidla. IMHO, z ciste logickeho pohledu, by mel bud vypsat zcela vse (od const dale) a nebo jen prvni POVINNY prvek, tj. jen begin. nepochopil jsem, v cem je v diagramu procedure/function odlisne od treba type.
Sorry, uz som opravil svoj prispevok, zavisi to naozaj od sposobu pisania pravidiel.
MyS píše:
Ano, to je lex. analyza.
Me to tedy vypisuje 7, ale myslim si, ze cislo radku by melo byt opravdu 9. Jen absolutne netusim, jak tohle provadis, protoze posledni token, ktery bison dostane je s radkem 7...jak se pak teda o $endu s radkem 9 dozvi?
Flex posiela EOF, musis spravne celu dobu udrzovat hodnotu parametru l (druhy parameter funkcie yylex).
MyS píše:
Pozeral som do kodu a pokial by mal vypisat viac nez 4 terminaly v expecting zozname, tak nevypise nic
Nooo, ale v tom mym extra zkracenym prvnim prikladku opravdu vypise jen "unexpected uint" a zadny expected nevypise, a to ac jsou jen dve moznosti...
Mozno sa ti dalej rozvinu aj ine. Ked mas vsetko skompilovane, otvor si du3g.cpp, najdi define YYERROR_VERBOSE_ARGS_MAXIMUM, zmen ho na vacsiu hodnotu (napr. 20), prekompiluj iba co treba (nesmies pustit bisona) a skus.[/quote]
Uživatelský avatar
lavor
Matfyz(ák|ačka) level III
Příspěvky: 121
Registrován: 1. 2. 2005 20:39
Typ studia: Informatika Bc.
Bydliště: kolej 17.11., A1105
Kontaktovat uživatele:

Příspěvek od lavor »

a[1][1]
no tak na toto by sa oplatilo spytat niekoho kompetentneho, ja som to tiez pochopil ako identifikator, mozno aj preto ze ked bednarek na cviku vysvetloval konflikty tak napisal ze premenna moze byt identifkator premennej, alebo identifikator pola ...
a mam k tomu aj napisane ze ten identifikator pola je vlastne DUTOK_IDENTIFIER, preto som to aj takto implementoval, ale kedze boss je Yaghob, tak by som za to ruku do ohna nedal... :twisted:
Milujeme tých, čo nás odmietajú, odmietame tých, čo nás milujú.
Uživatelský avatar
MyS
Donátor
Donátor
Příspěvky: 178
Registrován: 22. 9. 2004 00:13
Typ studia: Informatika Bc.
Bydliště: The city of Dobříš
Kontaktovat uživatele:

Příspěvek od MyS »

rastik:
hmm, s tim flexem dik, uz mi to pise line 9;). S tim rozvijenim to funguje, ale i kdyz dam maximalni (napr. 500), tak to pro funkcne ekvivalentni kod pise jine hlasky:

Kód: Vybrat vše

mlaskal: lab DUTOK_BEGIN
lab:   DUTOK_LABEL uint_rep DUTOK_SEMICOLON
   | /*nic*/
   ; 
...ocekava jen BEGIN

Kód: Vybrat vše

mlaskal: DUTOK_LABEL uint_rep UTOK_SEMICOLON DUTOK_BEGIN
   |   DUTOK_BEGIN
        ; 
...ocekava LABEL nebo BEGIN.
Takze to opravdu zavisi na tvaru pravidel. Ale ja to prepisovat nehodlam, aby to pokazdy vypisovalo vsechny mozne nasledujici slova. To mi za vikend hrani/srani se nestoji;).
We don't need no education!
gASK
Admin(ka) level I
Příspěvky: 635
Registrován: 9. 6. 2005 12:33
Typ studia: Informatika Mgr.
Bydliště: Konečně Vinohrady:)
Kontaktovat uživatele:

Příspěvek od gASK »

Zdravím.
Všechno mi perfektně šlape, testíky probíhaj bez problémů - až na jeden:

Při vůstupu u některých souborů mi to vrací věci jako:

Kód: Vybrat vše

O>Everything is OK
EEEEverything is OK
<><><>Everything is OK
apod.

Nemám nejmenší ponětí, kde může být zakopán pes - má někdo nějaké rady, nápady či doporučení? Budu vděčen :wink:
When life gives you crap, make crap golems.
Uživatelský avatar
Tuetschek
Supermatfyz(ák|ačka)
Příspěvky: 657
Registrován: 15. 6. 2005 13:54
Typ studia: Nestuduji ale učím na MFF
Kontaktovat uživatele:

Příspěvek od Tuetschek »

Hm tak jsem ted zjistil ze VIM 7.0 Win32 pridava na konec souboru jedno CR LF navic ... a ja furt kde se bere tech 9 radku :(. Stejne furt poradne nevim jak to cislo radku pro EOF dostavat spravne ...

Taky jsem si prohlizel tu svoji vygenerovanou gramatiku (docela sranda hrat si na Bisona a prejizdet ty stavy -- pro err1 to jeste jde :) )... skutecne v tom stavu kde to nic nepise to ocekava vic nez 4 veci. Myslim ale ze tohle snad chyba neni.

To array of array mi taky napadlo ze to vlastne muze byt takhle ale stejne mi prijde ze to tak mysleno nebylo -- to by fakt chtelo se zeptat. Pamatuje nekdo jestli to slo v Pascalu?
Naposledy upravil(a) Tuetschek dne 26. 11. 2006 14:00, celkem upraveno 1 x.
Plug 'n' Pray.
Uživatelský avatar
Tuetschek
Supermatfyz(ák|ačka)
Příspěvky: 657
Registrován: 15. 6. 2005 13:54
Typ studia: Nestuduji ale učím na MFF
Kontaktovat uživatele:

Příspěvek od Tuetschek »

gASK píše: Při vůstupu u některých souborů mi to vrací věci jako:

Kód: Vybrat vše

O>Everything is OK
EEEEverything is OK
<><><>Everything is OK
Me to prijde jako nejaky pozustatek debugging vystupu -- nevolas nekde v du3l.lex nejaky cout, cerr, printf apod. ? I kdyz tohle te hadam uz taky napadlo ...

Jeste me napadla ta zmena rozhrani a predavani parametru do lexove funkce pres pointery -- jestli se ti tam nejak nerozhazuje pamet (dela to na Debug to samy co Release?) ... ale to uz je asi fakt sci-fi.
Plug 'n' Pray.
gASK
Admin(ka) level I
Příspěvky: 635
Registrován: 9. 6. 2005 12:33
Typ studia: Informatika Mgr.
Bydliště: Konečně Vinohrady:)
Kontaktovat uživatele:

Příspěvek od gASK »

Tuetschek píše:Me to prijde jako nejaky pozustatek debugging vystupu -- nevolas nekde v du3l.lex nejaky cout, cerr, printf apod. ? I kdyz tohle te hadam uz taky napadlo ...

Jeste me napadla ta zmena rozhrani a predavani parametru do lexove funkce pres pointery -- jestli se ti tam nejak nerozhazuje pamet (dela to na Debug to samy co Release?) ... ale to uz je asi fakt sci-fi.
To mě taky napadlo - jediný znaky, co jsem tam zažil jsou E, F, 0, < a >. Povedlo se mi "izolovat" řádky co je způsobujou - není v nich ŽÁDNÁ zákonitost. Grrrr....

Lex sám o sobě jsem změnil a ozkoušel nezávisle - tam chyba není (resp. alespoň ne na úrovni lexového kódu).

EDIT: Tak už jsem našel zákonitost - vybere si tyto znaky ze stringu či komentáře a pošle je na výstup - jen tyhle a žádný jiný. A vážně nevím proč, v celým du3l.lex nemám JEDINÝ výstup (nepočítaje errory).
Tuetschek píše:To array of array mi taky napadlo ze to vlastne muze byt takhle ale stejne mi prijde ze to tak mysleno nebylo -- to by fakt chtelo se zeptat. Pamatuje nekdo jestli to slo v Pascalu?
Dle obrázku to tak má být. Vyhrabal jsem z pohřebiště Turbo Pascal a zkusil to. Výsledek? Zde:
Obrázek
When life gives you crap, make crap golems.
Uživatelský avatar
Tuetschek
Supermatfyz(ák|ačka)
Příspěvky: 657
Registrován: 15. 6. 2005 13:54
Typ studia: Nestuduji ale učím na MFF
Kontaktovat uživatele:

Příspěvek od Tuetschek »

gASK píše: EDIT: Tak už jsem našel zákonitost - vybere si tyto znaky ze stringu či komentáře a pošle je na výstup - jen tyhle a žádný jiný. A vážně nevím proč, v celým du3l.lex nemám JEDINÝ výstup (nepočítaje errory).
Hm to je fakt divny ... zkousels jinou verzi Flexu/projektu/operacniho systemu? Jinak asi zbyva procitat ten chrchel co vyplivne Flex :( ...
gASK píše: Dle obrázku to tak má být. Vyhrabal jsem z pohřebiště Turbo Pascal a zkusil to.
OK OK tak uz nic nerikam a jdu si to prepsat ;).
Plug 'n' Pray.
Odpovědět

Zpět na „2006“