1

Bison でパーサーを作成していますが、次の警告が表示されます。

fol.y:42 parser name defined to default :"parse"
fol.y:61:  warning:  type clash ('' 'pred') on default action

私はGoogleを使ってそれらを取り除く方法を検索してきましたが、それらで見つけたすべての投稿にコンパイルエラーと警告があるため、それらが何を意味するのか(修正方法ははるかに少ない)についてはほとんど手ぶらで出てきましたそれら自体は対処されません。誰かがそれらの意味と修正方法を教えてもらえますか? 関連するコードは以下です。61 行目は最後のセミコロンです。残りの文法は非常に冗長なので省略します。

%union {
    char* var;
    char* name;
    char* pred;
}


%token <var> VARIABLE
%token <name> NAME
%token <pred> PRED

%%


fol:
        declines clauses {cout << "Done parsing with file" << endl;}
        ;
declines:
        declines decline
        |decline
        ;
decline:
        PRED decs
        ;
4

2 に答える 2

1

%start parse最初のメッセージは、文法仕様に含まれていないという単なる警告である可能性があります。

2 つ目は、値を返すはずのルールがどこかにあるが、返す値の型を適切に指定していないことを意味します。PRED はあなたのpred要素を返しますunion。および%typeのエントリを作成していないことが問題である可能性があります。共用体がある場合は、すべてではないにしてもほとんどのルールのタイプを指定する必要があります。または、(デフォルトのアクションをオーバーライドするために) 明示的なアクションを持たないルールだけを指定する必要があります。declinedeclines$$ = $1;

問題が指定された行にあるとは確信できません。また、問題を完全かつ最小限に再現したものがないため、問題を検証するために調査することはできません。の仕様はdecs関連している可能性があります(そうであるとは確信していませんが、そうかもしれません)。

ファイル(または同様のもの)bison -vであるの出力から、より多くの情報を得ることができます。y.output

于 2012-04-20T00:30:17.923 に答える