問題タブ [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 投票する
1 に答える
5299 参照

eclipse - XText が提供しない ANTLR の機能は何ですか?

編集用の IDE だけでなく、DSL を作成するための非常に優れたツール Xtext に出くわしました。Web で検索を行ったところ、ANTLR のすべての機能が提供されていないと言っている人が見つかりました。パーサージェネレーターとして ANTLR を使用しています。

自分の言語用の完全なパーサーを作成するために ANTLR のどの機能が必要になるかさえわかりませんが、ANTLR はかなり長い間使用されており、おそらく Xtext よりも多くの機能をサポートしています。

Xtext文法で指定できないものの例を誰か教えてください。

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

c# - C# でのカスタム データ トークンの解析と値への置換

レコードから約 10 個のデータがあり、このデータが返される文字列のレイアウトを定義できるようにしたいと考えています。いくつかの部分を除外するオプションがあります。私の考えは、列挙型を使用してトークン/フィールドに整数値を与え、次のような形式{0}{1}{2}{3} または複雑なものにすること{4} - {3}{1} [{8}]でした。トークンの意味は、データベース内のフィールドに関連しています。たとえば、支払いに関連するトークンにこの列挙型があります。

アカウント マスクは VXXXXX1234 のような文字列で、V はビザ用、1234 はカードの下 4 桁です。クライアントは V が必要な場合もあれば、最初の数字が必要な場合もあります (カードの種類を最初の数字に変換するのは簡単です)。

私の目標は、フォーマット文字列のトークンを使用して文字列を生成するために再利用可能なものを作成し、トークン内の数字に関連付けられたデータを使用してデータのインプレース置換を行うことです。

したがって、フォーマットを定義したい場合は、上記のマスクと私の列挙型を使用した例について9{2}{1}{4:[0:0000000000]}

商品番号が678934の場合

これは 9412340000678934 に変換され、トークン 4 の内部部分がString.Formatその値の a の定義になります。また、トークンの周囲に配置されたデータは無視され、所定の位置に保持されます。

私の問題は、文字列の操作とベストプラクティスです。正規表現をその場で作成しようとすると、コストがかかる可能性があると言われています。CS専攻として、「正しい」(どんなに複雑な) 解決策は、自分のトークン用のレクサー/パーサーを作成することだと感じています。私は C# でレクサー/パースを書いた経験がないので、その周りのベスト プラクティスがわかりません。ここでは、効率的で簡単に調整できるシステムに関するガイダンスを探しています。

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

java - ANTLR の基本的なヘルプ

英語の文章をキャンバスに描かれた形に変換するパーサーを作成しようとしています。例: 「赤いボックスを作成する」は、キャンバス上に赤いボックスを作成する必要があります。

この文法ファイルは、あなたの wiki のチュートリアルから思いつきました。それが正しいかどうかわからない、誰かがそれをチェックできるならいいだろう =)

次に、このコードを使用してレクサーとパーサーを生成しました。私の次のステップは何ですか。たとえば、パーサーを使用して「作成」をオブジェクトの作成に変換するにはどうすればよいですか。誰かが私を正しい方向に向けることができますか?

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

php - json textsplitreg式またはパーサー

PHPでpreg_splitを使用してこれを分割する正規表現はありますか?

基本的に私はjson_decode value ()と同じものが必要ですが、両方の引用符は必要ありkeyません。エスケープされるのは4文字だけです。\{ \, \} \:

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

c - Cのサブセットの抽象構文木

教育目的で、Cコード(のサブセット)のJavaScriptインタープリターを段階的に構築しています。

基本的に、int、float ...、arrays、functions、for、while...ポインタはありません。javascriptインタープリターが完了し、ブール式がどのように評価されるかを説明できるようになり、変数スタックが表示されます...

今のところ、Cの例を手動でJavaScriptに変換して、アクションのスタック(影響、関数呼び出しなど)を実行および構築します。このスタックは、後で段階的に実行するために使用できます。Cのサブセットに限定しているので、非常に簡単です。

次に、CコードをJavaScript表現にコンパイルします。必要なのはCコードの抽象構文木だけで、JavaScriptの生成は簡単です。

そのようなツリーを生成できる優れたCパーサーを知っていますか?javascriptである必要はありません(しかしそれは完璧です)、これはオフラインで行うことができるのでどんな言語でも大丈夫です。

私はEmscripten(https://github.com/kripken/emscripten)を見てきましたが、それはC => javascriptコンパイラであり、私たちが望んでいるものではありません。

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

parsing - Python3パーサジェネレータ

Python3で動作するかなり複雑な言語(Python自体と同様の複雑さ)のパーサジェネレーターを探しています。ASTを自動的に生成できる場合、これはボーナスになりますが、解析中にルールを呼び出すだけで問題ありません。特別な要件はありません。また、非常に効率的で高速である必要もありません。

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

input - ソース コードからの Mscgen / trace2uml 入力ファイル ジェネレーター

後でシーケンス図を生成できるように、ソース コードから Mscgen / trace2uml 互換の入力ファイル (説明ファイル/テキスト) を生成する方法はありますか? プロジェクトのホームページには、プログラムが生成していないように見えるメッセージ シーケンス チャートの説明が記載されています。コード全体を調べて、自分でシーケンス記述子を作成するのは嫌です。ソースコードからシーケンス図を生成できる他のツールも役に立ちます..

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

ocaml - OCamlyaccでの外部型宣言の使用

expr.mlファイルにexpr型があります。parser.mly(OCamlyaccファイル)で、exprルールを定義し、次のタイプを指定します。

しかし、私は得る:

追加してみました

.mlyファイルの先頭にありますが、それでも機能しません。このexprタイプを外部ファイルで定義し、ルールの戻り値として使用するにはどうすればよいですか?ありがとう。

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

python - ANTLR 解析の MismatchedTokenException

私が書いているさらに単純な言語用の単純なパーサーを作成しようとしています。後置式で構成されています。今のところ、パーサーに問題があります。入力に対して実行すると2 2 * test >>、MismatchedTokenException が発生します。

また、再帰的な後置パーサーを実装するにはどうすればよいですか?

これが私のコードです:

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

parsing - 本番コンパイラはパーサジェネレータを使用しますか?

「実際のコンパイラライター」は、パーサージェネレーターを使用するのではなく、独自の手作りパーサーを作成すると聞いています。また、パーサジェネレータは実際の言語には対応していないと聞きました。おそらく、パーサジェネレータを使用して実装するのが難しい多くの特殊なケースがあります。私はこれについて疑問を持っています:

  1. 理論的には、GLRパーサージェネレーターはほとんどのプログラミング言語の設計を処理できるはずです(おそらくC ++を除く...)
  2. パーサジェネレータを使用するプロダクション言語を少なくとも1つ知っています:Ruby[1]。
  3. 学校でコンパイラーのクラスを受講したとき、パーサージェネレーターを使用しました。

だから私の質問:パーサジェネレータを使用して本番コンパイラを作成することは合理的ですか、それともパーサジェネレータを使用することはコンパイラコミュニティによって不十分な設計決定と見なされていますか?

[1] https://github.com/ruby/ruby/blob/trunk/parse.y