Flex:无法识别的规则错误

我在Flex中遇到了“无法识别的规则”错误。 我阅读过一些文章,但没有找到解决我的问题的方法。 我试图在我的代码中进行一些更改,但似乎没有任何改变(有时这些更改使得它更糟糕)。 我在下面发布我的代码,希望找到一个解决方案。

我的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: %sn", yytext);}
{VAR_NAME} | ","{VAR_NAME} {printf("A variable name: %sn", yytext);}
":"                        {printf("A colonn");}
{VAR_TYPE}";""n"          {printf("The variable type is: %sn", yytext);}
"n"{VAR_DEFINER}          {printf("Error: The keyword 'var' is defined once at the beginning.n");}
[ tn]+                   /* eat up whitespace */
.                          {printf("Unrecognized character: %sn", yytext);}
%%
main(argc, argv)
int argc;
char** argv;
{
++argv, --argc;
if (argc > 0) 
yyin = fopen(argv[0],"r");
else 
yyin = stdin;
yylex();
}

正如你在你自己对问题的回答中所写的那样,你可以通过谨慎使用空格来修复错误。

但是,根本问题是,您正在尝试让扫描程序执行解析器更好的工作。 如果你想分析像var x boolean这样的东西,那么它不应该是由扫描器发现的单个标记。 通常最好的方法是让扫描器发现三个单独的标记( varxboolean ),然后让解析器将它们分组为一个变量声明。


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

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

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

我希望能有所帮助!

链接地址: http://www.djcxy.com/p/57875.html

上一篇: Flex: Unrecognized rule error

下一篇: Flex gives error for every character in file