用于字母数字的flex RE也打印#$ @

时间:2014-02-17 18:32:40

标签: c regex visual-studio-2008 flex-lexer

我试图制作一个词法分析器(在VS2008上使用flex和bison),他们只选择字母数字(john4323snow)和数字(1234)。问题是在字母数字和数字结尾处它还会放置#$%@等字符。我不明白为什么。谢谢你的时间!

%{
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int k;
%}

%option noyywrap

%%
0|[1-9]* {
        k = atoi(yytext);
        printf("Found the Number %d", k); 
        }
 [a-zA-Z][a-zA-Z0-9]* {printf("Found the Identifier %s", yytext); }
%%
void main(int argc, char *argv[])
{
    char infile[20];
    strcpy(infile, argv[1]);
    yyin = fopen(infile, "r");
    if(yyin == NULL)
    {
        printf("open failed\n");
    }
    else
    {
        yylex();
    }
    system("pause");
}

1 个答案:

答案 0 :(得分:1)

不属于任何图案的字符串,字符串将打印到标准输出。

所以改变如下

%%
0|[1-9]* {
        k = atoi(yytext);
        printf("Found the Number %d", k); 
        }
 [a-zA-Z][a-zA-Z0-9]* {printf("Found the Identifier %s\n", yytext); }
. ;
"\n" ;
%%