我有一些由数字组成的数据,在用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
------------
------------
------------
答案 0 :(得分:0)
flex manual表示要使用yywrap
(强调):
扫描仪从
YY_INPUT
接收到文件结束指示时,然后检查yywrap()
功能。如果yywrap()
返回false(零),则假定该函数已经执行并设置yyin
指向另一个输入文件,然后继续扫描。如果返回true(非零),则扫描程序终止,并向其调用方返回0。请注意,无论哪种情况,启动条件均保持不变;它不会恢复为INITIAL
。
因此,如果您想rewind(yyin)
,则需要自己使用yywrap
函数。