問題タブ [abstract-syntax-tree]
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++ - 任意のプログラミング言語またはIRのAST
CまたはC++のみを使用して(YACCやLEXなどのツールを使用せずに)任意のプログラミング言語またはIR用のASTを作成することは可能ですか?
もしそうなら、字句解析と構文解析を実装する方法は?
そうでない場合、ASTを正常に作成するためにCまたはC ++に拡張する必要があるツールは何ですか?
私が疑問を明らかにしたことを願っています。私の質問が曖昧または文脈から外れているように見える場合は、必要なことを示してください。
PS:私は実際にLLVMの.ll形式のIR表現用のASTを作成しようとしています。.llがASTから派生していることを私は知っています。しかし、私は静的分析の実践を試しています。だから私はASTの作成を検討しています。
c# - ANTLR AST の構築: 文字ではなく文字列としてのルート ノード
ばかげた/基本的な質問をしているかもしれませんが、ANTLR AST の構築について混乱していました。
私が作りたいのは、親ノードで演算子とそのオペランドを子として持つような一種のブール式パーサーです。たとえば、文
( ( ABC & D ) | ( E & ( F | G ) ) )
理想的には
以下文法より。
問題は、「&」の子としてノードのリスト(配列)として「AB C」を取得していることです。
単一の文字列として制限することは可能ですか??? つまり、「AB C」または別の言い方をすれば、AST のルート ノードに複数の文字を含めることは可能ですか? はいの場合、どうすればそれを達成できますか?
参考までに「リスク要因と現在の経済状況」の構文木を作りたい
PS私も試しました:
参考までに、私は.NET環境を使用しています。
java - JavacTask.parse()のJavacASTシンボル解決
数日前に公式のJavaサポートフォーラムに投稿したように、JCTreeシンボルが元のjavac実装を使用して独自のコードから解決できるかどうかを知りたいと思います。
http://forums.oracle.com/forums/thread.jspa?threadID=1774807&tstart=0
Resolve resolve = Resolve.instance(javacTaskImpl.getContext());
antlr - 定義される前でも呼び出すことができるように、Antlrで関数呼び出しを実装するにはどうすればよいですか?
ASTが構築されたら、関数を定義して任意の順序で呼び出すことができるように、ツリーウォーカーを実装するための最良の方法は何ですか?
たとえば、これはPHPで有効です。
どういうわけか、2回目のパス、つまりツリー変換が必要だと思いますが、このテーマに関して興味深いものは何も見つかりません。問題はおそらくAntlr固有の問題ではありませんが、これがどのように行われるかのAntlrの例を教えていただければ、さらに良いでしょう!
antlr - ANTLR で単純な AST を生成する
私はANTLRで少し遊んでいて、次のような関数を作成したいと考えています:
これにより、次の AST が生成されます。
これまでのところ、私は運が悪かったのですが、AST にパラメーターを子ではなく兄弟として持たせ続けています。
これまでのコード:
C#:
ANTLR:
python - Python ast モジュール リソース
ASTモジュールがどのように機能するかを段階的に示すリソースを推奨できますか? 特に NodeVisitor と NodeTransformer...
javascript - Javascript を解析し、Javascript または Ruby で結果を読み取るためのツールは何ですか?
Javascriptのコード分析をしたいと思います。私はASTまたはS-Expressionを操作したいと思います。V8エンジンがこれを構築する可能性は確かにありますが、Javascriptコンテキストからこの情報にアクセスする方法に関するドキュメントを見つけることができないようです.
Ruby で分析を行うことはまったく問題ありませんが、それを実行する唯一の方法は、Treetopまたは同様のパーサー ジェネレーターで文法全体を記述することです。
antlr - ANTLRAST構築の問題
ASTを取得できません
次の文法を使用する
単語と演算子を表示するASTを作成したい
つまり、私の要件は次のようなものです。
代わりに私が得るものは:
実際、私はMultiwordNodeの下でASTを参照しています(または「アトム」レベルで生成されます)
それは次のように機能するはずです
(私の悪い絵でごめんなさい:))
問題は、演算子が引用符なしで発生する場合、それはその兄弟の頭のようなものでなければならないということです(ASTで参照されているように)。しかし、引用符付きのテキストで発生する場合は、他の単語と同じようにキャプチャする必要があります...
antlr - ANTLR の AST のオプションの書き換えルール
ANTLR で AST をビルドしているときに問題が発生しました (ANTLR 3.2、ANTLRWorks 1.4 を使用しています)。
これは私の文法です:
この問題は、クラスのオプション部分で発生します — ('extends' e=IDENTIFIER)?
.
したがって、文法はこのクラス宣言でうまく機能します。
extends
次のように、一部を除外すると失敗します。
ANTLR はこのフラグメントの前で停止し、コンソールで次の例外が発生します。
javax.swing.text.BadLocationException: Position not represented by view
^(EXTENDS $e)
オプションとして書き換えルールを処理するために ANTLR を指定するにはどうすればよいですか?
compiler-construction - C / C ++コードを生成するときの式の結合性と優先順位?
式の演算子の優先順位を正しく考慮して、AST を生成する基本的なコンパイラを作成しました。ただし、コード生成を実行して C++ コードを生成する場合、括弧の使用方法がわかりません。
この式の場合:
以下のAST:
かっこを含む前の式を正しく生成する必要がありますが、2 番目の演算子が (たとえば) 加算演算子の場合、かっこは不要です。読みやすさを向上させるために必要な場合にのみ使用することをお勧めします。
この種の動作を指示するルールと、括弧をいつ使用するかを知る方法はありますか? プラスとマイナスは、ほとんどの言語で同じレベルの優先順位を持っています。これをすべての演算子で機能させたいと考えています。