import sys from antlr4 import * from HelloLexer import HelloLexer from HelloParser import HelloParser from HelloListener import HelloListener from TreesUser import TreesUser # contains Marina's PrettyPrint() def main(argv): if len(argv) == 1: inpstream = StdinStream() else: inpname = argv[1] inpstream = FileStream(inpname) # The lexer analyses the characters on inpstream and produces tokens lexer = HelloLexer(inpstream) # on the token stream (belonging to a standard ANTLR class) tokstream = CommonTokenStream(lexer) # The parser produces an abstract syntax tree parser = HelloParser(tokstream) # When we execute the parse, we need to give it the starting rule of our grammar, listener = HelloListener() # which in our case is 'greeting' (as defined in hello.g4) tree = parser.greeting() tree = parser.bye() # traditional Lisp-style parse tree print(TreesUser.toStringTree(tree, None, parser)) # pretty-print the parse tree print(TreesUser.PrettyPrint(tree, None, parser)) if __name__ == '__main__': main(sys.argv)