Portál AbcLinuxu, 5. května 2025 15:33
Implementace syntaktického analyzátoru není příliš snadná záležitostImplementace parseru (v ruce) je při použití rekurzivního sestupu velmi snadná záležitost. IMHO neexistuje důvod, proč navrhovat programovací jazyky jinak než jako LL(1), takže rekurzivní sestup je úplně v klidu. Z důvodu, který mi není známý, bohužel někdo s oblibou navrhuje LR prasárny typu C, které navíc obsahují příšerné množství konfliktů...
Já myslel, že používámeyacc -d cselect.y lex cselect.l
bison
a flex
ANTLR ... program skutečně generuje LL(n)ANTLR používá predikátové LL(k) gramatiky, takže má dokonce větší vyjadřovací schopnosti než LALR. A to se vyplatí
Ještě snazší je implementace parseru např. v Haskellu za pomoci monadických parserů. Nebo pomocí generátoru parserů Happy, nicméně to první řešení je mnohem elegantnější.Implementace syntaktického analyzátoru není příliš snadná záležitostImplementace parseru (v ruce) je při použití rekurzivního sestupu velmi snadná záležitost.
Ještě snazší je implementace parseru např. v Haskellu za pomoci monadických parserů.To jsem neznal. A neznám. A věřím tomu, že při vysokoúrovňových funkcionálních orgiích mohou vzniknout nádherné parsery
A proč by se binárka bisona neměla jmenovat yacc? :)Já myslel, že používámeyacc -d cselect.y lex cselect.lbison
aflex
![]()
A proč by se binárka bisona neměla jmenovat yacc? :)Uff, jestli se binárka bisona jmenuje yacc, tak jsem silně konsternován. Ještě že to nepoužívám, musel bych si začít klást otázky, proč se binárka Linuxového kernelu nejmenuje minix
# cd /usr/bin # ln bison yacc # rm bisonKontrolní otázka, jakže se teď jmenuje binárka
bison
u lex
a yacc
jen linky na flex
a bison
(stejně jako třeba sh
na bash
a vi
na vim
). Pokud ji ale spouštíte jménem lex
resp. yacc
, neměl byste použít nic z rozšíření, která mají flex
resp. bison
navíc.
ANTLR používá predikátové LL(k) gramatiky, takže má dokonce větší vyjadřovací schopnosti než LALR. A to se vyplatíPredikátové, to slovo mě vypadlo. Díky za upozornění.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.