使用python目标在ANTLR中构建一个解析树

时间:2013-05-10 16:02:48

标签: python python-2.7 antlr antlr3

我有解析SQL脚本的语法。语法的词法分析器可以正常使用以下代码:

    with open("/path/to/sql/script.sql") as f:
    query = f.read().upper()
    tokenStream = antlr3.StringStream(query)
    lexer = MyLexer(tokenStream)
    for token in lexer:
        # process the token

    pass

我不知道如何解析我有解析SQL脚本的语法。语法的词法分析器可以正常使用以下代码。在ANLTR的网站上没有太多关于Python运行时的文档。

1 个答案:

答案 0 :(得分:1)

通常,您希望在上述之后执行的操作是从Lexer的输出创建TokenStream并将这些令牌提供给您的Parser。 BTW你作为词法分析器的输入提供的StringStream实际上并不是一个令牌流,尽管你提供了它的名字。

也许尝试类似的事情:

...
lexer = MyLexer(tokenStream)
// Get a token stream
tokens = CommonTokenSream(lexer)
// Feed it to the parser   (assumes you named the Grammar/Parser  "MyParser")
parser = MyParser(tokens)

// Invoke the topmost rule (or some other rule) of the grammar, to start
// the parsing process
parser.SomeRule()