問題タブ [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.
c - flex lexer への文字列入力
flex/bison パーサーを使用して read-eval-print ループを作成したいと考えています。問題は、flex によって生成されたレクサーが FILE* 型の入力を必要としていて、それを char* にしたいということです。とにかくこれを行うことはありますか?
1 つの提案は、パイプを作成し、それに文字列を供給し、ファイル記述子を開き、レクサーに送信することです。これはかなり単純ですが、複雑で、プラットフォームにあまり依存していないように感じます。より良い方法はありますか?
parsing - Cのような定義文字列を解析する最も効果的な方法は?
いくつかの引数の前に置くことができるいくつかの追加のキーワードを使用してCのような言語で記述された関数定義のセットがあり(たとえば、「unsigned」または「register」と同じ方法)、これらの行を分析する必要がありますいくつかの関数スタブと同様に、それらから実際のCコードを生成します。
Flex / Yaccがそれを行うための最も適切な方法であるというのは正しいですか?
アナライザー/パーサーの経験がまったくない場合、正規表現を使用してシェルまたはPythonスクリプトを作成するよりも遅くなりますか(追加のキーワードの数が多くなり、その効果がかなり異なる場合、これは大きな苦痛になる可能性があります) (私はLALRがその仕事をする方法を知っていますが)?
同様の問題をカバーするLex/Yaccに関する優れた資料はありますか?私が見つけたすべての論文は、「おもちゃ」計算機の同じ原始的な例を使用しています。
どんな助けでもありがたいです。
haskell - Haskell解析ツール-yacc:lex :: happy :?
つまり、 HappyはHaskellのyaccの強力な代替品のようです。lex / flexを置き換えるための同様に堅牢なレクサージェネレーターはありますか?
regex - 最高の最新のテキスト解析? AKA いつ Lex と Yacc を使うべきか?
コマンドと引数を含むテキストのブロックを入力として、1 行に 1 つずつ、次のように入力します。
そして、引数XYZ
がその特定のコマンドに対して正しい形式であることを確認し、正しい場合は正しいコード ブロックを実行したいと考えています。~100 のコマンドのようなものがあり、その中には引数の数が可変で、関係が異なるものがあります (つまり、コマンドXYZ
が呼び出された場合は、コマンドも呼び出す必要がありABC
ます)。
次のようなコマンドもあります。
テキストが と の中に含まれていることが重要COMMAND
ですENDCOMMAND
。
通常、このようなものには、正規表現ではなく Lex と Yacc を使用しますが、より現代的なものはありますか? コードは C# で記述されています。古い学校の C Lex と Yacc 以外に、これを行う MSDN はありますか?
python - lex/yaccを使用して残りのデータをトークン化する
許してください。私は構文解析とlex/yaccにまったく慣れていません。おそらく頭を悩ませていますが、それでも次のようになります。
私はPLYを使用してかなり基本的な計算機を書いていますが、その入力は必ずしも方程式であるとは限らないため、解析時にそうであるかどうかを判断する必要があります。入力の極値は、方程式に対して完全に評価され、それが細かく解析されて計算されるもの、または方程式のようなものではなく、解析に失敗して細かくされるものになります。
灰色の領域は、方程式のような部分を持つ入力であり、パーサーがその部分を取得して処理します。これは私が望んでいることではありません-エラーをスローバックできるように、文字列の一部が取得およびトークン化されていないかどうかを判断できる必要がありますが、これを行う方法がわかりません。
基本的に、「残っているものをキャッチする」トークンを定義する方法を知っている人はいますか?それとも私がこれを処理できるより良い方法はありますか?
parsing - ポストインクリメント演算子からの YACC シフト/削減競合を修正するには?
YACC (実際には Bison) で文法を書いていますが、シフト/リデュースの問題があります。これは、後置インクリメント演算子とデクリメント演算子を含めることによって生じます。以下は、文法の縮小版です。
Bison は、12 個のシフト/リデュースの競合があることを教えてくれましたが、接尾辞のインクリメントとデクリメントの行をコメントアウトすると、問題なく動作します。この競合を修正する方法を知っている人はいますか? この時点で、LL(k) パーサー ジェネレーターに移行することを検討しています。これにより、はるかに簡単になりますが、LALR 文法は常に、より自然に記述できるように見えました。GLR も検討していますが、優れた C/C++ GLR パーサー ジェネレーターを知りません。
regex - lexの正規表現
LexとYaccを使用して、MathMLからLaTeXへの簡単なトランスレータを開発しています。正規表現ルールを含む私のlexファイルには、算術演算子[-+ *=/]用に定義されたものがあります。プラスマイナス(+-)と非表示時間('&InvisibleTimes')を認識できるように拡張したいのですが、正規表現に慣れていないため、サポートが必要です。
yacc - YACC コンパイル エラー
PC で Cygwin シェルを使用して YACC ファイルをコンパイルしています。「不明な文字 \15」が表示されます。奇妙なことに、別のマシンの同僚が、同じシェルを使用してまったく同じファイルを警告やエラーなしでコンパイルできます。シェルまたはコンパイラで設定する必要があるフラグはありますか? nmake と Visual Studio コンパイラを使用しています。必要に応じて、さらに情報を提供させていただきます。
どうもありがとうございました!
parsing - コンパイラで前方参照を実装するにはどうすればよいですか?
Lex と YACC (実際には Flex と Bison) でコンパイラを作成しています。この言語では、任意のシンボル (C# など) への無制限の前方参照が可能です。問題は、識別子が何であるかを知らずに言語を解析できないことです。
私が知っている唯一の解決策は、ソース全体を lex してから「幅優先」解析を行うことです。これにより、クラス宣言や関数宣言などのより高いレベルのものは、それらを使用する関数の前に解析されます。ただし、これは大きなファイルの場合に大量のメモリを必要とし、YACC で処理するのは困難です (宣言/本文の種類ごとに個別の文法を作成する必要があります)。また、レクサーを手書きする必要があります (これはそれほど問題ではありません)。
効率についてはあまり気にしません (それでも重要ですが)。これは、完了したらコンパイラ自体を書き直すためですが、そのバージョンを高速にしたいと考えています (高速な一般的なLex/YACC では実行できないが、手動で実行できる手法については、それらも提案してください)。したがって、現時点では、開発の容易さが最も重要な要素です。
この問題に対する良い解決策はありますか? これは通常、C# や Java などの言語のコンパイラでどのように行われますか?
parsing - Shift / Reduceの競合を支援する-モデル化を試みる(XA)*(XB)*
EBNF式をモデル化しようとしています
これを表すように見えるyacc(MPPGを使用しています)文法を作成しましたが、テスト式と一致しません。
私が一致させようとしているテストケースは
レクサーからのトークンストリームは
文法解析では、「Shift / Reduce競合、KW_Declareの状態6」があると示されています。「%leftPrologHeaderList PrologBodyList」でこれを解決しようとしましたが、どちらの解決策も機能しません。
KW_Declare KW_Namespace KW_Variable Separatorはすべて、値が「declare」、「naemsapce」、「variable」、「;」のトークンです。