問題タブ [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.
c++ - ANTLR3ヘッダーセクションの左/右中かっこをどのようにエスケープしますか?
C をターゲット言語とする ANTLR3 ツリー文法があります。このツリー文法は実際に C++ オブジェクトを生成するため、これらのクラスのヘッダーを含める必要があります。@header
これにはセクションを使用します。ただし、出力には、ヘッダー セクションの出力も含むextern C {
andブロックがあります。}
これは、ヘッダーにテンプレートがあり、「C」リンケージを持つと宣言できないため、エラーが発生しています。ヘッダー セクションの出力の先頭でそのブロックを閉じ、最後に再度開きたいと思います。残念ながら、@header
セクション内に中括弧を記述すると、ANTLR3 構文が壊れます。中括弧は、@header
セクションの開始と終了を示します。
これらの中括弧をエスケープするにはどうすればよいですか?
TLDR: 左ブラケットと右ブラケットを@header
ANTLR3 ツリー文法のセクションに書き込む必要があります。これを行うと、@header
セクションの構文が壊れます。生成された出力のヘッダー セクションに左右の括弧を含めることができるように、左右の括弧をエスケープするにはどうすればよいですか?
各出力後に手動で編集するのは...面倒です。
java - 正規表現 - ツリー文法 Antlr Java
正規表現の簡略化に関するプログラムをANTLR (Java)で作成しようとしています。私はすでにいくつかのコードを書いています(以下の文法ファイルの内容)
私の次の目標は、正規表現 (a|a -> a など) を単純化できるツリー文法コードを書き留めることです。いくつかのコーディングを行いましたが (以下のテキストを参照)、ノードをサブツリーとして扱うルールを定義するのに問題があります (次の種類の式を単純化するため: (a|a)|(a|a) to a など)。 )
小型ドライバー クラス:
この事件の解決を手伝ってくれる人はいますか?よろしくお願いします。
parsing - 次の一連の規則は相互に左再帰です。 TREE GRAMMAR
私は、書き換えルールとツリー演算子を使用して正しいと言える AST を生成する完全なパーサー グラマーを持っています。現時点では、ツリー文法を作成する段階で立ち往生しています。次のエラーがあります。
次の一連の規則は、相互に左再帰的な [direct_declarator, declarator] と [abstract_declarator, direct_abstract_declarator] です。
出力オプションなしで構文または演算子を書き直します。設定出力=AST
これが私の木の文法です。
java - ANTLR ツリー文法を使用してツリーのノードをコピーする
ツリー文法を使用して遭遇した問題を解決するためのガイダンスが必要です。基本的に、私ができるようにしたいのは、ツリー内にあるステートメントを置換/コピーすることです。例を通して説明するのがおそらく最善です。
入力例を次に示します。
必要な出力 (後で):
これは、関数ブロック内のステートメントの単純な検索と置換です。私の問題は、ANTLR がツリー文法を介してそれを行う方法を提供することですか?
上記の入力を解析する文法は次のとおりです。
Test.g
テスト.java
ツリー.ドット
各 FUNCALL を検索し、Tree Grammar を使用して内部の BLOCK の内容に置き換えるにはどうすればよいですか?
前もって感謝します!
antlr - ANTLR - AST のノードのリンク
文法ファイルで、AST のノードに「2 つの親」があることを定義する方法を知りたいです。たとえば、最初のツリーのノード「D」がノード「A」の子でもある場合、ノード「D」が繰り返されないようにするには、どの構文を使用すればよいですか (2 番目のツリーのようなものが必要です)。
次のようなものを使用する場合:
ノード「D」が繰り返し表示されます。
tree - 架空のトークンを使用したツリー文法の奇妙な「NoViableAltException」
Tree 文法をコンパイルするときの「NoViableAltException」例外を理解できません。
これは、問題を引き起こすルールを含む私の文法の一部です。
次のようなツリーを生成します。
そして、例外を引き起こす私の TreeGrammar のルール:
具体的には、ANTLR コンパイラは次のエラーを返します。
ツリー文法を次のように変更すると:
コンパイル エラーはありませんが、この場合は MATCH_STATEMENT ブロックが 1 つしかないため、正しくないと思います。
注: ANTLR3 C ランタイムを使用しています。
前もって感謝します。