Flex:无法识别的规则错误

时间:2015-12-18 08:32:14

标签: flex-lexer lex

我提出了一个未被承认的规则" Flex中的错误。我读过一些文章,但我没有找到解决问题的方法。我试图在我的代码中进行一些更改,但似乎没有任何东西可以使它工作(有时这些更改使它更糟糕)。我在下面发布我的代码,希望能找到解决方案。

我的弹力代码:

%{
#include <stdio.h>
%}
VAR_DEFINER "var"
VAR_NAME [a-zA-Z][a-zA-Z0-9_]*
VAR_TYPE "real" | "boolean" | "integer" | "char"
%%
{VAR_DEFINER}              {printf("A keyword: %s\n", yytext);}
{VAR_NAME} | ","{VAR_NAME} {printf("A variable name: %s\n", yytext);}
":"                        {printf("A colon\n");}
{VAR_TYPE}";""\n"          {printf("The variable type is: %s\n", yytext);}
"\n"{VAR_DEFINER}          {printf("Error: The keyword 'var' is defined once at the beginning.\n");}
[ \t\n]+                   /* eat up whitespace */
.                          {printf("Unrecognized character: %s\n", yytext);}
%%
main(argc, argv)
int argc;
char** argv;
{
++argv, --argc;
if (argc > 0) 
yyin = fopen(argv[0],"r");
else 
yyin = stdin;
yylex();
}

1 个答案:

答案 0 :(得分:0)

我自己找到了答案。我想发布它以帮助其他可能遇到类似问题的人,以防万一。

我的错是我在表达式或声明部分的变量类型中留下了不带引号的空格。例如,我写了VAR_TYPE“real”| “布尔”| “整数”| “char”,而不是VAR_TYPE“real”|“boolean”|“integer”|“char”(没有空格)。

所以,请注意各种括号和空格!

我希望有所帮助!