首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flex不能识别命名标识符中的错误

问Flex不能识别命名标识符中的错误
EN

Stack Overflow用户
提问于 2017-12-18 05:42:47
回答 1查看 106关注 0票数 2

我正在尝试为一种迷你语言做一个词法分析器。其中一条规则涉及标识符不允许以数字开头的事实。下面是定义数字和标识符的正则表达式。

代码语言:javascript
复制
NUMBER  [+-]?[0-9]+
ID  [a-zA-Z][a-zA-Z0-9_]*

以及.lxi文件中定义的规则:

代码语言:javascript
复制
%%
{DELIMITATOR}   printf("Delimitator: %s\n",yytext);
{NUMBER}    printf("Number: %s\n",yytext);
{ID}   printf("Identifier: %s\n",yytext); 
.   printf("Error: %s\n",yytext);
%%

当输入文件中存在不遵守命名标识符规则的标记时,就会出现问题。例如,For

代码语言:javascript
复制
a := 1abc 

我得到了以下结果:

代码语言:javascript
复制
Number: 1;
Identifier: abc;

相反,我希望收到一条错误消息。有什么我能做的吗?在定义数字时,我也尝试使用尾部上下文,但似乎不起作用。

EN

回答 1

Stack Overflow用户

发布于 2017-12-20 21:12:07

不用担心:您的问题中出现的错误将在语法级别(bison、yacc或类似)进行检测和处理/报告。

然而,如果您认为flex错误非常常见,您可以编写一个特定于1abc的规则来报告它。示例:

代码语言:javascript
复制
[0-9][a-zA-Z_]+   fprintf(stderr, "invalid identifier '%s'\n",yytext);
[a-zA-Z]{40,}     fprintf(stderr, "identifier to long '%s'\n",yytext);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47859758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档