regex - 如何在flex中匹配一串流浪字符(不匹配其他正则表达式)?

标签 regex error-handling flex-lexer

我正在尝试使用flex制作一个简单的词法分析器,该工具可以读取整数,并且如果发现不构成整数的任何字符,则应打印不匹配字符的字符串。
如果模式匹配,这些是我与C代码一起使用的模式。

{INT}({DEL}|{ENTER}) { return INT;}   
{ENTER}              { printf("#End of line\n");}
{DEL}               
<<EOF>>              { printf("#End of file#\n"); exit(0);}
.                    { printf("Unrecognized characters: %s\n",yytext);
                      fprintf(yyout, "Unrecognized characters: %s\n",yytext);}
我的问题是,当我使用.时,词法分析器一次匹配一个字符。但是,如果我使用.+,则词法分析器会将所有内容与整数匹配,并将所有内容视为错误。
如果我应该显示更多代码,请告诉我。我将举一个示例,说明我从词法分析器获得的输出以及想要的输出。
输入文件示例:

23 55

12asd

@213


使用.时的示例输出文件:

token=INT, value="23"

token=INT, value="55

Unrecognized characters: 1

Unrecognized characters: 2

Unrecognized characters: a

Unrecognized characters: s

Unrecognized characters: d

Unrecognized characters: @

token=INT, value="213"


使用.+时的示例输出文件:

Unrecognized characters: 23 55

Unrecognized characters: 12asd

Unrecognized characters: @213


所需的输出:

token=INT, value="23"

token=INT, value="55

Unrecognized characters: 12asd

Unrecognized characters: @213

最佳答案

我终于找到了问题的答案。

问题在于.包含空格和制表符。因此,当使用.+时,它将吃掉所有内容以及制表符和空格,并将每一行都视为错误。可能是因为。+提供了更长的匹配时间。

[^ \t\n]+({DEL}|{ENTER})



此正则表达式将读取除空格以外的所有内容,直到读取空格为止。但是,如果[^ \t\n]+的内容为INT,则它将不是要匹配的正则表达式。 INT将被匹配,因为它具有更高的优先级。

关于regex - 如何在flex中匹配一串流浪字符(不匹配其他正则表达式)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34210776/

相关文章:

compiler-errors - IPv4和IPv6地址的lex模式

java - 括号中字母或数字的正则表达式

java - 读取 CSV 文件并写入另一个 CSV - ArrayIndexOutOfBoundsException 和模式困难

regex - POSIX ERE 正则表达式查找重复子字符串

javascript - 通过 Axios/Express 返回错误值到 React App

parsing - jison语法定义导致token识别错误

Java正则表达式,捕获格式错误的html

python - sklearn Predict_proba 返回无穷大概率

c++ - 简单的附加代码,带有严重的错误处理

error-handling - Flex错误处理问题