我正在尝试为一个小型语言制作一个词法分析器。其中一条规则是指不允许标识符以数字开头。 以下是定义数字和标识符的正则表达式。
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);
%%
在输入文件中出现问题时,有些令牌不符合命名标识符的规则。例如,
a := 1abc
我得到以下结果:
Number: 1;
Identifier: abc;
相反,我想收到一条错误消息。有什么我可以做的吗?我还尝试在定义数字时使用尾随上下文,但它似乎不起作用。
答案 0 :(得分:0)
不要担心:您的问题中出现的错误将在句法层面(野牛,yacc或类似)中被检测和处理/报告。
然而,如果你认为1abc
错误很常见,你可以
编写特定于flex的规则来报告它。例如:
[0-9][a-zA-Z_]+ fprintf(stderr, "invalid identifier '%s'\n",yytext);
[a-zA-Z]{40,} fprintf(stderr, "identifier to long '%s'\n",yytext);