野牛:yywrap()再次解析同一文件一次?

时间:2019-06-21 07:41:43

标签: parsing bison flex-lexer

我有一些由数字组成的数据,在用Bison进行词法分析后,我想用Flex进行解析。为此,我需要知道所有数字的最小值和最大值-如果我作弊并明确定义了这些数字,则可以做到这一点。

我知道我必须首先自动找到所有行的最大值,然后才能运行解析器功能。

我以为我会使用yywrap(),但它不会重新开始。

这是我的yywrap():它先返回0,然后再返回1,但似乎没有返回到两者之间的起点。它保留在最后,我的测试printf在那里并排出现。-

int wrap;
int yywrap()
{
if (wrap == 0) {wrap++;return 0;}
else {return 1;}
}

当前
输入

--
G0
G0
G0
e0
--
--
--
--
F0
F0
F0
D0
--
--
--

输出:

------------
67----------
67----------
67----------
--------63--
------------
------------
------------
------------
----65------
----65------
----65------
----------62
------------
------------
------------

1 个答案:

答案 0 :(得分:0)

flex manual表示要使用yywrap(强调):

  

扫描仪从YY_INPUT接收到文件结束指示时,然后检查yywrap()功能。如果yywrap()返回false(零),则假定该函数已经执行并设置yyin指向另一个输入文件,然后继续扫描。如果返回true(非零),则扫描程序终止,并向其调用方返回0。请注意,无论哪种情况,启动条件均保持不变;它不会恢复为INITIAL

因此,如果您想rewind(yyin),则需要自己使用yywrap函数。