gpt4 book ai didi

parsing - 左关联运算符能否以自上而下的 LL(1) 解析器可以理解的方式表达?

转载 作者:行者123 更新时间:2023-12-04 18:45:00 26 4
gpt4 key购买 nike

我试图为计算器语言实现一个 LL(1) 自顶向下的解析器。它只允许我们对数字进行求和、减法、除法和乘法。没有括号。

S -> A

A -> B + A
| B - A
| B

B -> int * B
| int / B
| int

由于此语法不适合 LL(1) 解析器,因此我不得不对其进行大量更改:
S -> A

A -> B A'
A'-> + A
| - A
| λ

B -> int B'
B'-> * B
| / B
| λ

问题是现在语法对于显示的 4 个运算符没有保持关联,我需要它。如何解决这个问题呢?甚至有可能做到这一点吗?

最佳答案

您可以通过用迭代替换递归来获得左结合性。为了简单起见,下面的伪代码直接计算值,但您可以使用相同的方法生成解析树。

function A() {
val = B();
t = peek();
while (t=='+' || t=='-') {
match(t);
val1 = B();
if (t=='+')
val = val + val1;
else
val = val - val1;
t = peek();
}
return(val)
}

哪里 peek()不吃就返回下一个 token , match()吃下一个 token 。你会对 B() 做同样的事情。

关于parsing - 左关联运算符能否以自上而下的 LL(1) 解析器可以理解的方式表达?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16405558/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com