From f9e0d3c9ac715d8958fa3934bd302c83f9afd6b5 Mon Sep 17 00:00:00 2001 From: "Micah D. Gale" Date: Mon, 1 Jul 2024 13:28:02 -0500 Subject: [PATCH] Made a simple tally segment parser. --- montepy/data_inputs/tally_segment.py | 4 +- montepy/input_parser/tally_seg_parser.py | 61 ++++++++++++++++++++++++ 2 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 montepy/input_parser/tally_seg_parser.py diff --git a/montepy/data_inputs/tally_segment.py b/montepy/data_inputs/tally_segment.py index 52ce82c5..9a78cea2 100644 --- a/montepy/data_inputs/tally_segment.py +++ b/montepy/data_inputs/tally_segment.py @@ -1,13 +1,13 @@ # Copyright 2024, Battelle Energy Alliance, LLC All Rights Reserved. import montepy from montepy.data_inputs.data_input import DataInputAbstract -from montepy.input_parser.tally_parser import TallyParser +from montepy.input_parser.tally_seg_parser import TallySegmentParser class TallySegment(DataInputAbstract): """ """ - _parser = TallyParser() + _parser = TallySegmentParser() @staticmethod def _class_prefix(): diff --git a/montepy/input_parser/tally_seg_parser.py b/montepy/input_parser/tally_seg_parser.py new file mode 100644 index 00000000..25ae0856 --- /dev/null +++ b/montepy/input_parser/tally_seg_parser.py @@ -0,0 +1,61 @@ +# Copyright 2024, Battelle Energy Alliance, LLC All Rights Reserved. +from montepy.input_parser.data_parser import DataParser +from montepy.input_parser import syntax_node + + +class TallySegmentParser(DataParser): + """ """ + + debugfile = None + + @_("introduction tally_specification") + def tally(self, p): + ret = {} + for key, node in p.introduction.nodes.items(): + ret[key] = node + ret["tally"] = p.tally_specification + return syntax_node.SyntaxNode("data", ret) + + @_( + "tally_numbers", + "tally_numbers end_phrase", + "tally_numbers end_phrase end_phrase", + ) + def tally_specification(self, p): + if hasattr(p, "end_phrase"): + text = p.end_phrase + else: + text = syntax_node.ValueNode(None, str) + + return syntax_node.SyntaxNode( + "tally list", {"tally": p.tally_numbers, "end": text} + ) + + @_("PARTICLE", "PARTICLE padding", "TEXT", "TEXT padding") + def end_phrase(self, p): + """ + A non-zero number with or without padding. + + :returns: a float ValueNode + :rtype: ValueNode + """ + return self._flush_phrase(p, str) + + @_( + "tally_numbers tally_numbers", + "number_sequence", + "tally_numbers padding", + ) + def tally_numbers(self, p): + if hasattr(p, "tally_numbers"): + ret = p.tally_numbers + ret.nodes["right"] += p.padding + return ret + if hasattr(p, "tally_numbers1"): + return syntax_node.SyntaxNode("tally tree", {"left": p[0], "right": p[1]}) + else: + left = syntax_node.PaddingNode(None) + right = syntax_node.PaddingNode(None) + return syntax_node.SyntaxNode( + "tally set", {"left": left, "tally": p[0], "right": right} + )