Python 解析器設定

在使用 ANTLR.jar 執行語法 .g4 檔案後,你應該生成許多檔案,例如:

1.yourGrammarNameListener.py
2.yourGrammarNameParser.py
3.yourGrammarName.tokens
...

要在 python 專案中使用這些,請在工作區中包含 Python 執行時,以便你正在開發的任何應用程式都可以訪問 ANTLR 庫。這可以通過將執行時解壓縮到當前專案資料夾或將其在 IDE 中匯入專案依賴項來完成。

#main.py
import yourGrammarNameParser
import sys

#main method and entry point of application

def main(argv):
    """Main method calling a single debugger for an input script"""
    parser = yourGrammarNameParser
    parser.parse(argv)

if __name__ == '__main__':
    main(sys.argv) 

此設定包括你的解析器並接受來自命令列的輸入,以允許處理作為引數傳遞的檔案。

#yourGrammarNameParser.py
from yourGrammarNameLexer import yourGrammarNameLexer
from yourGrammarNameListener import yourGrammarNameListener
from yourGrammarNameParser import yourGrammarNameParser
from antlr4 import *
import sys

class yourGrammarNameParser(object):
    """
    Debugger class - accepts a single input script and processes
    all subsequent requirements
    """
def __init__(self): # this method creates the class object.
    pass
        
        
#function used to parse an input file
def parse(argv):
    if len(sys.argv) > 1:
        input = FileStream(argv[1]) #read the first argument as a filestream
        lexer = yourGrammarNameLexer(input) #call your lexer
        stream = CommonTokenStream(lexer)
        parser = yourGrammarNameParser(stream)
        tree = parser.program() #start from the parser rule, however should be changed to your entry rule for your specific grammar.
        printer = yourGrammarNameListener(tree,input)
        walker = ParseTreeWalker()
        walker.walk(printer, tree)
    else:
        print('Error : Expected a valid file')

這些檔案與 ANTLR 執行時以及從語法檔案生成的檔案將接受單個檔名作為引數,並讀取和解析語法規則。

要擴充套件基本功能,還應擴充套件預設偵聽器,以處理執行時遇到的令牌的相關事件。