antlr3 の使用を開始したばかりで、.g 文法の AST 出力をシリアル化しようとしています。
ありがとう、
レザン
2 に答える
Vladimir が指摘したように、シリアル化機能が組み込まれたカスタム AST ノード クラスを使用できます。ツリー アダプターを使用して、必要な種類のノードを作成することもできます。
逆シリアル化ではなく、シリアル化のみが必要な場合は、おそらく次のようにすることができます。
ast.toStringTree()
上記により、LISP のようなツリー構造が得られます。シリアル化を行う簡単な方法は、カスタム AST ノード クラスとオーバーライドされた .xml を組み合わせて使用することtoString()
です。toStringTree()
ノードのtoStringTree
メソッドを使用するため、基本的に、入力したものはすべてシリアル化されますtoString
。その出力を十分かつ有用なものにしてください。設定する必要があります。
パーサーによって生成される CommonTree ノードはシリアライズ可能ではありません。
トークンをシリアル化し、後でトークンの (逆シリアル化された) ストリームを解析するために二次文法を使用することをお勧めします。本 (The Definitive ANTLR Reference) のクイック ツアーのせっかちな章で、Terence Parr はまさにこのシナリオを示しています。ただし、シリアル化はありませんが、トークンは単なるテキストであるため、シリアル化は簡単です。
また、 Tree クラスを独自のものに置き換えることができることも理解しています。
options {
ASTLabelType = MyOwnTreeClass;
}
しかし、私はそれを試していません。