私はOpenEdge(4GLデータベース言語)用のパーサーを作成しようとしており、ANTLR(または同様のもの)を使用したいと考えています。前処理されていないコードにANTLRを使用できますか?
私はこれが問題になるかもしれないと思う2つの理由があります。
終わり.
がラインである
assign
customer.name = 'Customer name'
customer.age = 20
.
:
OpenEdgeのような構造を可能にする4GLデータベース言語であるが、このステートメントは、2つのデータベースフィールドの割り当てを結合します。 OpenEdgeには、これらの構成要素の多くがあります。上記の例では
// file myinc.i 7 * 14 // source.p assign customer.age = {myinc.i}.
を、私は事実を維持する必要があります:私は、ソースファイルのすべての詳細を維持する必要があるので、私はファイルを解析することができます前に、私は、プリプロセッサ文を展開することはできません
customer.age
は7 * 14
の代わりに{myinc.i}
を使用して割り当てられました。
私はこれをacchieveするANTLRを使用できますか私は自分自身のパーサーを作成する必要がありますか?
UPDATE:
私はそれから実行ファイルを生成するのではなく、コード分析のためにしないように、このパーサを必要とします。これは、インクルードが使用されたという事実を含むためにASTを必要とする理由です。
質問を更新しました。私はあなたが言っていることを得る。私が見ている特定の問題は、私がASTでプリプロセッサの構造を保持する必要があるという事実です。あなたはその問題について詳しく説明できますか? –
あまり詳しく書いてはいません:文法の中で '{myinc.i} 'を' 7 * 14'に置き換えないと(あなたの文法のカスタムコードで)、 '{myinc.i}'あなたの解析木(またはAST)にそのまま残ります。 –
出力ASTを補強するために使用できる拡張されたすべてのコンポーネントの位置を持つメタストリームを作成するプリプロセッサを持つというアイデアはどう思いますか?そうすれば、きれいな文法が得られますが、すべての詳細が保持され、ASTにはプリプロセッサパラメータのコードパラメータ(クエリの一部を含むパラメータを含むことができます)があります。アドバイスはありますか? –