The Definitive ANTLR Reference に次のような節があった.
以下は LL(*).
decl : modifier* 'int' ID '=' INT ';' | modifier* 'int' ID ';' modifier : 'static' | 'register' ;
以下は LL(*) でない.
decl : 'int' declarator '=' INT ';' | 'int' declarator ';' declarator : ID | '*' declarator ;
理由として書いてあるのは,選択肢(右辺)が再帰的な規則への参照を持っているから,ということである.この理由は,プッシュダウンオートマトンではなく DFA を利用して選択肢を決定していることから帰結されるとも書いてある.
よく考えてみなくてはならない.
ちなみに上のどちらも LALR(1) で問題なく受理される.
0 件のコメント:
コメントを投稿