• R/O
  • SSH

Commit

Tags
No Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

Castle: The best Real-Time/Embedded/HighTech language EVER. Attempt 2


Commit MetaInfo

Revisión95438985f9d0a593e1ba50b2508b76d97a87511f (tree)
Tiempo2022-02-01 05:30:43
AutorAlbert Mietus < albert AT mietus DOT nl >
CommiterAlbert Mietus < albert AT mietus DOT nl >

Log Message

AST-2-XML serialization: after rewrite(Mixin_Children...): it works with ID-types IDs

Cambiar Resumen

Diferencia incremental

diff -r 0f02fa2da3fc -r 95438985f9d0 castle/ast/peg.py
--- a/castle/ast/peg.py Sun Jan 30 18:08:35 2022 +0100
+++ b/castle/ast/peg.py Mon Jan 31 21:30:43 2022 +0100
@@ -85,7 +85,7 @@
8585 logger.debug(f'{self._typeName(self)}: name={self._valType(name)}, expr={self._valType(expr)}')
8686 if expr:
8787 logger.debug("\t" + "; ".join(f'{c}:{type(c)}' for c in expr))
88- ID.validate_or_raise(name)
88+ if not isinstance(name, ID): raise TypeError(f'Rule-name {name} is not of type ID')
8989 super().__init__(**kwargs)
9090 self.name = name
9191 self.expr = expr
diff -r 0f02fa2da3fc -r 95438985f9d0 castle/ast/serialization.py
--- a/castle/ast/serialization.py Sun Jan 30 18:08:35 2022 +0100
+++ b/castle/ast/serialization.py Mon Jan 31 21:30:43 2022 +0100
@@ -69,8 +69,8 @@
6969 self._ast2xml(elm, parent=seq)
7070
7171 def Rule2xml(self, ast, parent) ->None:
72- logger.debug(f"Rule2xml:: ast:Rule.name={ast.name}")
73- rule = ET.SubElement(parent, 'Rule', name=ast.name)
72+ logger.debug(f"Rule2xml:: ast:Rule.name={ast.name.name}")
73+ rule = ET.SubElement(parent, 'Rule', name=ast.name.name)
7474 self._ast2xml(ast.expr, parent=rule)
7575
7676 def Rules2xml(self, ast, parent) ->None:
diff -r 0f02fa2da3fc -r 95438985f9d0 pytst/ast/XML_serialization/test_1_simple.py
--- a/pytst/ast/XML_serialization/test_1_simple.py Sun Jan 30 18:08:35 2022 +0100
+++ b/pytst/ast/XML_serialization/test_1_simple.py Mon Jan 31 21:30:43 2022 +0100
@@ -79,7 +79,7 @@
7979 xref = "cross_ref"
8080 expr = peg.Sequence(value=[peg.ID(name=xref)])
8181
82- txt = xml_serialize(peg.Rule(name=rule_name, expr=expr))
82+ txt = xml_serialize(peg.Rule(name=peg.ID(name=rule_name), expr=expr))
8383 logger.debug(f'XML:: {txt}')
8484
8585 assert_xml_Element(txt, tag='Rule', name=rule_name)
@@ -90,7 +90,7 @@
9090 rule_name = "Rule_Sequence"
9191 seq = Sequence()
9292
93- txt = xml_serialize(peg.Rule(name=rule_name, expr=seq.seq))
93+ txt = xml_serialize(peg.Rule(name=peg.ID(name=rule_name), expr=seq.seq))
9494 logger.debug(f'XML:: {txt}')
9595
9696 assert_xml_Element(txt, tag='Rule', name=rule_name)
@@ -98,8 +98,8 @@
9898
9999
100100 def test_Rules(xml_serialize):
101- r1 = peg.Rule(name='rule_1', expr=peg.Sequence(value=[peg.ID(name='id1')]))
102- r2 = peg.Rule(name='rule_2', expr=peg.Sequence(value=[peg.StrTerm(value='str2')]))
101+ r1 = peg.Rule(name=peg.ID(name='rule_1'), expr=peg.Sequence(value=[peg.ID(name='id1')]))
102+ r2 = peg.Rule(name=peg.ID(name='rule_2'), expr=peg.Sequence(value=[peg.StrTerm(value='str2')]))
103103
104104 txt = xml_serialize(peg.Rules(children=[r1,r2]))
105105 logger.debug(f'XML:: {txt}')
diff -r 0f02fa2da3fc -r 95438985f9d0 pytst/ast/test_1_Rules.py
--- a/pytst/ast/test_1_Rules.py Sun Jan 30 18:08:35 2022 +0100
+++ b/pytst/ast/test_1_Rules.py Mon Jan 31 21:30:43 2022 +0100
@@ -1,19 +1,18 @@
11 import pytest
22
3-from castle.ast.peg import Rule
4-
5-@pytest.mark.skip("This test is wrong: (1) An ID is not string, (2) a int is not an Expression")
6-def test_a_ID():
7- a_name, a_val = 'aName', 42
8- s=Rule(name=a_name, expr=a_val)
9- assert s.name == a_name, "Remember the ID"
10- assert s.expr == a_val, "Remember the expr"
3+from castle.ast import peg
114
125
13-def test_needID():
14- with pytest.raises(ValueError):
15- Rule(name=42) # The name should be an ID, or string
16- with pytest.raises(ValueError):
17- Rule(name='a b') # "A space in not allowed in an ID
6+def test_rulename_is_an_ID():
7+ anID = peg.ID(name="aName")
8+ s = peg.Rule(name=anID, expr=None)
9+ assert s.name == anID
10+
11+def test_rulename_isnot_string():
12+ with pytest.raises(TypeError):
13+ peg.Rule(name="strName", expr=None)
1814
1915
16+#XXX ToBeDone: more tests
17+
18+