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
这样的东西,那么它不应该是由扫描器发现的单个标记。 通常最好的方法是让扫描器发现三个单独的标记( var
, x
和boolean
),然后让解析器将它们分组为一个变量声明。
我自己找到了答案。 我想发布它以帮助任何可能有类似问题的人,以防万一。
我的错在于,我在表达式或声明部分中的变量类型之间留下了无引号的空格。 例如,我写了VAR_TYPE“real”| “布尔”| “整数”| “char”,而不是VAR_TYPE“real”|“boolean”|“integer”|“char”(不含空格)。
所以,请注意各种括号和空格!
我希望能有所帮助!
链接地址: http://www.djcxy.com/p/57875.html