假设我得到了以下语法:
start -> statement //cannot change
statement -> assignment SEMICOLON
statement -> function_call SEMICOLON
assignment -> IDENTIFIER EQUAL expression
function_call -> IDENTIFIER LPAREN parameters RPAREN SEMICOLON
现在的语法不能是LL(1),因为语句的非终端(赋值和function_call)都有IDENTIFIER作为它们每个产生的第一个终端。只有通过使用2个预测才能确定解析器将采用哪条路径。
有没有办法将上面的语法操作为LL(1)?或者是不可能的?
答案 0 :(得分:0)
上面的语法对于任何k都不是真正的LL(k),但是我们可以为同一种语言构建LL(1)语法:
<init-param>
<param-name>enablePooling</param-name>
<param-value>false</param-value>
</init-param>
当然,在问题描述中,我们没有看到表达式和参数的定义,所以我们假设我们也可以为它们构建LL(1)规则(在我们看到规则之前不能保证)。 / p>