我有一个GUI程序,它使用bison来解析文件(包含IC的引脚连接列表)。 输入文件类似于>
3 = NAND2(1, 2)
6 = NAND2(4, 5)
8 = NAND2(9, 10)
11 = NAND2(12, 13)
而且(简化)语法就像 - >
start : spec { cout << "Parse Complete!"; }
;
spec : '{' expr_list '}'
;
expr_list : expr_list expr | expr
;
expr : INT '=' FUNC '(' args ')' { /*WANT TO INSERT ACTION HERE */ }
;
在提到的地方,我想执行一个操作 - 在我的容器中插入已解析的值(map
)。 bison生成的文件是.cpp
,但实际上它是C。我可以轻松地包含所需的头文件。我也可以简单地调用非成员函数(如cout
)。
我的问题是 - 如何在对象(容器类型)中插入值?我可以在语法文件中创建一个对象,但是我该如何返回呢?
其他方法是在GUI代码中创建一个(容器类型的)对象,然后将其传递给解析器。
请告诉我们如何实现任何方法。
答案 0 :(得分:1)
使用返回值优化,我只是想按值返回一个地图。
答案 1 :(得分:0)
解决方案是extern
。
我在GUI的 .cpp 文件中创建了(全局)对象(我调用解析器),如:
QStringList *icNameList;
然后在头文件中(由bison文件包含)
extern QStringList *icNameList;
最后在野牛文件中,我可以做类似的事情:
abc : xyz { icNameList->append(getTokenString()); }
;