操作以下语法为LL(1)

时间:2016-10-20 20:48:46

标签: parsing grammar ll

假设我得到了以下语法:

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)?或者是不可能的?

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>