問題タブ [yacc]

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 投票する
4 に答える
3345 参照

c - GCC と Flex/Bison で効果がないという警告文

プロジェクトを gcc と -Wall オプションを使用してコンパイルすると、flex ファイルの存在しない最後の行に効果のないステートメントに関する警告が表示されます。

警告:

シェル コマンド:

lex ファイルの最後の部分:

この警告が表示される理由を知っている人はいますか?

すべての #line ディレクティブを抑制すると、エラーは次のようになります。

次の ECHO 行を指します。

0 投票する
3 に答える
6304 参照

compiler-construction - バイソンを使用して要素のリストを解析する

私はシェーディングエンジン用のコンパイラを書いていますが、ステートメントの解析部分に到達するまで、すべてが正常に機能していました。

クラスで定義された抽象構文ツリーを使用して、すべての作業を実行しました(タイプチェックと中間コード生成を簡素化するため)。したがって、祖先クラスASTNodeと、、などのすべての子孫クラスがありASTFloatます。ASTExpressionASTIdentifier

.yファイルでは、一般的な方法でASTを構築できます。

そしてそれは非常にうまく機能しますが、それから私はこの方法でスコープのステートメント(例えばifステートメントの本体)を生成しようとしました:私は遭遇した各ステートメントでパーサーによって埋められなければならないASTStatementsリストを持つクラスを使用しました。ASTNode*

したがって、アプローチは次のようになります。

問題は、アイテムがステートメントのブロックごとに1回だけ初期化される必要があるということですが、それを行う方法がわかりません。使用は私が試したハックですが、それまでの内容が含まれている可能性がif ($$ == null)あるため、機能しません。yylval

バイソンを使用してこの種の状況を処理するための通常の/最良の方法はどれですか?

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

c - flex/lex yacc/bison マルチスレッド環境

マルチスレッド環境で flex/bison|lex/yacc によって生成されたコードを使用できますか? グローバル変数がたくさんあると思います。どうすれば修正できますか?

0 投票する
3 に答える
2008 参照

yacc - BNF文法からのステートマシンの導出

XSSセーフな文字列補間スキームの概念実証をまとめようとしています。

置換された文字列が与えられた場合、

それをリテラル部分と置換("Hello<b>" planetoid "</b>!")に分割してから、ステートマシンをリテラル部分に対して左から右に実行したいと思います。(上記の)補間値に達したときplanetoid、状態から適切なエスケープ関数に到達できる必要があります。

lex / yacc / bisonを使用してステートマシンを導出し、文法のラベルを出力状態に関連付ける方法の例を知っている人はいますか?javascriptで使用できるステートマシンを派生させ、PHPの基盤となる文字列実装を置き換えようとしています。

これを行う理由はここに記載されています。

乾杯、マイク

0 投票する
2 に答える
3673 参照

c - 文法の左再帰は競合を引き起こします

Bisonの文法全体を通して、私は右再帰を使用しています。最初にスタック全体を構築する必要がないため、左再帰の方が優れていることを読みました。

しかし、それらのいずれかで左再帰に切り替えようとすると、常に多くの競合が発生し、その理由がわかりません。

右の代わりに左の再帰を使用すると競合が発生する一般的な例を誰かに教えてもらえますか(右の再帰が競合を引き起こさない場合)。次に、そのような競合を修正するために左に切り替えるときに何をする必要がありますか。基本的な例は、自分の文法を修正するだけでは不十分だと思います。

編集:
しかし、私の理解は完全ではないので、とにかく特定の例を含める必要があると思います:-)「listseparatorcommand」を「commandseparatorlist」に変更すると競合が解決します。

0 投票する
3 に答える
1279 参照

c - Bison の $$ 変数を GDB で調べる

Bison .y ファイルにブレークポイントを設定した場合、そのブレークポイントで $$ 疑似変数の内容を調べる方法はありますか?

0 投票する
2 に答える
1401 参照

c - 競合をシフト/削減する yacc

次の yacc のコードを参照してください。生産要素を削除すると: '!' expr を使用すると、解析の競合がなくなります。ここで何が起きてるの?