問題タブ [parser-generator]

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 に答える
4716 参照

parsing - パーサージェネレーターを書くためのオンラインリソース

私は教育目的でパーサー ジェネレーターを作成したいと考えており、作成方法を説明するオンライン リソースやチュートリアルがあるかどうか疑問に思っていました。Jack Crenshaw の「Let's Build a Compiler」のようなものです。

LR(1) 文法のパーサー ジェネレーターを書きたいと思います。

アクションと goto テーブルの生成の背後にある理論については十分に理解していますが、それを実装するのに役立つリソースが必要です。

推奨言語は C/C++、Java ですが、他の言語でも構いません。

ありがとう。

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

python - pyparsing でインデントとデデントを解析するにはどうすればよいですか?

Python 文法のサブセットを次に示します。

(Python SVN リポジトリで完全な文法を読むことができます: http://svn.python.org/.../Grammar )

この文法を使用して、Python で Python 用のパーサーを生成しようとしています。私が問題を抱えているのは、INDENTおよびDEDENTトークンを pyparse オブジェクトとして表現する方法です。

他の端末をどのように実装したかを次に示します。

terminal_action引数に応じて、対応する解析アクションを返す関数です。

ヘルパー関数は知っていますが、トークンpyparsing.indentedBlockなしで文法に採用する方法がわかりません。PEER

(私が話していることを確認するには、 pyparsing ソースコードを見てください)

ここで私の完全なソースコードを見ることができます: http://pastebin.ca/1609860

0 投票する
5 に答える
5764 参照

yacc - 複数の flex/bison パーサー

プロジェクト内で複数の Flex/Bison パーサーを処理する最良の方法は何ですか?

パーサーを作成しましたが、同じプロジェクトで 2 つ目のパーサーが必要になりました。ここまでの 3 番目のセクションで、メソッドparser1.yを挿入し、そこから呼び出しました。main(..)yyparse

私が取得したいのは、2 つの異なるパーサー (parser1.yおよびparser2.y) を持ち、それらを外部関数から使用できるようにすることです ( で想定mainmain.cppます)。

yyparse関数をファイルの外部にエクスポートする場合、どのような注意を払う必要が.yありますか? また、2 つのパーサーをどのように処理すればよいですか?

PS。私は g++ を使用してコンパイルしていますが、C++ バージョンの Flex と Bison は使用していません。この方法を維持したいと考えています (したがって、オブジェクト内にパーサーをカプセル化することは避けます)。

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

java - JavaCC の問題 - 生成されたコードですべての解析エラーが検出されない

JavaCCを始めたばかりです。しかし、私はそれに対して奇妙な行動をとっています。記号 (+、-、​​/) で連結され、括弧を含めることができるトークン (文字と数字) の形式で入力を検証したいと考えています。それが理解できたことを願っています:)

メイン メソッドには文字列があり、開き括弧が 1 つと閉じ括弧が 2 つあるため、エラーが発生するはずですが、解析例外が発生しません --> なぜですか?

なぜ例外が発生しないのか、誰にも手がかりがありますか?

私は最初の試行で左再帰と選択の競合に苦しんでいましたが、なんとかそれらを乗り越えることができました. 多分私は問題を導入しましたか?

ああ、おそらく私の解決策はあまり良くありません-この事実を無視してください...または、より良いアドバイスをしてください;-)

ファイル: CodeParser.jj

編集 - 2009 年 11 月 16 日

今、ANTLRを試してみました。

問題のドメインにより適合するようにいくつかの用語を変更しました。次のコードを思いつきました(このサイトの回答を使用)。これは現在機能しているようです:

ところで... ANTLRWORKS は、デバッグ/視覚化のための優れたツールです! とても助かりました。

追加情報
上記のコードは次のようなものに一致します:

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

python - Python パーサー ジェネレーターに関するアドバイス

単純な C に似た言語用のパーサーを作成するというタスクが与えられました。パーサーを作成したい任意のプログラミング言語とツールを使用できますが、同時に Python を学習しているので、それが私の好みの選択です。

私のパーサーが従わなければならない制限がいくつかあります。まず、次の情報を含むテキスト ファイルを読み取ることができる必要があります。

各種類とスペルは、トークンの種類と言語の値を参照します。このファイルは、コードのサンプルを言語の字句解析器に通した結果です。

次に、パーサーの出力をカスタマイズできなければなりません。理想的には、kind:spelling リストを、言語のコンパイラに渡されて MIPS アセンブリ コードに変換されるトークンの別のシーケンスに変換したファイルを出力したいと考えています。パーサーで生成できるようにしたいものの例を次に示します。

誰かが既存の Python パーサー ジェネレーターについてアドバイスしてくれたり、上記の例で探しているようなことを達成できれば、とても助かります。

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

parsing - proxy.handshake 呼び出しでハングする ANTLR パーサー

私は基本的な ECMAScript パーサーを動作させようとしており、ECMAScript 3の完全な ANTLR 文法を見つけました。これは正常にコンパイルされ、適切な Lexer/Parser/Walker Java ファイルを生成するように見えます。
( Eclipse 3.5 のANTLR IDE プラグイン内で実行)

ただし、実際に単純なテスト コード ( ANTLR wiki のガイドに従ってください) で使用しようとすると、パーサーを作成しようとするとハングします。

問題をコンストラクター内で追跡しES3Parser、そこで関数を呼び出していますproxy.handshake()-この行の前では正常に実行できますSystem.out.println("text")が、その後は何も得られません。

では、ハングしている理由を見つけて停止するにはどうすればよいでしょうか。または、このセクションをバイパスすることもできます (デバッグを無効にすることはできますか?)。 .

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

scala - Scalaでの再帰構造の解析

単純なSQLのような文字列を解析できるscalaでパーサーを構築しようとしています。基本が機能していて、次のように解析できます。

しかし今、私はネストされたクラスをどのように解析するのか疑問に思いました。

私の「combinedPredicate」の現在のプロダクションは次のようになります。

それ自体の中でcombinedPredicateプロダクションを再帰的に参照しようとしましたが、スタックオーバーフローが発生しました。

ところで、私はここで実験しているだけです... ansi-99仕様全体を実装していません;)

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

parser-generator - PEG文法とパーサージェネレーターの制限?

私はYARDをとても楽しんでいました:

http://www.ootl.org/yard/

http://code.google.com/p/yardparser/

http://www.codeproject.com/KB/recipes/yard-tokenizer.aspx

完全に機能する電卓を構築することができました。PHPパーサーを実行するためにYARDを評価しています。PEG文法とパーサージェネレーターの制限について親切にアドバイスしてください。どうもありがとうございました!

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

regex - カスタム文字列生成パターン構文の解析

背景:URLファイル名のカスタム正規表現のような構文を開発しています。これは次のように機能します。

  • ユーザーは、のようなパターンを記述し、"[a-z][0-9]{0,2}"それを入力として渡します
  • それはプログラムによって解析され、それが表す順列のセットに変換されます。つまり、、、
    'a'.. ..'a0''a00''z99'

これらのパターンは複雑さが異なります。基本的に、URLファイル名に表示される可能性のあるものはすべて対応する必要があります。言語はJavaまたはPHPのいずれかですが、任意の言語の例または抽象的/概念的なヘルプは大歓迎です。

私の質問は次のとおりです。

  1. 上記の「パーサー」の実装から始める場所

そしてそれほど重要ではありませんが、

  1. 解析された複雑なパターンをプログラムで文字列に変換する方法
0 投票する
4 に答える
290 参照

silverlight - Silverilght の言語パーサー

特定の言語 (SQL のサブセット) 用のパーサーを作成する必要があります。私が知っているように、これを行う最も簡単な方法は、BNF で文法を定義し、yacc のようなツールを使用することです (私はGPPG の経験が豊富です)。しかし、始めてみると、これらのツールはいくつかのコア パーサー アセンブリ (GPPG の ShiftReduceParser.dll など) に依存するパーサーを生成することに気付きました。Silverilght 用のパーサーを実装する必要があるため、フル フレームワークを対象としたライブラリを使用できません。

Silverilght で使用できるパーサー ジェネレーター ツールはありますか?