Parsing 自顶向下递归分析器的语法无效

Parsing 自顶向下递归分析器的语法无效,parsing,recursive-descent,Parsing,Recursive Descent,我试图为一个简单的自上而下的递归解析器创建语法。据我所知,基本思想是编写一个函数列表(自上而下),对应于语法中的结果。每个函数都可以调用其他函数(递归) 列表规则包括任意数量的数字,但必须用逗号分隔 下面是我提出的一个语法示例: 列表::=NUM | LIST”,“NUM” 数字::=[0-9]+ 显然这是不正确的,所以我的问题是:为什么这个语法不能被一个简单的自上而下的递归下降解析器解析?有效解决方案的示例是什么?问题在于,对于LL(1)递归解析器,例如: 对于任何i和j(其中j≠ i) 没有

我试图为一个简单的自上而下的递归解析器创建语法。据我所知,基本思想是编写一个函数列表(自上而下),对应于语法中的结果。每个函数都可以调用其他函数(递归

列表规则包括任意数量的数字,但必须用逗号分隔

下面是我提出的一个语法示例:

列表::=NUM | LIST”,“NUM”

数字::=[0-9]+

显然这是不正确的,所以我的问题是:为什么这个语法不能被一个简单的自上而下的递归下降解析器解析?有效解决方案的示例是什么?

问题在于,对于LL(1)递归解析器,例如:

对于任何i和j(其中j≠ i) 没有可以同时启动Wi实例和Wj实例的符号

这是因为,否则解析器将在知道采取什么路径时出错

可通过以下方法获得正确的解决方案:

LIST ::=   NUM REST
REST ::=   "" | "," NUM
NUM  ::=   [0-9]+

为什么您认为这是错误的?编写与这些结果对应的函数,并查看它们的行为,可能会很有启发性。@mkrieger1-我的教授写道“您需要更改以下语法,以便由一个简单的自上而下的递归下降解析器来解析它”。我不明白这就是为什么我要问。