2009-11-13 45 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];回到你匹配實際的字符值。