在龙书的附录中,给出了一个 LL(1) 前端作为例子。我认为这很有帮助。但是,我发现对于下面的上下文无关语法,至少需要一个 LL(2) 解析器。
statement : variable ':=' expression
| functionCall
functionCall : ID'(' (expression ( ',' expression )*)? ')'
;
variable : ID
| ID'.'variable
| ID '[' expression ']'
;
我如何调整 LL(1) 解析器的词法分析器以支持 k 前瞻标记?有一些优雅的方法吗?
我知道我可以为令牌添加一些缓冲区。我想讨论一些编程的细节。
这是解析器:
class Parser
{
private Lexer lex;
private Token look;
public Parser(Lexer l)
{
lex = l;
move();
}
private void move()
{
look = lex.scan();
}
}
并Lexer.scan()
从流中返回下一个令牌。