Dragon-book の付録では、LL(1) フロント エンドが例として示されています。とても参考になると思います。ただし、以下の文脈自由文法では、代わりに少なくとも LL(2) パーサーが必要であることがわかりました。
statement : variable ':=' expression
| functionCall
functionCall : ID'(' (expression ( ',' expression )*)? ')'
;
variable : ID
| ID'.'variable
| ID '[' expression ']'
;
k 先読みトークンをサポートするように LL(1) パーサーのレクサーをどのように適応させることができますか? エレガントな方法はありますか?
トークン用のバッファーをいくつか追加できることはわかっています。プログラミングの詳細について説明したいと思います。
これはパーサーです:
class Parser
{
private Lexer lex;
private Token look;
public Parser(Lexer l)
{
lex = l;
move();
}
private void move()
{
look = lex.scan();
}
}
そして、Lexer.scan()
ストリームから次のトークンを返します。