0

我想定义 char(即 'a AND 'a'),但在检查错误时遇到问题。这里我如何编写规则并检查:

char         " ' " {letter}

代码

{char}    {
          int x =input() ;
          //printf("%d",'a');

                if(x == 10)
                {
                    return(tCharunterm);
                }
                else if(x == '\'')
                {
                    return(tChar);
                }
                else
                {
                    yyerror("char overflow");
                }

最后检查一下:

'a
token = tCharunterm, value = "(null)"
'a'  
token = tChar, value = "(null)"
'as
char overflow
'asddd
char overflow
token = tIdentifier, value = "ddd"
^Z
4

1 回答 1

2

一般来说,你永远不想在你的 flex 代码中直接调用“input”——这是 flex 用来获取更多输入的例程,所以如果你调用它,你会从输入中间拉入随机字符并混淆 flex认为它们不存在。最好的方法是定义多个规则并依靠最长的匹配来获得正确的匹配。

"'"{letter}"'"  { return(tChar); }
"'"{letter}"\n" { return(tCharunterm); }
"'"{letter}     { yyerror("char overflow"); return(rCharunterm); }

您可能还希望yylval.ch = yytext[1];在这些规则中返回您匹配的实际字符值。

于 2009-11-14T23:52:36.707 回答