来自lex程序的意外输出

时间:2013-05-05 07:52:16

标签: lex

我编写了一个简单的lex程序来执行正数的平均值,程序编译正常但是我无法获得预期的输出。我通过给出文件名将输入传递给程序一个命令行参数。句法程序的输出是空白的,显示没有结果,我是lex的初学者,任何帮助将不胜感激。我已附上以下代码。代码是用redhat linux kernel 2.4版编写的。

 %{
 #include <stdio.h>
 #include <stdlib.h>
 %}

%%
[0-9]+ return atoi(yytext);
%%

void main()
{
  int val, total = 0, n = 0;
  while ( (val = yylex()) > 0 ) {
  total += val;
  n++;
}
if (n > 0) printf(“ave = %d\n”, total/n);
} 

输入文件包含数字3,6和4,文件名作为命令行参数传递。

./a.out < input

1 个答案:

答案 0 :(得分:2)

您的计划适合我。我对yywrap缺失有点怀疑,所以你可能会链接-lfl(或类似的东西)选项。此库包含yywrapmain。即使我无法重现您所看到的内容,我也很谨慎,可能会使用来自main的{​​{1}}。我假设你在输出的输入文件中得到任何换行符。不同的链接器有不同的方法来解决同一符号的多次出现。

总而言之,我认为你必须以编译程序的方式来寻找问题,因为规范似乎没问题。如果您在libfl之后添加int yywrap(void) { return 1; },则可以不使用main,这是我建议libfllex的任何用户。