• R/O
  • SSH

提交

标签
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

修订版7754889a9628321d0a8510ec0d8733f4a76363d3 (tree)
时间2022-01-31 01:29:13
作者Albert Mietus < albert AT mietus DOT nl >
CommiterAlbert Mietus < albert AT mietus DOT nl >

Log Message

(empty log message)

更改概述

差异

diff -r bea38726c5d2 -r 7754889a9628 Makefile
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Makefile Sun Jan 30 17:29:13 2022 +0100
@@ -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
diff -r bea38726c5d2 -r 7754889a9628 castle/ast/_base.py
--- a/castle/ast/_base.py Sun Jan 30 16:27:51 2022 +0100
+++ b/castle/ast/_base.py Sun Jan 30 17:29:13 2022 +0100
@@ -11,7 +11,7 @@
1111 self._parse_tree = parse_tree
1212
1313 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]!='_')
1515
1616 def serialize(self, strategy="XML") -> str:
1717 return Serialize(strategy).serialize(self)
diff -r bea38726c5d2 -r 7754889a9628 castle/ast/serialization.py
--- a/castle/ast/serialization.py Sun Jan 30 16:27:51 2022 +0100
+++ b/castle/ast/serialization.py Sun Jan 30 17:29:13 2022 +0100
@@ -69,13 +69,14 @@
6969 self._ast2xml(elm, parent=seq)
7070
7171 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)
7374 self._ast2xml(ast.expr, parent=rule)
7475
7576 def Rules2xml(self, ast, parent) ->None:
7677 logger.debug(f"Rules2xml:: ast[{len(ast)}]")
7778 for child in ast:
78- logger.debug(f'Rules2xml child={child}:{type(child)}')
79+ logger.debug(f'Rules2xml type(child)={type(child)}')
7980 self._ast2xml(child, parent=parent)
8081
8182 #############
diff -r bea38726c5d2 -r 7754889a9628 pytst/ast/XML_serialization/test_1_simple.py
--- a/pytst/ast/XML_serialization/test_1_simple.py Sun Jan 30 16:27:51 2022 +0100
+++ b/pytst/ast/XML_serialization/test_1_simple.py Sun Jan 30 17:29:13 2022 +0100
@@ -4,12 +4,6 @@
44
55 from castle.ast import peg, serialization
66
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)
137
148 class Sequence:
159 def __init__(self):
@@ -78,11 +72,11 @@
7872
7973
8074 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"
8377 expr = peg.Sequence(value=[peg.ID(name=xref)])
8478
85- txt = xml_serialize(peg.Rule(name=name, expr=expr))
79+ txt = xml_serialize(peg.Rule(name=rule_name, expr=expr))
8680 logger.debug(f'XML:: {txt}')
8781
8882 assert_xml_Element(txt, tag='Rule', name=rule_name)
@@ -90,17 +84,16 @@
9084
9185
9286 def test_Rule_Sequence(xml_serialize):
93- rn = RuleName()
87+ rule_name = "Rule_Sequence"
9488 seq = Sequence()
9589
96- txt = xml_serialize(peg.Rule(name=rn.rule, expr=seq.seq))
90+ txt = xml_serialize(peg.Rule(name=rule_name, expr=seq.seq))
9791 logger.debug(f'XML:: {txt}')
9892
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)
10194 seq.assert_xml_Element(txt)
10295
103-@pytest.mark.skip(reason="Will rewrite peg.Rules first --")
96+@pytest.mark.xfail(reason="Not yet done")
10497 def test_Rules(xml_serialize):
10598 r1 = peg.Rule(name='rule_1', expr=peg.Sequence(value=[peg.ID(name='id1')]))
10699 r2 = peg.Rule(name='rule_2', expr=peg.Sequence(value=[peg.StrTerm(value='str2')]))