使用antlr3为Python生成解析器绘制语法树

时间:2014-05-14 15:26:59

标签: python antlr

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

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

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

PS:对不起我的英语。

1 个答案:

答案 0 :(得分:0)

据我所知,没有办法使用Python库/ app从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 parsing MismatchedTokenException