問題タブ [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 投票する
0 に答える
34 参照

c++ - (Bison) 解析中に動的キャストが失敗する

私は課題としてコンパイラを書いていますが、dynamic_cast で重大な問題が発生しています。ここで何が起こっているのかを理解するために必要な重要なコードとともに、機能しない主要なコードを共有しようとします。

関連するクラス:

そして、私の .ypp ファイルのいくつかのルール:

注: 他のルールと競合することはありません。バイソンはそれを確認しました。

たとえば、一部の入力を解析中の出力:

入力:

出力:

私はそれを理解することはできません。1 つの動的キャストが (追加のコードに基づいて) 正常に機能し、正しいポインターを返す方法はありますか?まったく同じことを行うはずの別のキャストは失敗します。

0 投票する
0 に答える
29 参照

c++ - parser.y (FLEX/BISON) に問題があります。「$4」を宣言する方法は?

私は Flex/Bison を学んでおり、現在はセマンティクスに関する部分に取り組んでおり、以前は字句および構文エラーを扱っていました。私は広範囲にグーグルで検索しましたが、エラーの解決策を見つけることができませんでした. 自動的に行われると思っていたのに、なぜ '$4' を宣言する必要があるのか​​理解できません。

makefile を実行しようとすると、次のエラーが発生します。

フレックススキャナー.l

mv lex.yy.c scanner.c

bison -d -v parser.y

paser.y:114.71-72: エラー: 'case' の $4 には宣言された型がありません

114 | case WHEN INT_LITERAL ARROW statement_ {case_statements.push_back($4);};

これが私が従おうとしている疑似コードです:

声明:

ケース:

場合:

パーサー.y: