ANTLR:使用Python生成解析树

2024-05-31 09:52:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我是ANTLR的新手,目前正在尝试将antlr3.1.3与Python一起使用。我已经成功地为Python安装了ANTLR运行时。但我不知道如何打印出特定输入的解析树。在

语法

grammar Expr;

options {
    language=Python;
    output=AST;
}

expr    :   atom (op atom)* NEWLINE ;
op  :   '+' | '-';
atom    :   ID | INT;
ID  :   ('a'..'z'|'A'..'Z')+ ;  
INT     :   ('0'..'9')+ ;
NEWLINE :   '\r'? '\n' ;
WS  :   (' '|'\t'|'\n'|'\r')+ {self.skip()} ;

Python代码

^{pr2}$

虽然代码执行时我想要的是解析树。代码将只打印“3+5”。在

你能告诉我如何修改代码来打印解析树吗?在


Tags: 代码idoutputnewline语法astlanguageint
1条回答
网友
1楼 · 发布于 2024-05-31 09:52:53

几周前,为了调试的目的,我想打印出ANTLR-AST(不是解析树,但这取决于如何实现语法….)。在

你可以做一些简单的事情:

def print_tree(tree, lev):
    print (" " * lev) + "` " + str(tree)
    for c in tree.getChildren():
        print_tree(c, lev + 1)

print_tree(parser.expr().tree, 0)

注:我直接用SO编写了代码,所以还没有经过测试

相关问题 更多 >