使用ANTLR3生成的解析器绘制Python的语法树

0 投票
1 回答
956 浏览
提问于 2025-04-18 06:33

我想用antlr3生成的解析器来解析C++源文件,运行环境是Python。我需要对语法进行一些修改,然后想用生成的解析器来绘制语法树,以验证我的修改是否正确,我该怎么做呢?

这是我需要的简单示例,语法树如下:

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

PS:抱歉我的英语不好。

1 个回答

0

据我所知,目前没有办法通过Python库或应用程序从ANTLR 3的解析输出中绘制抽象语法树(AST)。

不过,这里有一种方法可以在你的控制台上打印出AST的层级遍历(假设你的语法文件叫做 Cpp.g):

#!/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)

这个代码片段来自于:ANTLR解析中的MismatchedTokenException

撰写回答