gpt4 book ai didi

python - ANTLR : Generating Parse Trees using Python

转载 作者:太空宇宙 更新时间:2023-11-03 18:34:56 28 4
gpt4 key购买 nike

我是 ANTLR 新手,目前我正在尝试将 ANTLR 3.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代码

import sys
import antlr3
from antlr3 import *
from ExprLexer import ExprLexer
from ExprParser import ExprParser

# test the parser with an input
char_stream = antlr3.ANTLRStringStream('3+5\n')
lexer = ExprLexer(char_stream)
tokens = antlr3.CommonTokenStream(lexer)
parser = ExprParser(tokens)

# print the parse tree
t = parser.expr().tree
print t.toStringTree()

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

您能告诉我如何修改代码以打印解析树吗?

最佳答案

几周前,我想打印 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 编写了代码,因此未经测试

关于python - ANTLR : Generating Parse Trees using Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21772535/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com