• 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

Revisão968c856be5891930cd0c7826797c29671c041625 (tree)
Hora2021-12-10 00:22:12
AutorAlbert Mietus < albert AT mietus DOT nl >
CommiterAlbert Mietus < albert AT mietus DOT nl >

Mensagem de Log

Now can jinja-generate (demo) python with AST-classes. Nice (ToBeContinued)

Mudança Sumário

Diff

diff -r 7676a5cd2196 -r 968c856be589 Jinja/demo/demo4_withAST.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Jinja/demo/demo4_withAST.py Thu Dec 09 16:22:12 2021 +0100
@@ -0,0 +1,51 @@
1+from classes import Demo1
2+
3+import sys
4+sys.path.append("./../AST/")
5+from castle import peg # has the AST clases
6+
7+demo_3_rules = (
8+ { 'name' : 'peg_grammar',
9+ 'expr' : ['rules', 'EOF'] },
10+ { 'name' : 'rules',
11+ 'expr' : ['OneOrMore(rule)'] })
12+demo_3_settings = (
13+ { 'name' : 'S1',
14+ 'value' : ''' "'" '''.strip()},
15+ { 'name' : 'D1',
16+ 'value' : ''' '"' '''.strip()},
17+ { 'name' : 'S3',
18+ 'value' : """ "'''" """.strip()},
19+ { 'name' : 'D3',
20+ 'value' : ''' '"""' '''.strip()})
21+
22+
23+
24+def demo_4A():
25+ rules = [ peg.Rule( name=r['name'], expr=r['expr']) for r in demo_3_rules]
26+ settings = [ peg.Setting( name=s['name'], value=s['value']) for s in demo_3_settings]
27+
28+ produer = Demo1(default_template='file.jinja2')
29+ return produer.render(rules=rules, settings=settings)
30+
31+def demo_4B():
32+ rules = [ peg.Rule( name=r['name'], expr=r['expr']) for r in demo_3_rules]
33+ settings = [ peg.Setting( name=s['name'], value=s['value']) for s in demo_3_settings]
34+ grammar = peg.Grammar(rules=rules, settings=settings)
35+
36+ produer = Demo1(default_template='ast.jinja2')
37+ return produer.render(grammar=grammar)
38+
39+def demo_4diff():
40+ A = demo_4A()
41+ B = demo_4B()
42+ return "no Diff" if A == B else "DO DIFF"
43+
44+
45+if __name__ == "__main__":
46+ demos = [ func for (name, func) in locals().items() if name.startswith('demo_') and callable(func) ]
47+ for demo in demos:
48+ print(f"{'*'*12}\n** {demo.__name__} ::\n{'*'*12}")
49+ retval=demo()
50+ if isinstance(retval, str): print(retval)
51+ #print("== Done\n")
diff -r 7676a5cd2196 -r 968c856be589 Jinja/demo/template/ast.jinja2
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Jinja/demo/template/ast.jinja2 Thu Dec 09 16:22:12 2021 +0100
@@ -0,0 +1,16 @@
1+{% extends "file.jinja2" %}
2+----
3+
4+{%- block rules -%}
5+ {% for r in grammar.rules -%}
6+ {{ m.peg_rule(r.name, r.expr) }}
7+
8+ {% endfor %}
9+{% endblock %}
10+
11+{%- block settings -%}
12+ {% for s in grammar.settings -%}
13+ {{ m.settings(s.name, s.value) }}
14+ {% endfor %}
15+{%- endblock -%}
16+