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 运行时以及从语法文件生成的文件将接受单个文件名作为参数,并读取和解析语法规则。

要扩展基本功能,还应扩展默认侦听器,以处理运行时遇到的令牌的相关事件。