diff --git a/parser/parser-fplo/FploInputParser.py b/parser/parser-fplo/FploInputParser.py index ed280a174c14ff9d92517350344996a500044bd2..11e02760cfa60d64190788739f5a2778f2a07122 100755 --- a/parser/parser-fplo/FploInputParser.py +++ b/parser/parser-fplo/FploInputParser.py @@ -17,7 +17,10 @@ import sys import os import logging import json +import FploCommon as FploC from nomadcore.match_highlighter import ANSI +from nomadcore.parser_backend import JsonParseEventsWriterBackend +from nomadcore.caching_backend import CachingLevel, ActiveBackend LOGGER = logging.getLogger(__name__) @@ -253,6 +256,16 @@ class AST_node(dict): if isinstance(child, AST_node): child.declaration_nomadmetainfo(output_file, child_namespace) + def data_nomadmetainfo(self, backend, namespace): + if self.name is not None: + child_namespace = namespace + '.' + self.name + else: + child_namespace = namespace + for child in self.child: + if isinstance(child, AST_node): + child.data_nomadmetainfo(backend, child_namespace) + + class AST_block(AST_node): """generic block (sequence of statements) in AST""" @@ -284,6 +297,11 @@ class AST_root(AST_block): '}\n' ) + def data_nomadmetainfo(self, backend, namespace): + gIndex = backend.openSection(namespace) + AST_node.data_nomadmetainfo(self, backend, namespace) + backend.closeSection(namespace, gIndex) + class AST_section(AST_block): """section block (sequence of statements) in AST""" @@ -769,6 +787,13 @@ if __name__ == "__main__": help='write nomadmetainfo to stdout') ARGPARSER.add_argument('fplo_input', type=str, nargs='+', help='FPLO input files') ARGS = ARGPARSER.parse_args() + + cachingLevelForMetaName = {} + for name in FploC.META_INFO.infoKinds: + # set all temporaries to caching-only + if name.startswith('x_fplo_t_'): + cachingLevelForMetaName[name] = CachingLevel.Cache + if ARGS.annotate: ANNOTATEFILE = sys.stderr else: @@ -790,3 +815,22 @@ if __name__ == "__main__": sys.stderr.flush() if ARGS.autogenerate_metainfo: parser.AST.declaration_nomadmetainfo(sys.stdout, 'x_fplo_in') + else: + outF = sys.stdout + jsonBackend = JsonParseEventsWriterBackend(FploC.META_INFO, outF) + sys.stderr.write('WTF2:' + str(FploC.META_INFO) + '\n') + backend = ActiveBackend.activeBackend( + metaInfoEnv = FploC.META_INFO, + cachingLevelForMetaName = cachingLevelForMetaName, + defaultDataCachingLevel = CachingLevel.ForwardAndCache, + defaultSectionCachingLevel = CachingLevel.Forward, + superBackend = jsonBackend) + outF.write("[") + backend.startedParsingSession('file://' + fplo_in, FploC.PARSER_INFO_DEFAULT) + run_gIndex = backend.openSection('section_run') + method_gIndex = backend.openSection('section_method') + parser.AST.data_nomadmetainfo(backend, 'x_fplo_in') + backend.closeSection('section_method', method_gIndex) + backend.closeSection('section_run', run_gIndex) + backend.finishedParsingSession("ParseSuccess", None) + outF.write("]")