gpt4 book ai didi

python - 使用 ANTLR 在 Python 中解析时如何获取 AST 树而不是列表?

转载 作者:行者123 更新时间:2023-11-30 23:37:45 27 4
gpt4 key购买 nike

我得到简单的antlr3语法MicroXpath并为 Python 构建词法分析器和解析器。

然后我写了一个简单的测试代码:

import antlr3
from XPathLexer import XPathLexer
from XPathParser import XPathParser

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

input = 'descendant::name[class/name[test="x"]="File"]'
char_stream = antlr3.ANTLRStringStream(input)
lexer = XPathLexer(char_stream)
tokens = antlr3.CommonTokenStream(lexer)
parser = XPathParser(tokens)
tree = parser.xPath().tree

print_level_order(tree, 0)

结果:

None
descendant
:
name
[
class
/
name
[
test
=
"x"
]
=
"File"
]

树在哪里?这是一个线性列表!我究竟做错了什么?或者使用ANTLR无法构建树?

最佳答案

仅将 output=AST; 添加到 options{...} 是不够的:您必须告诉 ANTLR 哪些节点/ token 要从AST(如果有),以及您想要将哪些节点/标记作为(子)树的根。正如您已经观察到的,不这样做会导致树扁平。

查看此问答,了解如何在树中创建层次结构:How to output the AST built using ANTLR?

关于python - 使用 ANTLR 在 Python 中解析时如何获取 AST 树而不是列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15206110/

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