]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.databoard/cpp/DataBoardTest/DataBoard/SimanticsData.g
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.databoard / cpp / DataBoardTest / DataBoard / SimanticsData.g
1 grammar SimanticsData;\r
2 \r
3 options {\r
4     language = C;\r
5     output = AST;\r
6     ASTLabelType=pANTLR3_BASE_TREE;\r
7 }\r
8 \r
9 tokens {\r
10     TYPE_DEFINITIONS;\r
11     TYPE_DEFINITION;    \r
12 \r
13     UNION_TYPE;    \r
14     RECORD_TYPE;\r
15     TUPLE_TYPE;\r
16     ARRAY_TYPE;\r
17     TYPE_REFERENCE;\r
18     TYPE_ANNOTATION;    \r
19     TYPE_COMPONENT;\r
20     \r
21     VALUE_DEFINITIONS;\r
22     VALUE_DEFINITION;\r
23 \r
24     NO_VALUE;    \r
25     VARIANT;\r
26     ARRAY;\r
27     TUPLE;\r
28     TAGGED_VALUE;\r
29     RECORD;\r
30     MAP;\r
31     ASSIGNMENT;\r
32 }\r
33 \r
34 ID  :   ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\r
35     ;\r
36 \r
37 INT :   '-'? '0'..'9'+\r
38     ;\r
39 \r
40 FLOAT\r
41     :   '-'? ('0'..'9')+ '.' ('0'..'9')+ EXPONENT?\r
42     //|   '-'? '.' ('0'..'9')+ EXPONENT?\r
43     |   '-'? ('0'..'9')+ EXPONENT\r
44     ;\r
45 \r
46 COMMENT\r
47     :   '//' ~('\n'|'\r')* '\r'? '\n' {$channel=HIDDEN;}\r
48     |   '/*' ( options {greedy=false;} : . )* '*/' {$channel=HIDDEN;}\r
49     ;\r
50 \r
51 WS  :   ( ' '\r
52         | '\t'\r
53         | '\r'\r
54         | '\n'\r
55         ) {$channel=HIDDEN;}\r
56     ;\r
57 \r
58 STRING\r
59     :  '"' ( ESC_SEQ | ~('\\'|'"') )* '"'\r
60     |  '"""' ( ~('"') | '"' ~('"') | '""' ~('"') )* '"""'\r
61     ;\r
62 \r
63 fragment\r
64 EXPONENT : ('e'|'E') ('+'|'-')? ('0'..'9')+ ;\r
65 \r
66 fragment\r
67 HEX_DIGIT : ('0'..'9'|'a'..'f'|'A'..'F') ;\r
68 \r
69 fragment\r
70 ESC_SEQ\r
71     :   '\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\')\r
72     |   UNICODE_ESC\r
73     |   OCTAL_ESC\r
74     ;\r
75 \r
76 fragment\r
77 OCTAL_ESC\r
78     :   '\\' ('0'..'3') ('0'..'7') ('0'..'7')\r
79     |   '\\' ('0'..'7') ('0'..'7')\r
80     |   '\\' ('0'..'7')\r
81     ;\r
82 \r
83 fragment\r
84 UNICODE_ESC\r
85     :   '\\' 'u' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT\r
86     ;\r
87     \r
88 /* -----------------------------------------------------------\r
89    TYPE DEFINITIONS    \r
90    ----------------------------------------------------------- */\r
91  \r
92     \r
93 typeDefinitions : typeDefinition* -> ^(TYPE_DEFINITIONS typeDefinition*);\r
94 \r
95 typeDefinition \r
96     : 'type' ID '=' unionType -> ^(TYPE_DEFINITION ID unionType)\r
97     ;\r
98     \r
99 unionType \r
100     : type\r
101     | ('|' unionComponent)+\r
102     -> ^(UNION_TYPE unionComponent+)\r
103     ;\r
104    \r
105 unionComponent : ID type? -> ^(TYPE_COMPONENT ID type?) ;\r
106 \r
107 type \r
108     : (basicType -> basicType)\r
109       ('[' arrayLength? ']' -> ^(ARRAY_TYPE $type arrayLength?))* ;\r
110 \r
111 arrayLength \r
112     : INT\r
113     | INT '..'\r
114     | '..' INT \r
115     | INT '..' INT\r
116     ;\r
117 \r
118 basicType \r
119     : tupleType\r
120     | recordType\r
121     | typeReference\r
122     ;\r
123     \r
124 tupleType \r
125     : '(' (unionType (',' unionType)*)? ')' \r
126     -> ^(TUPLE_TYPE unionType*) \r
127     ;\r
128 \r
129 recordType \r
130     : '{' (component (',' component)*)? '}' \r
131     -> ^(RECORD_TYPE component*)\r
132     ;\r
133 \r
134 component \r
135     : ID ':' unionType \r
136     -> ^(TYPE_COMPONENT ID unionType) \r
137     ;\r
138 \r
139 typeReference \r
140     : ID ('(' parameter (',' parameter)* ')')? \r
141     -> ^(TYPE_REFERENCE ID parameter*)\r
142     ;\r
143 \r
144 parameter \r
145     : ID '=' parameterValue -> ^(TYPE_ANNOTATION ID parameterValue)\r
146     | unionType \r
147     ;\r
148 \r
149 parameterValue \r
150     : string\r
151     | boolean\r
152     | number\r
153     | ('[' | '(') range (']' | ')')\r
154     ;\r
155     \r
156 range\r
157     : number\r
158     | number '..'\r
159     | '..' number \r
160     | number '..' number\r
161     ;    \r
162     \r
163 number\r
164     : INT\r
165     | FLOAT\r
166     ;\r
167 \r
168 string\r
169     : STRING\r
170     ;\r
171     \r
172 boolean\r
173     : 'true'\r
174     | 'false'\r
175     ;\r
176 \r
177 /* -----------------------------------------------------------\r
178    VALUE DEFINITIONS    \r
179    ----------------------------------------------------------- */\r
180 \r
181 valueDefinitions : valueDefinition* -> ^(VALUE_DEFINITIONS valueDefinition*);\r
182 \r
183 valueDefinition \r
184     : ID ':' unionType '=' value\r
185     -> ^(VALUE_DEFINITION ID unionType value) \r
186     ;\r
187 \r
188 value \r
189     : (basicValue -> basicValue)\r
190       (':' type -> ^(VARIANT type $value))* \r
191     ;\r
192 \r
193 basicValue \r
194     : 'null' -> NO_VALUE\r
195     | string\r
196     | number\r
197     | boolean\r
198     | array\r
199     | tuple\r
200     | taggedValue\r
201     | map\r
202     | record\r
203     ;\r
204 \r
205 array \r
206     : '[' (value (',' value)*)? ']'\r
207     -> ^(ARRAY value*) \r
208     ;\r
209 \r
210 tuple \r
211     : '(' (value (',' value)*)? ')'\r
212     -> ^(TUPLE value*) \r
213     ;\r
214 \r
215 taggedValue \r
216     : ID basicValue\r
217     -> ^(TAGGED_VALUE ID basicValue) \r
218     ;\r
219 \r
220 record \r
221     : '{' (recordAssignment (',' recordAssignment)*)? '}'\r
222     -> ^(RECORD recordAssignment*) \r
223     ;\r
224 \r
225 recordAssignment \r
226     : ID '=' value\r
227     -> ^(ASSIGNMENT ID value)\r
228     ;\r
229 \r
230 map : 'map' '{' (mapAssignment (',' mapAssignment)*)? '}'\r
231     -> ^(MAP mapAssignment*) \r
232     ;\r
233 \r
234 mapAssignment \r
235     : value '=' value\r
236     -> ^(ASSIGNMENT value*) \r
237     ;