我正在编写一个lex程序来标记C程序。我编写了以下规则来匹配C预处理程序指令
#.* {printf("\n%s is a PREPROCESSOR DIRECTIVE",yytext);}
但是当我使用文件作为yyin的输入时,文件中的预处理器指令与yytext匹配,显示为空
例如我得到
is a PREPROCESSOR DIRECTIVE
yyin是stdin时没有问题,但这仅在输入文件时出现。是否有其他LEX规则?
最佳答案
将重点放在它不能与文件而不是lex规范一起使用这一事实上,因为这更可能引起问题。 printf
文件中的lex
应始终至少打印#
。以下适用于文件:
%{
#include <stdio.h>
%}
%%
#.* { printf("'%s' preproc\n", yytext); }
%%
int yywrap(void)
{
return 1;
}
int main(int argc, char ** argv)
{
if (argc > 1)
{
if ((yyin = fopen(argv[1], "r")) == NULL)
{
fprintf(stderr, "Can't open `%s'.\n", argv[1]);
exit(1);
}
}
return (yylex());
}
关于c - C预处理器指令的Lex规则,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15571218/