2009-11-13 3 views
0

char (즉 'a AND'a ')를 정의하고 싶지만 오류를 검사하는 데 문제가 있습니다. 여기에 내가 규칙을 작성하고 확인하는 방법 :flex, defined 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

을 일반적으로, 당신이 직접 '입력'전화를 걸 결코 당신의 플렉스 코드 - 이것은 일상적인 플렉스가 더 많은 입력을 얻기 위해 사용하기 때문에, 당신이 그것을 부르면 입력의 중간에서 임의의 문자를 가져와 플렉스가 존재하지 않는다고 혼동하게됩니다. 가장 좋은 방법은 여러 규칙을 정의하고 가장 긴 일치 항목을 사용하여 올바른 규칙을 얻는 것입니다.

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

당신은 또한 당신이 일치 한 실제 문자 값을 반환하는이 규칙에 yylval.ch = yytext[1];을 할 수 있습니다.

관련 문제