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 執行時以及從語法檔案生成的檔案將接受單個檔名作為引數,並讀取和解析語法規則。
要擴充套件基本功能,還應擴充套件預設偵聽器,以處理執行時遇到的令牌的相關事件。