Castle: The best Real-Time/Embedded/HighTech language EVER. Attempt 2
Revisión | 0bffc2fb7d81d2a392dba7eb9f3345dbbea80027 (tree) |
---|---|
Tiempo | 2022-02-13 06:26:22 |
Autor | Albert Mietus < albert AT mietus DOT nl > |
Commiter | Albert Mietus < albert AT mietus DOT nl > |
AST-2XML:: AndPredicate, NotPredicate added. Bit refactoring
@@ -46,6 +46,7 @@ | ||
46 | 46 | #NO_VISITOR_NEEDED: Group2xml ## Pure Abstract |
47 | 47 | #NO_VISITOR_NEEDED: Markers2xml ## Pure Abstract |
48 | 48 | #NO_VISITOR_NEEDED: Quantity2xml ## Pure Abstract |
49 | +#NO_VISITOR_NEEDED: EOF2xml ## Not a real token | |
49 | 50 | |
50 | 51 | |
51 | 52 | def _MixIn_value_attribute2xml(self, ast, parent, cls_name): |
@@ -72,20 +73,29 @@ | ||
72 | 73 | logger.debug(f'Rules2xml type(child)={type(child)}') |
73 | 74 | self._ast2xml(child, parent=parent) |
74 | 75 | |
75 | - def _quantity_op(self, ast, parent, tagName) -> None: | |
76 | + def _quantity_op2xml(self, ast, parent, tagName) -> None: | |
76 | 77 | g = ET.SubElement(parent, tagName) |
77 | 78 | self._ast2xml(ast.expr, g) |
78 | 79 | |
79 | - def UnorderedGroup2xml(self, ast, parent): self._quantity_op(ast, parent, 'UnorderedGroup') | |
80 | - def Optional2xml(self, ast, parent): self._quantity_op(ast, parent, 'Optional') | |
81 | - def ZeroOrMore2xml(self, ast, parent): self._quantity_op(ast, parent, 'ZeroOrMore') | |
82 | - def OneOrMore2xml(self, ast, parent): self._quantity_op(ast, parent, 'OneOrMore') | |
80 | + def UnorderedGroup2xml(self, ast, parent): self._quantity_op2xml(ast, parent, 'UnorderedGroup') | |
81 | + def Optional2xml(self, ast, parent): self._quantity_op2xml(ast, parent, 'Optional') | |
82 | + def ZeroOrMore2xml(self, ast, parent): self._quantity_op2xml(ast, parent, 'ZeroOrMore') | |
83 | + def OneOrMore2xml(self, ast, parent): self._quantity_op2xml(ast, parent, 'OneOrMore') | |
84 | + | |
83 | 85 | |
84 | 86 | def OrderedChoice2xml(self, ast, parent) ->None: |
85 | 87 | oc = ET.SubElement(parent, 'OrderedChoice') |
86 | 88 | for c in ast: |
87 | 89 | self._ast2xml(c,oc) |
88 | 90 | |
91 | + def _Predicate2xml(self, ast, parent, tagName) ->None: | |
92 | + logger.debug(f"_Predicate2xml.{tagName}:: expr: {ast.expr}:{type(ast.expr).__name__}") | |
93 | + predicate = ET.SubElement(parent, tagName) | |
94 | + self._ast2xml(ast.expr, predicate) | |
95 | + | |
96 | + def AndPredicate2xml(self, ast, parent): self._Predicate2xml(ast, parent,'AndPredicate') | |
97 | + def NotPredicate2xml(self, ast, parent): self._Predicate2xml(ast, parent,'NotPredicate') | |
98 | + | |
89 | 99 | ############# |
90 | 100 | |
91 | 101 | ## def Setting2xml(self, ast, parent) ->None: |
@@ -98,7 +108,7 @@ | ||
98 | 108 | |
99 | 109 | |
100 | 110 | |
101 | -# def AndPredicate2xml(self, ast, parent) ->None: ... | |
111 | + | |
102 | 112 | # def NotPredicate2xml(self, ast, parent) ->None: ... |
103 | 113 | |
104 | -# def EOF2xml(self, ast, parent) ->None: pass # Needed | |
114 | + |
@@ -110,3 +110,11 @@ | ||
110 | 110 | |
111 | 111 | assert_xml_Element(txt, tag='OrderedChoice', child_count=2) |
112 | 112 | |
113 | +def verify_Predicate(xml_serialize, pegPredicate, tagName): | |
114 | + txt= xml_serialize(pegPredicate(expr=peg.ID(name="PartOfSomePredicate"))) | |
115 | + logger.debug(f'XML:: {txt}') | |
116 | + | |
117 | + assert_xml_Element(txt, tag=tagName, child_count=1) | |
118 | + | |
119 | +def test_AndPredicate(xml_serialize): verify_Predicate(xml_serialize, peg.AndPredicate, 'AndPredicate') | |
120 | +def test_NotPredicate(xml_serialize): verify_Predicate(xml_serialize, peg.NotPredicate, 'NotPredicate') |