gpt4 book ai didi

grammar - Flex 和 Bison 的使用

转载 作者:行者123 更新时间:2023-12-02 12:09:18 25 4
gpt4 key购买 nike

我是 Flex 和 Bison 的新手,我尝试编写 Flex 词法扫描器,然后编写 Bison 语法,但遇到以下问题:

  • 一个单词有时可以与 Flex 定义中的不同定义相匹配,我希望 Bison 从它的语法中找到合适的 Flex 定义来选择。

例如,如果单词 abc 在 Flex 中可以被视为 category1category2,我希望 Bison 选择 category1 如果它在 Bison 语法中显示为 category1 时没有语法错误,但显示为category2 则不正确;但如果它在 category1 而非 category2 时显示为语法错误,则 Flex 应将其分类为 category2

有办法做到这一点吗?或者我完全误解了 Flex 和 Bison?

最佳答案

这种情况通常是由 C# 中所谓的“半保留”字或所谓的“上下文关键字”引起的。在 bison/flex 中,这些都是很难处理的。 (Lemon 有一个未记录的功能,您可以使用 %fallback 指令定义 token 的后备,这非常适合此用例;您只需将 IDENTIFIER 作为后备任何上下文保留的 token 。)

通过一些工作,您也许可以通过定义非终结符来实现相同的效果,例如:

identifier : IDENTIFIER | VAR | ADD | REMOVE | DYNAMIC | GLOBAL | ...
/* VAR is special in a local-variable-type: */
local_variable_type_identifier : IDENTIFIER | ADD | REMOVE | DYNAMIC | GLOBAL | ...

您可能可以通过在整个过程中使用identifier来找到需要自定义的位置,然后解决每个冲突,其中包括通过将其替换为受限制的非-来减少identifier排除参与冲突的半保留字的终端。

这不是很好,但这是我所知道的最好的方法。

关于grammar - Flex 和 Bison 的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14291319/

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