使用antlr3生成的Python语法分析器绘制语法树 我尝试用Python运行时的ANTLR3生成的解析器解析C++源文件。我需要对语法进行一些更改,我想使用生成的解析器绘制语法树,以验证我的更改是否正确,我该怎么做

使用antlr3生成的Python语法分析器绘制语法树 我尝试用Python运行时的ANTLR3生成的解析器解析C++源文件。我需要对语法进行一些更改,我想使用生成的解析器绘制语法树,以验证我的更改是否正确,我该怎么做,python,antlr,Python,Antlr,简单示例,语法树,我需要: int main (){ int a = 4; return a; } PS:对不起我的英语。据我所知,不存在使用Python库/应用程序从ANTLR 3解析的输出中绘制AST的方法 下面是一种在控制台上打印AST的级别顺序遍历的方法,假设您的语法名为Cpp.g: 该片段来自:Use您需要澄清一下。您在解析什么:某种语言使用ANTLR3为Python运行时生成的解析器?或者您正在使用ANTLR3/ANTLR4生成的解析器解析Python源文件?请张贴你的语法

简单示例,语法树,我需要:

int main (){
  int a = 4;
  return a;
}

PS:对不起我的英语。

据我所知,不存在使用Python库/应用程序从ANTLR 3解析的输出中绘制AST的方法

下面是一种在控制台上打印AST的级别顺序遍历的方法,假设您的语法名为Cpp.g:


该片段来自:

Use您需要澄清一下。您在解析什么:某种语言使用ANTLR3为Python运行时生成的解析器?或者您正在使用ANTLR3/ANTLR4生成的解析器解析Python源文件?请张贴你的语法和你用来测试东西的任何源文件。正如您现在的问题一样,它可能会关闭并删除,就像您之前的问题一样。如果用英语表达这一点太难,而葡萄牙语恰好是你的第一语言,你可以问你的问题。谢谢你的评论。我纠正了这个问题,希望现在它变得更清楚了。谢谢你的链接,但我的第一语言是阿尔巴尼亚语。谢谢,这很有帮助。但我使用parser.translation\u单元代替parser.parse,因为parser.parse没有定义。
#!/usr/bin/env python

import antlr3
from antlr3 import *
from antlr3.tree import *
from CppLexer import *
from CppParser import *

def print_level_order(tree, indent):
  print '{0}{1}'.format('   '*indent, tree.text)
  for child in tree.getChildren():
    print_level_order(child, indent+1)

input = """
  int main (){
    int a = 4;
    return a;
  }
"""
char_stream = antlr3.ANTLRStringStream(input)
lexer = CppLexer(char_stream)
tokens = antlr3.CommonTokenStream(lexer)
parser = CppParser(tokens)
tree = parser.parse().tree 
print_level_order(tree, 0)