Castle: The best Real-Time/Embedded/HighTech language EVER. Attempt 2
修訂 | 9788baa79d25faf1f1cce412cd93205ef8697453 (tree) |
---|---|
時間 | 2022-01-29 07:37:20 |
作者 | Albert Mietus < albert AT mietus DOT nl > |
Commiter | Albert Mietus < albert AT mietus DOT nl > |
Even more AST-2-XML serialization
@@ -68,10 +68,13 @@ | ||
68 | 68 | for elm in ast.value: |
69 | 69 | self._ast2xml(elm, seq) |
70 | 70 | |
71 | + | |
72 | + def Rule2xml(self, ast, parent) ->None: | |
73 | + rule = ET.SubElement(parent, 'Rule', name=ast.name.name) | |
74 | + for elm in ast.expr: | |
75 | + self._ast2xml(elm, rule) | |
76 | + | |
71 | 77 | ############# |
72 | - def Rule2xml(self, ast, parent) ->None: ... | |
73 | - | |
74 | - | |
75 | 78 | def Rules2xml(self, ast, parent) ->None: ... |
76 | 79 | def Setting2xml(self, ast, parent) ->None: ... |
77 | 80 | def Settings2xml(self, ast, parent) ->None: ... |
@@ -23,18 +23,22 @@ | ||
23 | 23 | logger.debug(f'XXX2 tag={tag}:: attrib={attrib}, value={value}') |
24 | 24 | assert found.attrib[attrib] == value |
25 | 25 | |
26 | + | |
26 | 27 | def test_ID(xml_serialize): |
27 | 28 | txt = xml_serialize(peg.ID(name='demo_ID')) |
28 | 29 | assert_xml_Element(txt, tag='ID', name='demo_ID') |
29 | 30 | |
31 | + | |
30 | 32 | def test_StrTerm(xml_serialize): |
31 | 33 | txt = xml_serialize(peg.StrTerm(value='demo string')) |
32 | 34 | assert_xml_Element(txt, tag='StrTerm', value='demo string') |
33 | 35 | |
36 | + | |
34 | 37 | def test_RegExpTerm(xml_serialize): |
35 | 38 | txt = xml_serialize(peg.RegExpTerm(value='demo RegExp')) |
36 | 39 | assert_xml_Element(txt, tag='RegExpTerm', value='demo RegExp') |
37 | 40 | |
41 | + | |
38 | 42 | def test_Sequence_1(xml_serialize): |
39 | 43 | e1 = peg.ID(name='ID_1') |
40 | 44 | txt= xml_serialize(peg.Sequence(value=[e1])) |
@@ -42,7 +46,8 @@ | ||
42 | 46 | assert_xml_Element(txt, tag='Sequence') |
43 | 47 | assert_xml_Element(txt, tag='.//ID', name='ID_1') |
44 | 48 | |
45 | -def test_Sequence_1(xml_serialize): | |
49 | + | |
50 | +def test_Sequence_3(xml_serialize): | |
46 | 51 | n1, v2, v3 = 'ID_1', 'str_2', 'regexp_3' |
47 | 52 | e1 = peg.ID(name=n1) |
48 | 53 | e2 = peg.StrTerm(value=v2) |
@@ -56,3 +61,31 @@ | ||
56 | 61 | assert_xml_Element(txt, tag='.//StrTerm', value=v2) |
57 | 62 | assert_xml_Element(txt, tag='.//RegExpTerm', value=v3) |
58 | 63 | |
64 | + | |
65 | +def test_Rule_1ID(xml_serialize): | |
66 | + rule_name, xref = "RuleName", "cross_ref" | |
67 | + name = peg.ID(name=rule_name) | |
68 | + expr = peg.Sequence(value=[peg.ID(name=xref)]) | |
69 | + | |
70 | + txt = xml_serialize(peg.Rule(name=name, expr=expr)) | |
71 | + logger.debug(f'XML:: {txt}') | |
72 | + | |
73 | + assert_xml_Element(txt, tag='Rule', name=rule_name) | |
74 | + assert_xml_Element(txt, tag='.//ID', name=xref) | |
75 | + | |
76 | + | |
77 | +def test_Rule_Sequence(xml_serialize): | |
78 | + rule_name = "RuleName" | |
79 | + name = peg.ID(name=rule_name) | |
80 | + | |
81 | + n1, v2, v3 = 'ID_1', 'str_2', 'regexp_3' | |
82 | + e1 = peg.ID(name=n1) | |
83 | + e2 = peg.StrTerm(value=v2) | |
84 | + e3 = peg.RegExpTerm(value=v3) | |
85 | + | |
86 | + expr = peg.Sequence(value=[e1, e2, e3]) | |
87 | + | |
88 | + txt = xml_serialize(peg.Rule(name=name, expr=expr)) | |
89 | + logger.debug(f'XML:: {txt}') | |
90 | + | |
91 | + assert_xml_Element(txt, tag='Rule', name=rule_name) |