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 运行时以及从语法文件生成的文件将接受单个文件名作为参数,并读取和解析语法规则。
要扩展基本功能,还应扩展默认侦听器,以处理运行时遇到的令牌的相关事件。