Skip to content

Commit 3c85876

Browse files
committed
add EBNF for advanced DSL
1 parent 5dd6f93 commit 3c85876

File tree

1 file changed

+157
-0
lines changed

1 file changed

+157
-0
lines changed

misc/EBNF_advanced.ebnf

Lines changed: 157 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,157 @@
1+
(*
2+
#### Glossar
3+
4+
Terminal => no further conversion possible
5+
=> UPPERCASE
6+
=> quoted literal
7+
=> regex
8+
=> name reffering to a terminal def
9+
=> e.g.:
10+
identifiers (names used for vars);
11+
keywords (class, var, ...);
12+
literals (define vals in the lang);
13+
separators and delimiters;
14+
whitespaces;
15+
comments;
16+
17+
Non-Terminal => further conversion
18+
=> lowercase
19+
=> obtained by grouping Terminals and other Non-Terminals
20+
=> Goal: obtain an AST --> Tree with a Non-Terminal as
21+
Root that will contain another Non-Terminal ....
22+
23+
Production-Rule => EBNF grammar is substantially a list of production rules
24+
*)
25+
26+
(*
27+
#### Dictonary TERMINAL
28+
29+
INT => 0...9
30+
STRING => a...z
31+
NOTE => a...g
32+
PARENTHESIS => (...)
33+
COMMA => ,
34+
AT => 'AT'
35+
TEMPO => 'TEMPO'
36+
PLAY => 'PLAY'
37+
WITH => 'WITH'
38+
TOGETHER => 'TOGETHER'
39+
MUSICIAN => 'MUSICIAN'
40+
INSTRUMENT => 'INSTRUMENT'
41+
ISTRUMENTID => 'Piano' ...
42+
NOTES => 'NOTES'
43+
CHORD => 'CHORD'
44+
PATTERN => 'PATTERN'
45+
LOOP => 'LOOP'
46+
*)
47+
48+
(*
49+
#### Example
50+
51+
PLAY piano_1, piano_2, violine_1 AT 10, drummer_1 WITH TEMPO 80
52+
53+
MUSICIAN piano_1
54+
INSTRUMENT Piano
55+
PLAY d,e,f,g,CHORD(c,d)
56+
57+
MUSICIAN piano_2
58+
INSTRUMENT Piano
59+
PLAY CHORD(a,b)
60+
61+
MUSICIAN violine_1
62+
INSTRUMENT Violine
63+
PLAY c,f
64+
65+
MUSICIAN drummer_1
66+
INSTRUMENT HiHat
67+
PLAY LOOP(c,c,c,c)
68+
69+
70+
71+
*)
72+
73+
(********************** Terminals ***************************)
74+
75+
LOOP : 'LOOP';
76+
PATTERN : 'PATTERN';
77+
CHORD : 'CHORD';
78+
NOTES : 'NOTES';
79+
INSTRUMENT : 'INSTRUMENT';
80+
MUSICIAN : 'MUSICIAN';
81+
TOGETHER : 'TOGETHER';
82+
WITH : 'WITH';
83+
PLAY : 'PLAY';
84+
TEMPO : 'TEMPO';
85+
AT : 'AT';
86+
87+
COMMA : ',';
88+
LPARAN : '(';
89+
RPARAN : ')';
90+
91+
ISTRUMENTID
92+
: 'Piano' | 'Guitar' | ...
93+
;
94+
95+
NOTE
96+
: 'a' | 'b' | 'c' | 'd' | 'e' | 'f' | 'g'
97+
;
98+
99+
STRING
100+
: [a-z]+
101+
;
102+
103+
INT
104+
: [0-9]+
105+
;
106+
107+
108+
(********************** Non-Terminals ***********************)
109+
110+
identifier
111+
: STRING
112+
;
113+
114+
115+
116+
song
117+
: track
118+
;
119+
120+
track
121+
: PLAY musicVars (tempo)?
122+
;
123+
124+
tempo
125+
: WITH TEMPO INT
126+
;
127+
128+
musicVars
129+
: musicVar (COMMA musicVar)*
130+
;
131+
132+
musicVar
133+
: identifier (AT INT)?
134+
;
135+
136+
137+
138+
musician
139+
: MUSICIAN identifier INSTRUMENT ISTRUMENTID PLAY (noteElements | loopElements)
140+
;
141+
142+
noteElements
143+
: noteElement (COMMA noteElement)*
144+
;
145+
146+
loopElements
147+
: LOOP LPARAN noteElements RPARAN
148+
;
149+
150+
noteElement
151+
: chord
152+
| NOTE
153+
;
154+
155+
chord
156+
: LPARAN NOTE NOTE (COMMA NOTE)* RPARAN
157+
;

0 commit comments

Comments
 (0)