如果我想使用预测解析器,则以下语法不合适:
E -> T + E | T
据我所知,这个语法的问题是在多个制作中指定了非终端T
。因此,如果解析器向前看下一个标记T
,它就不知道要使用哪个生产,因为在几个作品中提到了T
。
所以语法必须重构为
E -> T X
X -> +E | e
现在,如果我查看EcmaScript grammar大多数非终端符号都有多个具有相同非终端的产品。例如,PropertyDefinition
符号在两个作品中重复:
PropertyDefinitionList[Yield, Await]:
PropertyDefinition[?Yield, ?Await]
PropertyDefinitionList[?Yield, ?Await], PropertyDefinition[?Yield, ?Await]
所以我的理解是正确的,EcmaScript语法不是留下因素的,如果我想使用预测的自上而下的解析器,它必须重构?