1

我有一个 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 */ }
     ;

在提到的地方,我想执行一个操作——在我的容器(a map)中插入解析的值。bison 生成的文件是.cpp,但实际上它是 C 否则。我可以轻松地包含所需的头文件。我也可以简单地调用非成员函数(如cout)。

我的问题是-如何在(容器类型的)对象中插入值?我可以在语法文件中创建一个对象,但是如何返回它呢?

其他方法是在 GUI 代码中创建一个对象(容器类型),然后将其传递给解析器。

请告诉任何方法如何实现。

4

2 回答 2

1

通过返回值优化,我很想按值返回地图。

于 2013-01-26T09:28:51.780 回答
0

解决办法是extern

我在我的 GUI(我在其中调用解析器)的.cpp文件中创建了(全局)对象,例如:

QStringList *icNameList;

然后在头文件中(包含在野牛文件中)

extern QStringList *icNameList;

最后在野牛文件中,我可以执行以下操作:

abc : xyz { icNameList->append(getTokenString()); }
    ;
于 2013-02-10T06:31:01.750 回答