no jo, mas pravdu kdyz na to koukam ted tak nevim proc jsem tam napsal identifikator, doufam ze mi z toho nenaskoci konfliktyrastik 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.
testovaci data pro du3
- JJ
- Matfyz(ák|ačka) level II
- Příspěvky: 99
- Registrován: 28. 1. 2005 14:03
- Typ studia: Informatika Mgr.
- MyS
- 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:
Co se tyce tech "expecting" hlasek, zalezi na tom, jak jsou zapsana pravidla.
Napr.:
da pri vstupu "11 begin" jen unexpected UINT
Napr.:
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.
Napr.:
Kód: Vybrat vše
mlaskal: lab DUTOK_BEGIN
lab: DUTOK_LABEL uint_rep DUTOK_SEMICOLON
| /*nic*/
;
Napr.:
Kód: Vybrat vše
mlaskal: DUTOK_LABEL uint_rep UTOK_SEMICOLON DUTOK_BEGIN
| DUTOK_BEGIN
;
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!
- rastik
- Supermatfyz(ák|ačka)
- Příspěvky: 661
- Registrován: 19. 10. 2005 21:45
- Typ studia: Informatika Mgr.
- Login do SIS: wartr3am
- Bydliště: Praha
- Kontaktovat uživatele:
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):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
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.
- rastik
- Supermatfyz(ák|ačka)
- Příspěvky: 661
- Registrován: 19. 10. 2005 21:45
- Typ studia: Informatika Mgr.
- Login do SIS: wartr3am
- Bydliště: Praha
- Kontaktovat uživatele:
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.MyS píše:Co se tyce tech "expecting" hlasek, zalezi na tom, jak jsou zapsana pravidla.
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.
- MyS
- 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:
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.To praveze nie. Bison postupne prechadza jednotlive stavy a vzdy sa snazi co najviac to ide.
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?Ano, to je lex. analyza.
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...Pozeral som do kodu a pokial by mal vypisat viac nez 4 terminaly v expecting zozname, tak nevypise nic
We don't need no education!
- rastik
- Supermatfyz(ák|ačka)
- Příspěvky: 661
- Registrován: 19. 10. 2005 21:45
- Typ studia: Informatika Mgr.
- Login do SIS: wartr3am
- Bydliště: Praha
- Kontaktovat uživatele:
Sorry, uz som opravil svoj prispevok, zavisi to naozaj od sposobu pisania pravidiel.MyS píše: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.To praveze nie. Bison postupne prechadza jednotlive stavy a vzdy sa snazi co najviac to ide.
Flex posiela EOF, musis spravne celu dobu udrzovat hodnotu parametru l (druhy parameter funkcie yylex).MyS píše: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?Ano, to je lex. analyza.
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]MyS píše: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...Pozeral som do kodu a pokial by mal vypisat viac nez 4 terminaly v expecting zozname, tak nevypise nic
- lavor
- Matfyz(ák|ačka) level III
- Příspěvky: 121
- Registrován: 1. 2. 2005 20:39
- Typ studia: Informatika Bc.
- Login do SIS: moskj4am
- Bydliště: kolej 17.11., A1105
- Kontaktovat uživatele:
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[1][1]
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...
Milujeme tých, čo nás odmietajú, odmietame tých, čo nás milujú.
- MyS
- 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:
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:...ocekava jen 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;).
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*/
;
Kód: Vybrat vše
mlaskal: DUTOK_LABEL uint_rep UTOK_SEMICOLON DUTOK_BEGIN
| DUTOK_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!
-
- Admin(ka) level I
- Příspěvky: 635
- Registrován: 9. 6. 2005 12:33
- Typ studia: Informatika Mgr.
- Login do SIS: BUREJ3BM
- Bydliště: Konečně Vinohrady:)
- Kontaktovat uživatele:
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:
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
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
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
When life gives you crap, make crap golems.
- Tuetschek
- Supermatfyz(ák|ačka)
- Příspěvky: 657
- Registrován: 15. 6. 2005 13:54
- Typ studia: Nestuduji ale učím na MFF
- Login do SIS: duseo7af
- Kontaktovat uživatele:
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?
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.
- Tuetschek
- Supermatfyz(ák|ačka)
- Příspěvky: 657
- Registrován: 15. 6. 2005 13:54
- Typ studia: Nestuduji ale učím na MFF
- Login do SIS: duseo7af
- Kontaktovat uživatele:
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 ...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
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.
-
- Admin(ka) level I
- Příspěvky: 635
- Registrován: 9. 6. 2005 12:33
- Typ studia: Informatika Mgr.
- Login do SIS: BUREJ3BM
- Bydliště: Konečně Vinohrady:)
- Kontaktovat uživatele:
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....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.
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).
Dle obrázku to tak má být. Vyhrabal jsem z pohřebiště Turbo Pascal a zkusil to. Výsledek? Zde: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?
When life gives you crap, make crap golems.
- Tuetschek
- Supermatfyz(ák|ačka)
- Příspěvky: 657
- Registrován: 15. 6. 2005 13:54
- Typ studia: Nestuduji ale učím na MFF
- Login do SIS: duseo7af
- Kontaktovat uživatele:
Hm to je fakt divny ... zkousels jinou verzi Flexu/projektu/operacniho systemu? Jinak asi zbyva procitat ten chrchel co vyplivne Flex ...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).
OK OK tak uz nic nerikam a jdu si to prepsat .gASK píše: Dle obrázku to tak má být. Vyhrabal jsem z pohřebiště Turbo Pascal a zkusil to.
Plug 'n' Pray.