0
我有一個用antlr2語法編寫的語法文件,需要幫助瞭解如何重寫antlr4語法中的一些解析器規則。我知道antlr4消除了構建AST的必要性,所以我不確定如何處理AST動作翻譯。 ANTLR Tree Construction解釋了一些語法和如何使用#構造,但我仍然不確定如何閱讀這些規則並重新編寫它們。重寫AST動作翻譯爲ANTLR4
temp_root :
temp { #temp_root = #([ROOT, "root"], #temp_root); } EOF;
temp :
c:temp_content
{ #temp = #(#([FUNCTION_CALL, "template"], #template), c);
reparent((MyAST)#temp, MyAST)#c); };
temp_content :
(foo | bar);
foo :
{
StringBuilder result = new StringBuilder("");
}
: (c:FOO! { result.append(c.getText()); })+
{ #foo = #([TEMPLATE_STRING_LITERAL, result.toString()], #foo); };
bar :
BEGIN_BAR! expr END_BAR!
exception
catch [Exception x] {
bar_AST = handleException(x);
};
每個「#」表示節點中應該有一個「子樹」嗎? – Raven