3

我正在编写一个 lex 程序来标记C程序。我编写了以下规则来匹配C预处理器指令

 #.*                             {printf("\n%s is a PREPROCESSOR DIRECTIVE",yytext);}

但是当我使用文件作为 yyin 的输入时,文件中的预处理器指令与 yytext 匹配,显示为空

例如我得到

is a PREPROCESSOR DIRECTIVE

yyin标准输入时没有问题,但这仅在输入文件时出现。有替代的 LEX 规则吗?

4

1 回答 1

1

专注于它不适用于文件而不是 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());
}
于 2013-03-22T13:27:45.063 回答