gpt4 book ai didi

python - ANTLR4 和 Python 目标

转载 作者:太空狗 更新时间:2023-10-29 20:24:06 27 4
gpt4 key购买 nike

我在使用 ANTLR4 中的 Python 目标时遇到问题。可用的示例似乎很少,转到相应的 Java 代码似乎也不相关。

我正在使用标准的 Hello.g4 语法:

// Define a grammar called Hello
grammar Hello;
r : 'hello' ID ; // match keyword hello followed by an identifier
ID : [a-z]+ ; // match lower-case identifiers
WS : [ \t\r\n]+ -> skip ; // skip spaces, tabs, newlines

示例(从标准的 Hello.g4 示例构建):

input_ = antlr4.FileStream(_FILENAME)
lexer = HelloLexer.HelloLexer(input_)
stream = antlr4.CommonTokenStream(lexer)
parser = HelloParser.HelloParser(stream)

rule_name = 'r'
tree = getattr(parser, rule_name)()

我也写了一个监听器。为了断言/验证这是正确的,我将在这里重复:

class HelloListener(antlr4.ParseTreeListener):
def enterR(self, ctx):
print("enterR")

def exitR(self, ctx):
print("exitR")

def enterId(self, ctx):
print("enterId")

def exitId(self, ctx):
print("exitId")

所以,首先,我不能保证我给它的字符串是有效的,因为我没有得到任何屏幕输出。我如何从 tree 对象中判断是否匹配了任何内容?如何提取匹配的规则/ token ?

如果可能的话,一个 Python 示例会很棒。

最佳答案

我听说你现在遇到了同样的问题。 v4 的 Python 文档毫无用处,而 v3 的差异很大,无法使用。我正在考虑切换回 Java 来实现我的东西。

关于您的代码:我认为您自己的自定义监听器必须继承自生成的 HelloListener。你可以在那里打印。

同时尝试解析无效输入以查看解析器是否启动。不过,我不确定 getattr(parser, rule_name)() 的行。我遵循了 Antlr4 Python 目标文档(不幸的是非常短)中的步骤:https://theantlrguy.atlassian.net/wiki/display/ANTLR4/Python+Target

您还可以在那里找到一些关于监听器的文档。希望对您有所帮助。

关于python - ANTLR4 和 Python 目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30248995/

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