Parsing 如何解决PEG中的左递归

Parsing 如何解决PEG中的左递归,parsing,formal-languages,peg,left-recursion,pegjs,Parsing,Formal Languages,Peg,Left Recursion,Pegjs,问题是(解析表达式语法)。 我已经阅读了有关此主题的可用答案,但问题具体(如)或非常简单(如x=symbol:(x')) 我创建了以下非常简单的语法来说明这个问题 EXAMPLE = x+ x = symbol:(x y* / x y z) y = symbol:('.' x) z = symbol:('$') 此语法可以使用进行测试 能不能请一位精通正式语言的人描述一下如何将这一规则/规则集改写为PEG?或者是否有一种通用的方法/算法可以解决左递归 Edit:我刚刚发现,它描述了一种删除

问题是(解析表达式语法)。 我已经阅读了有关此主题的可用答案,但问题具体(如)或非常简单(如
x=symbol:(x')

我创建了以下非常简单的语法来说明这个问题

EXAMPLE = x+

x = symbol:(x y* / x y z)

y = symbol:('.' x)
z = symbol:('$')
此语法可以使用进行测试

能不能请一位精通正式语言的人描述一下如何将这一规则/规则集改写为PEG?或者是否有一种通用的方法/算法可以解决左递归


Edit:我刚刚发现,它描述了一种删除左递归的方法,我将研究它并尝试将其应用于上面显示的语法。

PEG解析器本质上是LL(*),具有无限的前瞻性和有序的选择。语法必须为下一个符号提供一个或多个选项,以允许解析器进行选择

你的语法看起来有问题,但如果我读对了你的意图,它会有一组点和一美元在每一组的末尾。所以它是这样的:

x -> ('.'+ '$')+

有正式的重写算法,但大多数情况下,只要弄清楚“下一步会发生什么?”和“之后会发生什么?”以及“它如何重复?”就足够了。

x没有锚定。你能提供一个有效输入的例子吗?