問題タブ [bisonc++]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
173 参照

bison - インストールされている GNU Bison のバージョンを取得する方法

Bison 1.875 から Bison 3.0.4 にアップグレードしていますが、下位互換性を維持したいと考えています。

  • 関数呼び出しyyparse(void *)は 1.875 では機能しますが、3.0.4 では機能しません
  • 関数呼び出しyyparse()は 3.04 では機能しますが、1.875 では機能しません

Bisonは、実際のバージョンが最新かどうかを判断し、使用する関数呼び出しを決定するため#define YYBISON_VERSION "3.0.2" に使用した行を含む cpp ファイルを出力します。strcmp

しかし、ご覧のとおり、これは実行時に決定されるため、コンパイラは関数呼び出しに対して何もできないと文句を言います。

プリプロセッサ ディレクティブを使用して適切な関数呼び出しを選択できるように、使用できるマクロが必要です。バイソンのドキュメントでそのようなマクロを見つけることができません。

  • 「__BISON_VERSION」そっくりマクロについて知っている人はいますか?
  • バイソンバージョンに基づいて正しい関数呼び出しを行う別のアイデアを持っている人はいますか?
0 投票する
1 に答える
239 参照

bison - バイソンによって自動生成されたファイル出力のreduceアクションの$defaultは誰ですか

誰かがその文を知っています:

誰が $default... 特定の端末である必要がありますが、どの端末ですか?

0 投票する
1 に答える
737 参照

compiler-construction - 関数宣言と使用のための bison 文法の例

関数の宣言と関数の使用法に関するバイソン文法の例を誰かが挙げて、宣言と使用法の引数の数が異なる場合にパーサーがエラーを生成するようにすることはできますか?

0 投票する
1 に答える
162 参照

c++ - バイソンで複数のコンポーネントを使用してルールをエレガントに処理する方法

以前は ocaml でプログラミングし、ocalmyacc を使用してパーサーを生成していました。ocaml の非常に便利なフェザーの 1 つは、次のようなバリアント型です。

このような型を使用すると、パーサーで AST データ構造を非常にエレガントに構築して、次のような exp を表すことができます。

では、C++ と bison に同様のメカニズムが存在する場合は?

0 投票する
1 に答える
643 参照

parsing - flex と bison を使用してファイルを解析する際の構文エラー

次のファイルを解析しています。

私のフレックスとバイソンファイルは次のとおりです。

lexa.l

yacca.y

コンパイル手順:

実行時にsyntax errornear blockcontentsを与える

私が犯した間違いを特定するのを手伝ってください。

どうもありがとうございます。

0 投票する
1 に答える
1709 参照

bison - 警告: 割り当ては、キャストなしで整数からポインターを作成します yylval=atoi(yytext);

再入可能な lex と yacc を使用して単純な電卓アプリケーションを作成しようとしています。ここでは、入力ファイルで提供された入力を解析する必要がある 2 つのスレッド (パーサー) を作成します。入力ファイルで解析される行は、2 つのスレッドに分割されます。

簡単な電卓の私のlexコードは

単純な計算機(再入可能)用の私のyaccファイルは

私の入力ファイルは

このプログラムをコンパイルして実行すると、次の出力が得られます

gdb を使用してこのプログラムをデバッグすると、プログラムがシグナル SIGSEGV を受信したと表示されます。

このプログラムをデバッグする方法がわかりません。彼に関して助けていただければ幸いです。ありがとうございました