flex 和 bison:how 在我的解析器中添加语义操作?

flex and bison:how to add semantics action in my parser?

我正在尝试为我的语言制作一个小型编译器。 我已经使用 flex 和 bison 编写了词法分析器和解析器,但在解析器中我没有使用任何语义操作,因为我不知道如何使用它进行类型检查等。 我已经阅读了语义分析器,我只是想知道使用解析器执行语义分析需要遵循哪些步骤。 我是否需要创建 NODE、AST 等,如果是,请提出任何示例如何操作?

基本的 bison 解析器只给出一个布尔值答案 -- 是或否,输入是否与语法描述的语言匹配。如果你想做更多的事情(例如,以某种方式编译语言描述的程序),你需要添加语义动作。

bison 中的语义动作非常灵活——它们是任意的代码位,可以做任何你想做的事情。所以你需要决定你想在这些行动中做什么,以实现你的计划的任何目标。

野牛语义动作背后的总体思路是,当关联规则减少时,解析器将 运行 每个动作,因此您可以设置动作来响应被识别的规则减少。因此,您可以评估简化规则的 'meaning' 以产生一些效果,或者您可以以某种方便的形式生成 AST 片段以供以后处理。规则操作可以以自下而上的方式访问先前减少的规则操作的结果。你做什么取决于你想要什么。