“警告,规则无法匹配”在lex中定义字符串

时间:2019-03-04 20:37:06

标签: lex

我试图创建一个规则来创建一个字符串并打印它。 所以这是代码:

 %{
char buff[200];
char *s;
}%
%X STRLIT
%%
\"                  {BEGIN STRLIT; s = buf;}
<STRLIT><<EOF>>     {printf("unterminated string literal\n");
                     BEGIN 0;}
<STRLIT>\\          {*s++ = '\\';}
<STRLIT>\f          {*s++ = '\f';}
<STRLIT>\n          ;
<STRLIT>\r          ;
<STRLIT>\t          {*s++ = '\t';}
<STRLIT>.           {*s++ = *yytext;}
<STRLIT>\"          {*s = 0;printf("STRING(%s)\n",buf);BEGIN 0;}

错误在最后一行,但我不知道为什么。

1 个答案:

答案 0 :(得分:1)

当可以在当前输入上匹配多个规则并产生相同大小的匹配项时,<--created two buttons--> <a onlick="mortagecalculator" data-attr="mortage">Use Now</a> <a onlick="mortagecalculator" data-attr="penalty">Use Now</a>将采用首先定义的规则。

因此,例如,如果有一个flex,则规则\t\t都可以匹配,但是.首先出现,因此被使用。但是,如果出现\t,则使用",因为.在其flex文件中。因此,不可能使用\"中的\"规则,这就是错误所在。

要解决此问题,只需将STRLIT移至最后一条规则即可。这样,只有在其他任何规则都不匹配的情况下,它才会匹配。