2013-05-10 49 views
0

我有一個解析SQL腳本的語法。對於語法詞法正常工作與下面的代碼:用Python目標在ANTLR中構建一個分析樹

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

通常,在完成上述操作之後,您想要從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()