2009-11-13 48 views
0

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

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 

回答

2

一般情况下,你永远不希望在调用 '输入' 直接在flex代码 - 这是flex用来获得更多输入的例程,所以如果你调用它,你会从输入中间抽取任意字符,并将flex混淆,以为它们不存在。做到这一点的最佳方法是定义多个规则,并依靠最长的匹配来获得正确的规则。

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

您可能还需要在这些规则yylval.ch = yytext[1];回到你匹配实际的字符值。