問題タブ [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.
parsing - yacc/ocamlyacc での reduce/reduce 競合の解決
演算子なしの関数適用 (Ocaml や Haskell など) と、2 項演算子と単項演算子の通常の組み合わせをサポートする ocamlyacc (通常の yacc とほぼ同じ) で文法を解析しようとしています。減算と否定の両方に使用できる「-」演算子との削減/削減の競合が発生しています。ここに私が使用している文法のサンプルがあります:
問題は、"a - b" のような式を取得した場合、パーサーはこれを "a (-b)" (b の否定、その後に適用) と縮小するか、"a - b" (減算)。減算削減は正しいです。そのルールを優先して競合を解決するにはどうすればよいですか?
yacc - 1 つのプログラムでの複数の YACC 文法
yyparse()
1 つのプログラムで使用するさまざまな YACC 文法をコンパイル、リンク、および呼び出すにはどうすればよいですか?
.net - .NET 用の優れた yacc/bison タイプの LALR パーサー ジェネレーターはありますか?
.NET 用の優れた yacc/bison タイプの LALR パーサー ジェネレーターはありますか?
c++ - yacc ベースのパーサーでメモリ リークを防止する最善の方法は何ですか?
yacc では、オブジェクトの受け渡しは許可されていません。%union には POD 型のみを含めることができるため、複雑なオブジェクトは新規作成してポインターで渡す必要があります。構文エラーが発生した場合、yacc パーサーは実行を停止するだけで、作成されたすべてのオブジェクトへの参照が失われます。
私が思いついた唯一の解決策は、すべての新しいオブジェクトが特定の基本クラスを継承し、割り当て時にコンテナーに追加され、エラーが発生した場合はそのコンテナー内のすべてを削除できるということです。
この問題を解決するためのより良い yacc トリックを知っている人はいますか?
別のパーサーを選択するように言わないでください。
python - PLY: C パーサーでのトークン シフトの問題
PLY を使用して C パーサーを作成していますが、最近問題が発生しました。このコード:
my_type は、以前は型として使用されていた型として定義されているため、正しい C コードです。型と単純な識別子を区別するためにレクサーが使用するパーサーの型シンボル テーブルに入力することで、これを処理します。
ただし、型宣言規則は SEMI (';' トークン) で終了しますが、PLYmy_type
は最初の行で終了したと判断する前に、2 行目からトークンをシフトします。このため、型シンボル テーブルの更新をレクサーに渡す機会がなく、レクサーは my_type を型ではなく識別子として認識します。
修正のアイデアはありますか?
完全なコードは次の場所にあります: http://code.google.com/p/pycparser/source/browse/trunk/src/c_parser.py これより小さな例を作成する方法がわかりません。
編集:
問題が解決しました。以下の私の解決策を参照してください。
c++ - Antlrの利点(たとえば、lex / yacc / bison)
私は過去にさまざまなプロジェクト、通常は翻訳者(EDAアプリにストリーミングされたEDIFのサブセットなど)にlexとyacc(より一般的にはbison)を使用しました。さらに、数十年前にさかのぼるlex/yacc文法に基づくコードをサポートする必要がありました。ですから、私は専門家ではありませんが、ツールの使い方を知っています。
私は過去にさまざまなフォーラムでAntlrについて前向きなコメントを見てきましたが、何が欠けているのか興味があります。したがって、両方を使用したことがある場合は、Antlrで何が優れているかより高度であるかを教えてください。私の現在の制約は、私がC ++ショップで働いていることであり、出荷する製品にはJavaが含まれないため、結果として得られるパーサーはその規則に従う必要があります。
parsing - Yacc はまだ業界で使用されていますか?
私が開発しているソフトウェアベースは、私が扱う必要のないかなりの量の yacc を使用しています。見つけた問題を理解するのに役立つと思うこともありますが、ほとんどの場合、yacc について完全に知らなくても問題ありません。
私の質問は、yacc を学習するのに必要な時間を保証するためにまだ yacc を使用している新しいプロジェクトが十分にあるのでしょうか?
編集: 反応が主に Yacc の学習を支持していることを考えると、yacc よりもお勧めする同様の言語はありますか?
c - Yacc 問題: 次の非ターミナルでデータを利用できるようにする
b で生成したいくつかの変数を c で使用できるようにしたい:
簡単な例:
だから私は、後でcで言うことができます:
それを行う機会はありますか?どんな助けでも本当に感謝します!
yacc - Yacc: 各非終端記号の後のコード
各ターミナルの後にコードを実行する方法はありますか?
このようなことが可能になるように:
どんな助けでも本当に感謝します!
unix - 「選択設定構文」または非常に類似したものをサポートする MKS Yacc の代替手段はありますか?
MKS Yacc は、彼らの Web サイトで「選択設定構文」と呼ばれる表記法をサポートしています。図示されていませんが、角括弧で囲まれたトークンと、オプションでキャレットで構成され、特定のトークンが残りの規則に従う必要があるか、または従わない必要があることを示します。
(角かっこで囲まれた項目が非終端記号になるかどうかはわかりません。表記法を使用して見たコードでは、常にトークンまたはスペースで区切られたトークンを使用し、非終端記号は使用しません。)
UnixまたはLinuxマシンで実行され、できればソース形式で利用できる、同じサポート(表記が異なる場合があります-機能はできない)を提供する代替のYacc互換システム(できればオープンソース)を知っている人はいますか?
(MKS Yacc はまた、エラーの処理とエラー動作の調整においてある程度の柔軟性を提供します。それを使用できる 1 つの方法は、キーワードとして扱われると意味をなさない位置でキーワードが検出されたときに、キーワードを識別子として扱うことです。それをバークレー Yacc に後付けすることはできbyacc
ますが、「選択設定」を処理する方法を考えるのに十分な時間を費やしていません。)