Myšlenka
Aby jsme mohli určit, že gramatika je typu LL(1), je nutné, aby jsme
byli schopni:
- Ověřit, zda parser postavený na dané gramatice akceptuje prázdný
řetězec -- obsahuje -přechod.
- Získat množinu FIRST obsahující terminály, které jsou připraveny
přijmout jednotlivé možnosti v alternativní kompozicích.
- Určit množiny FOLLOW obsahující pro každý neterminál symboly,
jenž za ním mohou v derivaci následovat.
Na základě těchto informací pak můžeme rozhodnout, zda lze rozklad provést
deterministicky.
K ověření výše uvedených vlastností gramatiky použijeme
módy parserů, kde veškerá analýza bude prováděna za běhu.
Určení daného atributu bude realizováno spuštěním parseru
ve speciálním režimu, v němž bude schopen dané informace získat.
Nejdříve vytvoříme mód pro ověření schopnosti přijímat prázdný řetězec,
pak pro výpočet množiny FIRST a konečně v části
ukážeme, jak získat postačující část množiny FOLLOW.
Vzhledem k použití módů musíme rozšířit pouze definice základních primitiv
a konstruktorů. U složitějších parserů vyšších úrovní získáváme
odpovídající chování v daném módu zdarma.
dvorka
2013-12-31