Castle: The best Real-Time/Embedded/HighTech language EVER. Attempt 2
Revisão | 7754889a9628321d0a8510ec0d8733f4a76363d3 (tree) |
---|---|
Hora | 2022-01-31 01:29:13 |
Autor | Albert Mietus < albert AT mietus DOT nl > |
Commiter | Albert Mietus < albert AT mietus DOT nl > |
(mensagem de log vazia)
@@ -0,0 +1,31 @@ | ||
1 | +default: all | |
2 | + | |
3 | +all: demo test missing | |
4 | + | |
5 | +missing: missing_visitor missing_serialization | |
6 | + | |
7 | +PYTEST_OPTONS=-rxXsfE | |
8 | +pytest test: | |
9 | + pytest ${PYTEST_OPTONS} pytst/ | |
10 | +pytest-s test-s: | |
11 | + pytest ${PYTEST_OPTONS} -s pytst | |
12 | +test-ds test-sd test-d: | |
13 | + pytest ${PYTEST_OPTONS} --log-cli-level=DEBUG -s pytst/ | |
14 | +demo: | |
15 | + pytest -s demos | |
16 | + @echo run other demos by hand | |
17 | + | |
18 | + | |
19 | +missing_visitor: castle/readers/parser/grammar.py | |
20 | + @for R in $(shell grep '^ *def ' $< | awk '{print $$2}' | sed 's/()://') ; do \ | |
21 | + if ! grep -q -E "^ *((def)|(# *NO_VISITOR_NEEDED:)) *visit_$$R" castle/readers/parser/visitor.py > /dev/null ; then\ | |
22 | + echo "Warning: $${R} has no visitor (nor is marked as to need none)" ;\ | |
23 | + fi ;\ | |
24 | + done | |
25 | +QAZ := ${shell grep '^ *class ' castle/ast/peg.py | sed 's/class //g' | sed 's/[:( ].*$$//g' } | |
26 | +missing_serialization: | |
27 | + @for R in ${QAZ} ; do \ | |
28 | + if ! grep -q -E "^ *((def)|(# *NO_VISITOR_NEEDED:)) $${R}2xml" castle/ast/serialization.py > /dev/null ; then\ | |
29 | + echo "Warning: $${R} has no xml-serializer (nor is marked as to need none)" ;\ | |
30 | + fi ;\ | |
31 | + done |
@@ -11,7 +11,7 @@ | ||
11 | 11 | self._parse_tree = parse_tree |
12 | 12 | |
13 | 13 | def __str__(self): # mostly for debugging |
14 | - return str(type(self).__name__) + "\n\t" + "\n\t".join(f'{n}\t{str(v)}:{type(v).__name__}' for n,v in self.__dict__.items() if n[0]!='_') | |
14 | + return '\n__DEBUG__ ' + str(type(self).__name__) + "\n\t" + "\n\t".join(f'{n}\t{str(v)}:{type(v).__name__}' for n,v in self.__dict__.items() if n[0]!='_') | |
15 | 15 | |
16 | 16 | def serialize(self, strategy="XML") -> str: |
17 | 17 | return Serialize(strategy).serialize(self) |
@@ -69,13 +69,14 @@ | ||
69 | 69 | self._ast2xml(elm, parent=seq) |
70 | 70 | |
71 | 71 | def Rule2xml(self, ast, parent) ->None: |
72 | - rule = ET.SubElement(parent, 'Rule', name=ast.name.name) | |
72 | + logger.debug(f"Rule2xml:: ast:Rule.name={ast.name}") | |
73 | + rule = ET.SubElement(parent, 'Rule', name=ast.name) | |
73 | 74 | self._ast2xml(ast.expr, parent=rule) |
74 | 75 | |
75 | 76 | def Rules2xml(self, ast, parent) ->None: |
76 | 77 | logger.debug(f"Rules2xml:: ast[{len(ast)}]") |
77 | 78 | for child in ast: |
78 | - logger.debug(f'Rules2xml child={child}:{type(child)}') | |
79 | + logger.debug(f'Rules2xml type(child)={type(child)}') | |
79 | 80 | self._ast2xml(child, parent=parent) |
80 | 81 | |
81 | 82 | ############# |
@@ -4,12 +4,6 @@ | ||
4 | 4 | |
5 | 5 | from castle.ast import peg, serialization |
6 | 6 | |
7 | -class RuleName: | |
8 | - def __init__(self, rule_name="Rule_Name"): | |
9 | - self.rule_name=rule_name | |
10 | - self.rule= peg.ID(name=rule_name) | |
11 | - def assert_xml_Element(self, txt): | |
12 | - assert_xml_Element(txt, tag='Rule', name=self.rule_name) | |
13 | 7 | |
14 | 8 | class Sequence: |
15 | 9 | def __init__(self): |
@@ -78,11 +72,11 @@ | ||
78 | 72 | |
79 | 73 | |
80 | 74 | def test_Rule_1ID(xml_serialize): |
81 | - rule_name, xref = "RuleName", "cross_ref" | |
82 | - name = peg.ID(name=rule_name) | |
75 | + rule_name = "RuleName" | |
76 | + xref = "cross_ref" | |
83 | 77 | expr = peg.Sequence(value=[peg.ID(name=xref)]) |
84 | 78 | |
85 | - txt = xml_serialize(peg.Rule(name=name, expr=expr)) | |
79 | + txt = xml_serialize(peg.Rule(name=rule_name, expr=expr)) | |
86 | 80 | logger.debug(f'XML:: {txt}') |
87 | 81 | |
88 | 82 | assert_xml_Element(txt, tag='Rule', name=rule_name) |
@@ -90,17 +84,16 @@ | ||
90 | 84 | |
91 | 85 | |
92 | 86 | def test_Rule_Sequence(xml_serialize): |
93 | - rn = RuleName() | |
87 | + rule_name = "Rule_Sequence" | |
94 | 88 | seq = Sequence() |
95 | 89 | |
96 | - txt = xml_serialize(peg.Rule(name=rn.rule, expr=seq.seq)) | |
90 | + txt = xml_serialize(peg.Rule(name=rule_name, expr=seq.seq)) | |
97 | 91 | logger.debug(f'XML:: {txt}') |
98 | 92 | |
99 | - assert_xml_Element(txt, tag='Rule', name=rn.rule_name) | |
100 | - rn.assert_xml_Element(txt) | |
93 | + assert_xml_Element(txt, tag='Rule', name=rule_name) | |
101 | 94 | seq.assert_xml_Element(txt) |
102 | 95 | |
103 | -@pytest.mark.skip(reason="Will rewrite peg.Rules first --") | |
96 | +@pytest.mark.xfail(reason="Not yet done") | |
104 | 97 | def test_Rules(xml_serialize): |
105 | 98 | r1 = peg.Rule(name='rule_1', expr=peg.Sequence(value=[peg.ID(name='id1')])) |
106 | 99 | r2 = peg.Rule(name='rule_2', expr=peg.Sequence(value=[peg.StrTerm(value='str2')])) |