gpt4 book ai didi

c - yacc/bison 操作的范围是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 06:43:14 25 4
gpt4 key购买 nike

我试图在 flex/bison 中编写一个(相对)简单的配置文件解析器。基本思想是我的 bison 语法使用一些 C 函数将解析的数据组织成一系列 C 结构。如果有人认为有必要回答这个问题,我很乐意发布我的代码,请发表评论。

我遇到的问题涉及 bison 操作中的过程范围。例如,如果我有这样的东西:

set
: NTOK name {
section *sec
init_s(sec, $2);
add_s(cf, sec);
}

sec 不应该在后面的语法规则中使用吗?当我稍后再次尝试将其作为参数调用时,我收到了 error: 'sec' undeclared。谁能赐教一下?

最佳答案

bison 中的操作生成的所有代码都在其自己的范围内(IIRC,生成的代码将其包装在大括号中以强制执行此操作)。如果你想让数据全局可用于其他操作,你需要在某处显式声明一个全局变量(可能在 flexbison 脚本的顶部?) ,然后写入该变量。这背后的基本原理是,如果操作中的每个变量都是隐式全局的,或者至少可以被其他操作读取,那么当您打算创建新数据时,很容易意外回收垃圾数据。

关于c - yacc/bison 操作的范围是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5097930/

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