我有解析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运行时的文档。
答案 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()