1

ですから、私はフレックス/バイソンに非常に慣れていませんが、単純な整数計算機を認識するためにこのパーサーを作成する必要があり、フレックスとバイソンが互いに通信するのに苦労していました。

Flexは、本来あるべきすべてのトークン値を返しますが、実際にセマンティック値を返すようにすることはできません。これは私のフレックスファイルです:

            %option noyywrap
            %{
                #include "test_Calc_Answer.tab.h"
                #include <malloc.h>
                #include <process.h>
                #define fileno _fileno
            %}
            NUM    [0-9]
            %%
            "{"[\^{}}]*"}"

            [ \t]+

            [\n]        {
                            return (int)'\n';
                        }

            "+"         {
                            return (int)'+';
                        }

            "-"         {
                            return (int)'-';
                        }

            "*"         {
                            return (int)'*';
                        }

            "/"         {
                            return (int)'/';
                        }

            {NUM}+      {
                            int i, value = 0;

                            for(i = yyleng-1; i>=0; i--)
                                value = 10*value + ( yytext[i] - '0' );
                            yyval = value;

                            return DIGIT;
                        }
            %%

生成されたコードをコンパイルしようとすると、「yyvalundeclared」エラーが発生します。* .tab.hファイルで宣言されているので、問題が何であるか理解できません。追加情報を提供する必要があるかどうか教えてください...

よろしくお願いします。ご迷惑をおかけして申し訳ありません。

4

1 に答える 1

3

字句値の変数は通常、yyvalではなくyylvalと呼ばれるため、*。tab.hの変数はほぼ確実に呼び出されます。

于 2013-02-05T17:54:49.100 に答える