我有一个使用Bison / Flex的简单语言解析器,我想从命令行中读取两个单独的数字,如下所示:./compile <sample.txt 4 7
我让它读取main中的输入并将它们保存到数组中。据我所知,该部分工作正常,我遇到麻烦的是当我尝试保存输入(和输入的名称),我试图将它们放在未分类的地图中,但我只能弄清楚如何做一个输入,但后来无法进入其他输入。
我尝试将输入保存到向量中,然后删除顶部项目以保存到地图中,但编译器有向量的问题,因为它说它无法将向量转换为双向(我无法弄清楚为什么试图从矢量中删除double会返回一个向量)
这可能是因为我对Bison / Flex不太熟悉,而且我用C ++做了很多工作已经有好几年了,所以如果解决方案很明显我很抱歉。我一直在寻找约一天的答案,但找不到任何东西。如果你能帮助我,请告诉我。
我尝试了几种方法(列表,堆栈,数组),但到目前为止,唯一不会导致错误的方法是数组:参数:INDENTIFIER':'type {symbols.insert($ 1,params [0]);} ;但显然这只会给出一个输入(因为它只访问数组的第一部分)我该怎么做才能添加多个输入?这是函数insert()所在的符号类。它需要保存每个标识符并在地图中输入。感谢您的帮助。
好吧,我觉得很傻。我只是假设像list.pop_front();将返回存储在那里的值。我看了参考文献,发现我错了。所以我使用列表工作。我很遗憾浪费每个人的时间。我添加了这个来解决它:
list<double> params;
parameter:
IDENTIFIER ':' type { if(!params.empty) {
input = params.front();
params.pop_front();
}
symbols.insert($1, input); } ;
出于好奇,虽然如何使用动态数组来做这件事?
如初始化params为:
double *params;
parameter:
IDENTIFIER ':' type {symbols.insert($1, params[??]);} ;