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