繁体   English   中英

用于C预处理程序指令的Lex规则

[英]Lex rule for C preprocessor directive

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

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

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

我得到了

is a PREPROCESSOR DIRECTIVE

yyinstdin时没有问题,但只有在输入文件时才会出现这种情况。 是否有替代LEX规则?

关注它不能与文件而不是lex规范一起使用的事实,因为这更有可能导致问题。 lex文件中的printf应始终至少打印# 以下内容适用于文件:

%{
#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());
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM