gpt4 book ai didi

parsing - Yacc中是否定义了减少的顺序?

转载 作者:行者123 更新时间:2023-12-04 15:24:59 26 4
gpt4 key购买 nike

这与其说是一个实际问题,不如说是一个“原则上”的问题。 Yacc 减少产生式并从定义的词法分析器读取新标记的顺序。也就是说,如果我有以下一组 token :

INTEGER_BEGIN
INTEGER_VALUE
LESS_THAN
INTEGER_BEGIN
INTEGER_VALUE

Yacc 是否可以在其语义范围内阅读 LESS_THAN词法分析器中的标记,在它减少之前 INTEGER BEGIN INTEGER_VALUE给一个单一的东西,给定一组产品,如:
expr : expr LESS_THAN expr
| integer

integer : INTEGER_BEGIN INTEGER_VALUE

如果这些规则是用语义 Action 定义的,那么这个规则会改变吗?

最佳答案

是的,它可以。 Yacc 创建了一个 LALR(1) 解析器——(1) 意味着 1 个前瞻标记——所以它可以在减少规则之前提前读取超过规则标记末尾的 1 个标记。语义 Action 的存在是无关紧要的,因为语义 Action 只是在减少规则之前运行的一些 C 代码。

请注意,不能保证它总是提前读取 token 。由 yacc 或 bison 创建的解析器有时使用“默认缩减”——说明它可以缩减规则而不必先读取下一个标记。每当规则的减少独立于下一个标记时,就会发生这种情况。

在此特定示例中,可以对 integer 使用默认减少规则,所以它可能会在没有前瞻的情况下减少它,但同样不能保证——默认减少是 yacc 的一些(但不是全部)实现使用的优化。

关于parsing - Yacc中是否定义了减少的顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12331080/

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