我在flex中定义了一些正则表达式和规则。现在我想编写一个执行以下操作的正则表达式:如果有一个输入与我定义的任何规则都不匹配,我想简单地打印出该输入。您可能认为由于它与任何规则都不匹配,因此会自动打印出来,但事实并非如此。考虑一下我的例子,我定义了以下正则表达式:
[a-zA-Z_]+[a-zA-Z0-9_]* printf("%d tIDENT (%s)\n",lineNum,yytext);
此规则定义标识符,标识符可以以下划线或字母开头,它是字母,数字和下划线的组合。
[0-9]+ printf("%d tPOSINT (%s)\n",lineNum,yytext,yytext);
此规则识别正整数。
假设这些是我唯一的规则,输入为2a3
。这不是标识符,也不是整数。但我的输出以2
为整数,然后以a3
作为标识符。但2a3
与任何规则都不匹配,我想按原样打印出来。我怎样才能做到这一点?
答案 0 :(得分:1)
您可能认为由于它与任何规则都不匹配,因此会自动打印出来
不,我不这么认为。如果我没记错的话,如果输入与任何规则不匹配,它会输出错误,如'flex jammed'。但在这种情况下,输入确实符合您的规则,因此不会发生。如果不匹配,请相应地更改规则。但我会离开它。 2然后a3将不会是合法的语法,所以让解析器处理它。
要避免卡纸消息并打印出不匹配消息,您需要添加如下最终规则:
。 {printf(“%s”,yytext); }。 //或者你想要的任何东西
您还需要添加空格规则。