-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgrammar
More file actions
130 lines (110 loc) · 1.77 KB
/
grammar
File metadata and controls
130 lines (110 loc) · 1.77 KB
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
grammar APiAPI;
// Words reserved by definition
RESERVED
: 'Models'
| 'int'
| 'string'
| 'float'
| 'Routes'
| 'GET'
| 'POST'
| 'PUT'
| 'DELETE'
| 'Method'
| 'Path'
;
// Ponctuators
OPERATORS
: '{'
| '}'
| ':'
;
// Comment missing last #
WRONG_COMMENT
: '#' ( ~( '#' | '#' ) )* '\n'
;
// Correct comment
COMMENT
: ('#' ( ~( '#' | '#' | '\n' ) )* '#' '\n') -> skip
;
// Generic identificator
IDENT
: ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*
;
// Path identificator
PATH_IDENT
: ('a'..'z'|'A'..'Z'|'_'|'/') ('a'..'z'|'A'..'Z'|'0'..'9'|'_'|'/')*
;
// Any whitespace
WHITE
: (' '
| '\t') -> skip
;
// New line
BREAK_LINE
: '\n'
;
// The rest
WRONG_SYMBOL
: .
;
// The programs structure
main
: 'Models' '{' '\n'
(model)+
'}' ('\n')*
'Routes' '{' '\n'
(routes)+
'}'
;
// The model structure
model
: IDENT '{' '\n' fields '}' '\n'
;
// A model has at least one field
fields
: (field)+
;
// The field structure
field
: IDENT ':' type '\n'
;
// Three supported types or user defined type
type
: IDENT
| 'int'
| 'string'
| 'float'
;
// The routes structure
routes
: 'Models.' IDENT '{' '\n'
(route)+
'}' '\n'
;
// A route structure
route
: IDENT '{' '\n'
routeSpecs
'}' '\n'
;
// Route parameters definition
routeSpecs
: 'Method' ':' method '\n'
'Path' ':' path '\n'
;
// A route path
path
: PATH_IDENT (param)?
;
// Path parameter
param
: ':' IDENT
;
// HTTP Methods
method
: 'GET'
| 'POST'
| 'PUT'
| 'DELETE'
;