問題タブ [tree-grammar]

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

c# - ANTLR - AST のツリ​​ー文法を書く

私の文法ファイルによっていくつかの Lua コードに対して出力された AST があります。これは現在、解析と字句解析を行っています。これにツリー文法を追加したいのですが、C# を使用しているため、その方法がわかりません。パーサーとレクサーが既に作成されている場合、ツリー文法コードを生成するための基本的なプロセスは何ですか?

更新: 次の文法ファイルがあります。

メインの文法ファイルと同じディレクトリに配置されているため、問題なく生成されます。ただし、これをコンパイルしようとすると、次のエラーが発生します。

私は正しい軌道に乗っていますか、それとも完全に外れていますか?

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

antlr - ANTLR 3.x - 書き換えルールをフォーマットする方法

元のルールで特定の条件が発生したときに、書き換えルールを適切にフォーマットする方法に挑戦していることに気づきました。

これを書き換える適切な方法は次のとおりです。

Antlr は、括弧内にラベルを付けてブランド化するのが好きではないようで、「op =」は失敗します。また、私は試しました:

Antlr は or '|' を好みません 文法エラーをスローします。

文字クラスをトークン名に置き換えると、この問題は解決しますが、私の文法に他の問題が生じます。

- - 編集 - -

2 番目の問題が追加されました。このルールをツリー文法でフォーマットするのを手伝ってください:

multExpression : unaryExpression (MULT_OP unaryExpression)* ;

非常に単純です: 私の期待は、一致したすべてのトークンを親 (架空の) トークンで囲み、次のMULTような結果になるようにすることです。

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

c# - 依存関係の解析

EP4IR http://www.agfl.cs.ru.nl/EP4IR/english.htmlで agfl が提供する変換機能が特に気に入っています。

ダウンロードページはこちら: http://www.agfl.cs.ru.nl/download.html

これをac#プログラムで利用する方法はありますか? クラスを c# に変換する必要がありますか?

ありがとう :)

0 投票する
0 に答える
216 参照

c# - ANTLR、C# ターゲットにメソッドがない

ANTLR を使用してツリー文法から C# コードを生成しましたが、メソッド downup() が見つかりません。呼び出しのシーケンスは次のとおりです。

downup() メソッドと同等ですか? メソッドが Java に存在するのに C# に存在しないのはなぜですか? そして、なぜ彼ら (著者) は、次のメソッドをオーバーライドするようにアドバイスするのですか?

一方、C#はオーバーライドするメソッドがないと言っていますか?

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

parsing - PHPでMarkdownを解析する方法は?

まず、PHP用のMarkdownパーサーがすでに存在することを私は知っています。私もこの質問を調べましたが、それは私の質問に答えません。

明らかに、タイトルがPHPに言及していても、言語に依存しない場合は、それを行うために実行する必要のあるステップを知りたいので。

私はPEGについて読んだことがありますが、認めざるを得ません。PHPパーサーで提供されている例を本当に理解していませんでした。

CFGについても読みました。

いわゆる「トークンツリー」を構築しているように見えるZend_Markup_Parser_Textileを見つけました(それはどうですか?)が、現在は使用できません。(ところで、テキスタイルはマークダウンではありません)

それで、具体的には、これにどのように行きますか?

明らかに、私は正規表現を使用することについて考えていますが、恐れています。

Markdownは同じ要素(Setextとatx)に対して複数の構文をサポートしているためです。

出発点を教えていただけますか?

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

antlr - ANTLRのASTツリー文法+リスト

私はANTLRのツリー文法でリストをきれいに消費する方法を見つけようとしてたくさん読んだことがあります。これが私が試したものとその結果です(私は本当に些細なことを見逃していることを願っています)...

+=構文の使用

これは失敗します...

ルール'+='リストラベルは出力オプションなしでは許可されていません

出力を「AST」または「template」(唯一のオプション)に設定すると、生成されたクラスのメソッドシグネチャが変更されます。つまりm、SomeMethod(s)のリストではなく、それぞれノードまたはテンプレートのリストになります。この方法を機能させる方法があれば、私は提案を受け入れます。

ルールスコープの使用

これは機能しているようですが、ネストされた/再帰的なケースではまだテストしていないことを認めます。

最終目標

コンパイルされたコードを生成する前に静的分析と最適化を実行できるように、自分の言語(Class、Method、Variable、Statementなど)を表すクラスのセットを作成したいと思います。そのためには、リストを利用できるようにする必要があります。+ =構文が「正しく機能する」と期待していましたが、何かが足りない可能性があります。2番目の方法は機能しますが、過度に冗長でエレガントではないように見えます。

質問

ANTLRのツリー文法で、具体的なクラスに渡すためにリストを使用する適切な理由は何ですか?

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

user-interface - ANTLR のツリー文法 AST グラフィカル ビュー

現在、ANTLR と JAVA で Javascript コンパイラを構築しています。AST の生成には ANTLR のツリー文法を使用します。(これが、ノードを生成するために手動で定義された抽象クラスを使用した異種アプローチよりもスマートかどうかはまだ疑問ですが、それは別のトピックです)。

私の問題は、入力を解析したときに、var x = 5 ;としましょう。これは内部的に次のように表されます。VARDECLがルート、xが左の子、5が右の子です。toStringTree()コマンドを使用してこのツリーを出力するオプションがあり、(VARDECL x 5) を出力します。この表現は、大規模なプログラムでは理解するのが非常に難しくなるため、これを使用するサードパーティ ツールが存在するかどうか疑問に思っていました。入力としてのテキストツリー表現と、ツリーの素敵なグラフィカルモデルを出力できますか? (または、それも実装する必要がありますか)

よろしくスネ。

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

antlr - ANTLRツリー文法を生成する体系的な方法は?

少し大きいANTLRパーサー文法ファイルがあり、そのためのツリー文法を作成したいと思います。しかし、私が知る限り、このツリー文法生成の作業は自動的に実行できません。つまり、パーサー文法をコピーしたり、不要なコードを削除したりして、手動で生成する必要があります。体系的な方法があるかどうかを知りたいです。パーサー文法ファイルからツリー文法ファイルを生成します。

PS私は「手動のツリーウォーキングはツリー文法よりも優れている」と主張する記事を読みました。これは信頼できる情報ですか?もしそうなら、ANTLRツリー文法ファイルを書くよりも手動のツリーウォーカーを作成する方が良いでしょうか?次に、ANTLRパーサー文法ファイルを使用して手動ツリーウォーカーを作成するにはどうすればよいですか(書き換えルールを使用してASTを作成します)。

前もって感謝します。

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

antlr - ANTLR解析文法->ツリー文法

コンパイラ理論クラスの最後の割り当てでは、Javaの小さなサブセット(MiniJavaではない)用のコンパイラを作成します。私たちの教授は私たちが望むどんなツールでも使うオプションを私たちに与えてくれました、そしてたくさんのことを調べた後、私はANTLRに落ち着きました。スキャナーとパーサーを稼働させ、パーサーがASTを出力することに成功しました。ツリー文法ファイルをコンパイルしようとして立ち往生しています。基本的な考え方は、パーサーから文法規則をコピーし、ほとんどのコードを削除して、書き換え規則をそのままにしておくことだと理解していますが、コンパイルしたくないようです(offendingTokenエラー)。私は正しい方向に進んでいますか?些細なことを見逃していますか?

ツリー文法:

パーサー文法:

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

antlr - 行 0:0 からのノードが一致しないツリー ノード: UNIT が UNIT を予期しています

このエラーはどういう意味ですか? UNITノードを期待し、期待していたものを取得したことに注意してください...