【发布时间】:2014-07-13 15:07:19
【问题描述】:
我在文件 myscanner.l 中编写了一个简单的 lex 扫描器,其中 testlex.h 只是一堆 #defines 作为整数(MATCH_0 == 0 等)
%{
#include "testlex.h"
%}
%%
"dinky" return MATCH_0;
"pinky" return MATCH_1;
"stinky" return MATCH_2;
[ \t\n] ;
. printf("unexpected character\n");
%%
int yywrap(void)
{
return 1;
}
使用lex创建lex.yy.c文件后,我使用这个C文件实现代码
#include <stdio.h>
#include "myscanner.h"
extern int yylex();
extern int yylineno;
extern char* yytext;
int main(void)
{
int l = yylex();
while (l)
{
printf("%d\n", l);
l = yylex();
}
return 0;
}
当我将这个输入流传递给它时:dinky pinky stinky stinky pinky dinky,绝对没有输出。我期待的输出如下所示:
0
1
2
2
1
0
甚至不是“意外角色”。我知道我的堆栈设置正确,因为我已经编译了其他人的示例并且它们都正确扫描,但是由于某些不可思议的原因,我的代码_will_not_scan_!
我错过了什么?
【问题讨论】:
标签: c flex-lexer lex