問題タブ [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.
c++ - (Bison) 解析中に動的キャストが失敗する
私は課題としてコンパイラを書いていますが、dynamic_cast で重大な問題が発生しています。ここで何が起こっているのかを理解するために必要な重要なコードとともに、機能しない主要なコードを共有しようとします。
関連するクラス:
そして、私の .ypp ファイルのいくつかのルール:
注: 他のルールと競合することはありません。バイソンはそれを確認しました。
たとえば、一部の入力を解析中の出力:
入力:
出力:
私はそれを理解することはできません。1 つの動的キャストが (追加のコードに基づいて) 正常に機能し、正しいポインターを返す方法はありますか?まったく同じことを行うはずの別のキャストは失敗します。
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: