Я работаю над средством форматирования кода в Java для своей собственной ANTLR грамматики и теперь хочу работать над форматированием одного специального правила.
Я хочу как-то перебрать все экземпляров одного из моих правил синтаксического анализа (конкретнее if_stmt
).
Я работаю с ANTLR4 и средой исполнения Java.
Это самая маленькая версия моей грамматики для этой проблемы:
stmt_block
:
EOF
| stmt_list EOF
;
stmt_list
:
stmt
| stmt_list stmt
;
stmt
:
if_stmt
| RETURN SEMICOLON NEWLINE?
;
if_stmt
:
IF BRACKET_OPEN expr BRACKET_CLOSED CBRACKET_OPEN stmt_list CBRACKET_CLOSED
;
expr
:
TRUE
;
Так выглядит моя функция форматирования
private String formatCode(String input)
{
// Parse the input
MyLexer lex = new MyLexer(new CaseChangingCharStream(
CharStreams.fromString(input), true));
CommonTokenStream tokens = new CommonTokenStream(lex);
tokens.fill();
MyParser pars = new MyParser(tokens);
Stmt_blockContext stmt_blockContext = pars.stmt_block();
stmt_blockContext.children.forEach(parseTree->{
//Iterate over the parseTree to get all if_stmtContext's and modify them
});
// Then return the modified contexts text
return stmt_blockContext.getText();
}
Вот как я дошел до этого, и я знаю, что прошу кого-то просто решить мою проблему, но я застрял в этом и понятия не имею, как поступить.
Любая помощь приветствуется!