我正在尝试为一种迷你语言做一个词法分析器。其中一条规则涉及标识符不允许以数字开头的事实。下面是定义数字和标识符的正则表达式。
NUMBER [+-]?[0-9]+
ID [a-zA-Z][a-zA-Z0-9_]*以及.lxi文件中定义的规则:
%%
{DELIMITATOR} printf("Delimitator: %s\n",yytext);
{NUMBER} printf("Number: %s\n",yytext);
{ID} printf("Identifier: %s\n",yytext);
. printf("Error: %s\n",yytext);
%%当输入文件中存在不遵守命名标识符规则的标记时,就会出现问题。例如,For
a := 1abc 我得到了以下结果:
Number: 1;
Identifier: abc;相反,我希望收到一条错误消息。有什么我能做的吗?在定义数字时,我也尝试使用尾部上下文,但似乎不起作用。
发布于 2017-12-20 21:12:07
不用担心:您的问题中出现的错误将在语法级别(bison、yacc或类似)进行检测和处理/报告。
然而,如果您认为flex错误非常常见,您可以编写一个特定于1abc的规则来报告它。示例:
[0-9][a-zA-Z_]+ fprintf(stderr, "invalid identifier '%s'\n",yytext);
[a-zA-Z]{40,} fprintf(stderr, "identifier to long '%s'\n",yytext);https://stackoverflow.com/questions/47859758
复制相似问题