• 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ón984d76e4ac51198c89b933b705010167df0dc922 (tree)
Tiempo2022-04-23 02:56:41
AutorAlbert Mietus < albert AT mietus DOT nl >
CommiterAlbert Mietus < albert AT mietus DOT nl >

Log Message

Cleanup

Cambiar Resumen

Diferencia incremental

diff -r 9bdc9ed57eb6 -r 984d76e4ac51 Makefile
--- a/Makefile Fri Apr 22 17:17:47 2022 +0200
+++ b/Makefile Fri Apr 22 19:56:41 2022 +0200
@@ -48,9 +48,9 @@
4848 PYREVERSE_DIR=pyreversed
4949 PYREVERSE_FORMAT=svg
5050 PYREVERSE_OPTIONS=-kAmy
51-PYREVERSE_PRJS= castle.readers castle.ast castle.writers castle
51+PYREVERSE_PRJS= castle castle.readers castle.ast #castle.writers
5252
53-pyanalyse: ${PYREVERSE_DIR}
53+pyanalyse pyreverse: ${PYREVERSE_DIR}
5454 for P in ${PYREVERSE_PRJS}; do \
5555 echo "PYANALYSE::" $$P "...";\
5656 pyreverse -d ${PYREVERSE_DIR} -o ${PYREVERSE_FORMAT} ${PYREVERSE_OPTIONS} -p $$P --colorized --max-color-depth=42 -my $$P ;\
diff -r 9bdc9ed57eb6 -r 984d76e4ac51 castle/readers/parser/__init__.py
--- a/castle/readers/parser/__init__.py Fri Apr 22 17:17:47 2022 +0200
+++ b/castle/readers/parser/__init__.py Fri Apr 22 19:56:41 2022 +0200
@@ -16,38 +16,44 @@
1616
1717
1818 class PEGReader(BaseReader):
19- """File-Reader to read & parse files, using a PEG parser.
19+ """File-Reader to read input-files and parse them using a PEG-parser.
2020
21- When creating a :py:class:`PEGReader` a default value for the `language_def` & `comment_def` can be set (and/or can
22- be set when reading a file -- see py:func`parse`). This language_def & comment_def should defined using *Arpeggio*.
21+ The ("programming") language --in which the input-files are written-- is defined once, by language- and (optionally)
22+ comment-definitions (using a PEG). Also a ``visitor`` (a class) has to be specified; which translate the parse-tree
23+ into an AST. Then no ``comment_def`` is given, it is assumed either no comments are expected, or the
24+ ``language_def`` will handle it.
25+
26+ After the language is defined, multiple (unrelated) files can be read/parsed -- each one is translated into an AST.
27+
28+ Note: the language/comment-definitions and visitor-class should defined using *Arpeggio*.
2329
2430 Also, a :py:class:`visitor` (class) should be specified. (this can only be done once).
31+ When creating a class the search-path `read_dirs` (to look for file-to-be-parsed) can be set.
2532
26- When creating a class the search-path `read_dirs` (to look for file-to-be-parsed) can be set.
2733 """
2834
29- def __init__(self, *, read_dirs: list[str]=[],
30- language_def=None, comment_def=None, visitor:Callable=None,
35+ def __init__(self, *, language_def=None, comment_def=None, visitor:Callable=None,
36+ read_dirs: list[str]=[],
3137 **kwargs):
3238 super().__init__(read_dirs=read_dirs, **kwargs)
39+ if language_def is None:
40+ raise ValueError("The `language_def` is a mandatory parameter")
3341 if visitor is None:
3442 raise ValueError("visitor is a mandatory parameter")
43+ self._language_def = language_def
44+ self._comment_def = comment_def # Can be None
3545 self._visitor = visitor
36- self.default_language_def = language_def
37- self.default_comment_def = comment_def
3846
3947
4048 def parse(self, filename:str, *, language_def=None, comment_def=None):
4149 """Read & Parse a file"""
42- if not language_def: language_def = self.default_language_def
43- if not comment_def: comment_def = self.default_comment_def
4450 txt = self._read(filename)
45- ast = self._do_parse(txt, language_def, comment_def)
51+ ast = self._do_parse(txt)
4652 return ast
4753
4854
49- def _do_parse(self, txt, language_def, comment_def):
50- parser = arpeggio.ParserPython(language_def=language_def, comment_def=comment_def)
55+ def _do_parse(self, txt):
56+ parser = arpeggio.ParserPython(language_def=self._language_def, comment_def=self._comment_def)
5157
5258 pt = parser.parse(txt)
5359 logger.info(f"Reader:_do_parse::\t parse_tree: start={pt.position} end={pt.position_end}; len(txt)={len(txt)}")
diff -r 9bdc9ed57eb6 -r 984d76e4ac51 pytst/readers/parser/general/test_file.py
--- a/pytst/readers/parser/general/test_file.py Fri Apr 22 17:17:47 2022 +0200
+++ b/pytst/readers/parser/general/test_file.py Fri Apr 22 19:56:41 2022 +0200
@@ -6,12 +6,12 @@
66
77
88 def test_file():
9- reader = PEGReader(read_dirs=('../../../demos/ThinOnion',
9+ reader = PEGReader(language_def=grammar.peg_grammar,
10+ comment_def=grammar.comment,
11+ visitor=visitor.PegVisitor(),
12+ read_dirs=('../../../demos/ThinOnion',
1013 '../../.././demos/ThinOnion/grammar',
11- '../../.././pytst/readers/parser'),
12- language_def=grammar.peg_grammar,
13- comment_def=grammar.comment,
14- visitor=visitor.PegVisitor())
14+ '../../.././pytst/readers/parser'))
1515 ast = reader.parse('grammar.peg')
1616 # Remember: ast is a Grammar!!
1717
diff -r 9bdc9ed57eb6 -r 984d76e4ac51 pytst/writers/python/test_1_rules.py
--- a/pytst/writers/python/test_1_rules.py Fri Apr 22 17:17:47 2022 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,16 +0,0 @@
1-import pytest
2-
3-from jinja2 import Template
4-
5-from castle.ast import grammar # To build the ATS
6-
7-
8-
9-def __test_simple_rule():
10- expected = """def rule_crossref():\treturn ID"""
11- castle = """rule_crossref <- ID ;"""
12-
13- ## Build the AST -- Ignoring the parse_tree
14- id_rn = grammar.ID(name="rule_crossref")
15- id_xr = grammar.ID(name="ID")
16-