0

我有一个解析 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 运行时的文档。

4

1 回答 1

1

通常,您想要在上述之后/之后做的是从 Lexer 的输出创建一个 TokenStream 并将这些令牌提供给您的 Parser。顺便说一句,您作为词法分析器的输入提供的 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()
于 2013-05-10T16:24:11.877 回答