diff --git a/parser/parser-fplo/FploInputParser.py b/parser/parser-fplo/FploInputParser.py index fb4f3a7a3126bd976fb483b7424e793e188118db..4baefdee8b9a1e3856d9eb3a2674fa983c84acc5 100755 --- a/parser/parser-fplo/FploInputParser.py +++ b/parser/parser-fplo/FploInputParser.py @@ -647,14 +647,35 @@ class FploInputParser(object): def onEnd_of_file(self): """hook: called at the end of parsing""" - sys.stdout.flush() - sys.stderr.flush() - # sys.stderr.write(self.concrete_statements.indented_dump('')) # json.dumps(self.concrete_statements, sort_keys=True, indent=4, separators=(',', ': '))) - AST = self.concrete_statements.to_AST() - sys.stderr.write('AST:\n') - sys.stderr.flush() - sys.stderr.write(AST.indented_str('')) + self.AST = self.concrete_statements.to_AST() if __name__ == "__main__": - parser = FploInputParser(sys.argv[1], annotateFile=sys.stdout) - parser.parse() + import argparse + ARGPARSER = argparse.ArgumentParser(description='NOMAD parser for FPLO input') + ARGPARSER.add_argument('--annotate', action='store_true', default=False, + help='write annotated/tokenized input files to stderr') + ARGPARSER.add_argument('--dump_concrete', action='store_true', default=False, + help='write annotated/tokenized input files to stderr') + ARGPARSER.add_argument('--dump_ast', action='store_true', default=False, + help='write annotated/tokenized input files to stderr') + ARGPARSER.add_argument('fplo_input', type=str, nargs='+', help='FPLO input files') + ARGS = ARGPARSER.parse_args() + if ARGS.annotate: + ANNOTATEFILE = sys.stderr + else: + ANNOTATEFILE = None + for fplo_in in ARGS.fplo_input: + parser = FploInputParser(fplo_in, annotateFile=ANNOTATEFILE) + parser.parse() + sys.stdout.flush() + sys.stderr.flush() + if ARGS.dump_concrete: + sys.stderr.write('concrete syntax tree:\n') + sys.stderr.write(parser.concrete_statements.indented_dump(' ')) + sys.stdout.flush() + sys.stderr.flush() + if ARGS.dump_ast: + sys.stderr.write('abstract syntax tree:\n') + sys.stderr.write(parser.AST.indented_str(' ')) + sys.stdout.flush() + sys.stderr.flush()