lex使用lex.yy.c文件中的flex -gettin输出

时间:2011-11-06 19:43:48

标签: compiler-construction compiler-errors lex lexical-analysis

我写了一个lex程序(.l文件)来计算行数和字符数 方案:

%{
  int charcount=0,linecount=0;
%}
%%
.charcount++
\n linecount++,charcount++;
%%
main()
{
yylex();
printf(“lines  %d”,linecount);
printf(“characters %d”,charcount);
}
int yywrap()
{
return 1;
}

我使用flex bison和codeblocks 写完程序后 我用命令flex lccc.l执行它(lccc是文件名) 现在我有lex.yy.c文件 请告诉我如何获得输出 编译lex.yy.c是igivng和错误..但这个程序在linux上工作正常,在我的大学,在家里我使用上面提到的Windows上的调整..请帮助!

这是错误:

 J:\> gcc lex.yy.c
 lccc.l:  In function 'main':
 lccc.l:13: error:  stray'\223' in program
 lccc.l:13: error:  'lines' undeclared (first use in this function )
 lccc.l:13: error:  (Each undeclared identifier is reported only once
 lccc.l:13: error:  for each function it appears in. )
 lccc.l:13: error:  stray'\224' in program
 lccc.l:13: error:  'd' undeclared (first use in this function )
 lccc.l:14: error:  stray'\223' in program
 lccc.l:14: error:  'characters' undeclared (first use in this function )
 lccc.l:14: error:  stray'\224' in program

1 个答案:

答案 0 :(得分:0)

您需要将自定义代码括在大括号中。并且在charcount++ 之后没有分号,您无法用逗号分隔语句,因此linecount++, charcount++;应为linecount++; charcount++;

试试这个:

%{
  int charcount=0, linecount=0;
%}
%%
.  {charcount++;}
\n {linecount++; charcount++;}
%%
main()
{
  yylex();
  printf("lines  %d", linecount);
  printf("characters %d", charcount);
}
// ...