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

一般に、フレックスコードで「input」を直接呼び出すことは決してありません。これは、フレックスがより多くの入力を取得するために使用するルーチンであるため、呼び出すと、入力の途中からランダムな文字が取り込まれ、フレックスが混乱します。それらが存在しないと考えるようになります。これを行う最善の方法は、複数のルールを定義し、最も長い一致に基づいて適切なルールを取得することです。

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

yylval.ch = yytext[1];これらのルールで、一致した実際の文字値を返すこともできます。

于 2009-11-14T23:52:36.707 に答える