-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathpegasus-sem.grammar
29 lines (24 loc) · 941 Bytes
/
pegasus-sem.grammar
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
token whitespace = /([ \t]|\r?\n)+/ [ skip ];
token identifier = /[a-zA-Z_\-]+/;
token integer = /[0-9]+/;
token code = /$$([^$]|$[^$])*$$/;
token keyword_type = /type/;
token keyword_typerules = /typerules/;
token keyword_state = /state/;
token keyword_init = /init/;
token keyword_rule = /rule/;
token eq = /=/;
token oparenth = /\(/;
token cparenth = /\)/;
token obracket = /\[/;
token cbracket = /\]/;
token comma = /,/;
rule S = type_list typerules_list init_decl rule_list;
rule type_list = type_decl type_list?;
rule type_decl = keyword_type identifier eq code;
rule typerules_list = typerules_decl typerules_list?;
rule typerules_decl = keyword_typerules identifier eq obracket identifier_list cbracket;
rule identifier_list = identifier | identifier comma identifier_list;
rule init_decl = keyword_init eq code;
rule rule_list = rule_decl rule_list?;
rule rule_decl = keyword_rule identifier oparenth integer cparenth eq code;