2017-10-07 8 views
0

ANTLR4とJavaを使用してコードインデントを作成しています。私は正常にレクサーとパーサーを生成しました。そして、私が使用しているアプローチは、生成された解析ツリーを歩くことです。ANTLRを使用したコードインデント4

ParseTreeWalker mywalker = new ParseTreeWalker(); 
    mywalker.walk(myListener, myTree);  

自動生成* BaseListenerは、以下のようなメソッドを持っている...

@Override public void enterEveryRule(ParserRuleContext ctx) { } 

私はANTLRに非常に新しいです。しかし、私が理解するように、私は* BaseListenerを拡張し、関連するメソッドをオーバーライドし、インデントにコードを書く必要があるので、私の質問は、入力コードファイルをインデントするためにオーバーライドする必要があるメソッドは何ですか?または、私が取るべき別のアプローチがある場合は、私に知らせてください。

ありがとうございます!

答えて

1

なしこの作業にパーサーは必要なく、パーサーが必要なときには有効なコードに限定しています(したがって、構文エラーでコードを再フォーマットすることはできません)。代わりに、レクサーを取り、すべてのトークンを繰り返します。あなたがどこにいるか(ブロック、関数、何でも)とそれに従ったインデントを知るための状態を保つ。

関連する問題