1 | «IMPORT ebnf» |
---|
2 | «EXTENSION org::eclipse::xtend::util::stdlib::globalvar» |
---|
3 | |
---|
4 | «REM» ========================================================================== «ENDREM» |
---|
5 | |
---|
6 | «DEFINE Root FOR EtsiBnf-» |
---|
7 | «FOREACH rule AS r-» |
---|
8 | «EXPAND check(r.name) FOR r-» |
---|
9 | «ENDFOREACH-» |
---|
10 | |
---|
11 | «FILE name+".g"-» |
---|
12 | grammar «name»; |
---|
13 | |
---|
14 | options { |
---|
15 | backtrack = true; |
---|
16 | memoize = true; |
---|
17 | } |
---|
18 | |
---|
19 | «FOREACH rule AS r-» |
---|
20 | «IF (getGlobalVar(r.name.toLowerCase()) != null)-» |
---|
21 | «IF r.name.toLowerCase() == "final"» |
---|
22 | finalRule: |
---|
23 | «ELSE» |
---|
24 | «r.name.toLowerCase()-»: |
---|
25 | «ENDIF» |
---|
26 | «ELSE-» |
---|
27 | «r.name.toUpperCase()-»: |
---|
28 | «ENDIF-» |
---|
29 | «EXPAND DefStart FOR r.definitionList-» |
---|
30 | ; |
---|
31 | |
---|
32 | «ENDFOREACH-» |
---|
33 | «ENDFILE-» |
---|
34 | «ENDDEFINE» |
---|
35 | |
---|
36 | «REM» ========================================================================== «ENDREM» |
---|
37 | |
---|
38 | «DEFINE check(String name) FOR emf::EObject» |
---|
39 | «IF (this.metaType == RuleReference)-» |
---|
40 | «storeGlobalVar(name.toLowerCase(), name.toLowerCase())» |
---|
41 | «ELSEIF this.eContents.size != 0-» |
---|
42 | «EXPAND check(name) FOREACH this.eContents-» |
---|
43 | «ENDIF-» |
---|
44 | «ENDDEFINE» |
---|
45 | |
---|
46 | «REM» ========================================================================== «ENDREM» |
---|
47 | |
---|
48 | «DEFINE OptionalSequenceStart FOR OptionalSequence-» |
---|
49 | («EXPAND DefStart FOREACH definitionList-»)? |
---|
50 | «ENDDEFINE» |
---|
51 | |
---|
52 | «REM» ========================================================================== «ENDREM» |
---|
53 | |
---|
54 | «DEFINE GroupedSequenceStart FOR GroupedSequence-» |
---|
55 | («EXPAND DefStart FOREACH this.definitionList-») |
---|
56 | «ENDDEFINE» |
---|
57 | |
---|
58 | «REM» ========================================================================== «ENDREM» |
---|
59 | |
---|
60 | «DEFINE RepeatedSequenceStart FOR RepeatedSequence-» |
---|
61 | ( |
---|
62 | «EXPAND DefStart FOREACH definitions-» |
---|
63 | «IF this.morethanonce==true-» |
---|
64 | )+ |
---|
65 | «ELSE-» |
---|
66 | )* |
---|
67 | «ENDIF-» |
---|
68 | «ENDDEFINE» |
---|
69 | |
---|
70 | «REM» ========================================================================== «ENDREM» |
---|
71 | |
---|
72 | «DEFINE DefStart FOR DefinitionList-» |
---|
73 | «FOREACH singleDefinition AS singleDef ITERATOR iter-» |
---|
74 | «IF !iter.firstIteration-» | «ENDIF-» |
---|
75 | |
---|
76 | «FOREACH singleDef.terms AS t-» |
---|
77 | «IF t.termAtom != null-» |
---|
78 | «IF t.termAtom.atomStringRule != null-» |
---|
79 | «IF t.termAtom.atomStringRule.colon.length > 0-» |
---|
80 | '\"' |
---|
81 | «ELSE» |
---|
82 | «IF t.termAtom.atomStringRule.literal == "\\"-» |
---|
83 | '\\' |
---|
84 | «ELSEIF t.termAtom.atomStringRule.literal == "'"-» |
---|
85 | '\'' |
---|
86 | «ELSE» |
---|
87 | '«t.termAtom.atomStringRule.literal-»' |
---|
88 | «ENDIF» |
---|
89 | «ENDIF» |
---|
90 | «ELSEIF t.termAtom.atomRuleReference != null-» |
---|
91 | «IF (getGlobalVar(t.termAtom.atomRuleReference.ruleref.name.toLowerCase()) != null)-» |
---|
92 | «IF t.termAtom.atomRuleReference.ruleref.name.toLowerCase() == "final"» |
---|
93 | finalRule |
---|
94 | «ELSE» |
---|
95 | «t.termAtom.atomRuleReference.ruleref.name.toLowerCase()-» |
---|
96 | «ENDIF» |
---|
97 | «ELSE-» |
---|
98 | «t.termAtom.atomRuleReference.ruleref.name.toUpperCase()-» |
---|
99 | «ENDIF-» |
---|
100 | «ENDIF-» |
---|
101 | «ELSEIF t.termGroupedSequence != null-» |
---|
102 | «EXPAND GroupedSequenceStart FOR t.termGroupedSequence-» |
---|
103 | «ELSEIF t.termOptionalSequence != null-» |
---|
104 | «EXPAND OptionalSequenceStart FOR t.termOptionalSequence-» |
---|
105 | «ELSEIF t.termRepeatedSequence != null-» |
---|
106 | «EXPAND RepeatedSequenceStart FOR t.termRepeatedSequence-» |
---|
107 | «ENDIF-» |
---|
108 | «ENDFOREACH-» |
---|
109 | «ENDFOREACH-» |
---|
110 | «ENDDEFINE» |
---|