gpt4 book ai didi

compiler-construction - LR(1) 文法和运算符优先文法有什么区别?

转载 作者:行者123 更新时间:2023-12-04 08:39:59 25 4
gpt4 key购买 nike

我正在学习“Engineering a Compiler, 2nd Edition”。我知道什么是LR(1)文法,但我在这本书中找不到运算符优先文法。

然后我从图书馆借了《编译器——原理、技术和工具》,但还是找不到。

所以我想知道,LR(1)文法和运算符优先文法有什么区别。

如果LR(1)文法可以替代运算符优先文法,谢谢!

最佳答案

运算 rune 法是一种上下文无关文法,其中任何右侧都没有连续的非终结符。 (直觉上,每个产生式都有一个运算符,就像在数学表达式的语法中一样。)

运算符优先语法是一种运算符语法,其中解析自动机可以仅根据最接近解析堆栈顶部的终端与先行标记之间的优先关系来决定是移位还是归约。这种优先关系不需要是完备的,也不需要传递的,也不需要反对称的。

我很确定每个运算符优先语法都是 LR(1),但反过来肯定不是这样。例如,LR(1) 文法没有对连续非终结符的限制,并且 LR(1) 文法中的移位/归约决策很可能与解析堆栈中的最上面的终结符不相关和前瞻标记。尽管如此,一些有用的语言可以用运算符优先文法来表达。

与 LR 解析一样,运算符优先级解析是一种自下而上的技术。它可能比 LALR 算法更容易理解,但它没有其他明显的优势:它不是更快;它不太可靠(从某种意义上说,某些实现会识别错误的句子);而且更难验证。然而,在发现 LALR 算法之前,LR(1) 自动机的大小(以及有限的可用计算资源)使得运算符优先解析似乎是一种合理的方法。

如今,使用众多可用的解析器生成器之一会更好。

关于compiler-construction - LR(1) 文法和运算符优先文法有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27098179/

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