-grammar SimanticsData;\r
-\r
-options {\r
- language = C;\r
- output = AST;\r
- ASTLabelType=pANTLR3_BASE_TREE;\r
-}\r
-\r
-tokens {\r
- TYPE_DEFINITIONS;\r
- TYPE_DEFINITION; \r
-\r
- UNION_TYPE; \r
- RECORD_TYPE;\r
- TUPLE_TYPE;\r
- ARRAY_TYPE;\r
- TYPE_REFERENCE;\r
- TYPE_ANNOTATION; \r
- TYPE_COMPONENT;\r
- \r
- VALUE_DEFINITIONS;\r
- VALUE_DEFINITION;\r
-\r
- NO_VALUE; \r
- VARIANT;\r
- ARRAY;\r
- TUPLE;\r
- TAGGED_VALUE;\r
- RECORD;\r
- MAP;\r
- ASSIGNMENT;\r
-}\r
-\r
-ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*\r
- ;\r
-\r
-INT : '-'? '0'..'9'+\r
- ;\r
-\r
-FLOAT\r
- : '-'? ('0'..'9')+ '.' ('0'..'9')+ EXPONENT?\r
- //| '-'? '.' ('0'..'9')+ EXPONENT?\r
- | '-'? ('0'..'9')+ EXPONENT\r
- ;\r
-\r
-COMMENT\r
- : '//' ~('\n'|'\r')* '\r'? '\n' {$channel=HIDDEN;}\r
- | '/*' ( options {greedy=false;} : . )* '*/' {$channel=HIDDEN;}\r
- ;\r
-\r
-WS : ( ' '\r
- | '\t'\r
- | '\r'\r
- | '\n'\r
- ) {$channel=HIDDEN;}\r
- ;\r
-\r
-STRING\r
- : '"' ( ESC_SEQ | ~('\\'|'"') )* '"'\r
- | '"""' ( ~('"') | '"' ~('"') | '""' ~('"') )* '"""'\r
- ;\r
-\r
-fragment\r
-EXPONENT : ('e'|'E') ('+'|'-')? ('0'..'9')+ ;\r
-\r
-fragment\r
-HEX_DIGIT : ('0'..'9'|'a'..'f'|'A'..'F') ;\r
-\r
-fragment\r
-ESC_SEQ\r
- : '\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\')\r
- | UNICODE_ESC\r
- | OCTAL_ESC\r
- ;\r
-\r
-fragment\r
-OCTAL_ESC\r
- : '\\' ('0'..'3') ('0'..'7') ('0'..'7')\r
- | '\\' ('0'..'7') ('0'..'7')\r
- | '\\' ('0'..'7')\r
- ;\r
-\r
-fragment\r
-UNICODE_ESC\r
- : '\\' 'u' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT\r
- ;\r
- \r
-/* -----------------------------------------------------------\r
- TYPE DEFINITIONS \r
- ----------------------------------------------------------- */\r
- \r
- \r
-typeDefinitions : typeDefinition* -> ^(TYPE_DEFINITIONS typeDefinition*);\r
-\r
-typeDefinition \r
- : 'type' ID '=' unionType -> ^(TYPE_DEFINITION ID unionType)\r
- ;\r
- \r
-unionType \r
- : type\r
- | ('|' unionComponent)+\r
- -> ^(UNION_TYPE unionComponent+)\r
- ;\r
- \r
-unionComponent : ID type? -> ^(TYPE_COMPONENT ID type?) ;\r
-\r
-type \r
- : (basicType -> basicType)\r
- ('[' arrayLength? ']' -> ^(ARRAY_TYPE $type arrayLength?))* ;\r
-\r
-arrayLength \r
- : INT\r
- | INT '..'\r
- | '..' INT \r
- | INT '..' INT\r
- ;\r
-\r
-basicType \r
- : tupleType\r
- | recordType\r
- | typeReference\r
- ;\r
- \r
-tupleType \r
- : '(' (unionType (',' unionType)*)? ')' \r
- -> ^(TUPLE_TYPE unionType*) \r
- ;\r
-\r
-recordType \r
- : '{' (component (',' component)*)? '}' \r
- -> ^(RECORD_TYPE component*)\r
- ;\r
-\r
-component \r
- : ID ':' unionType \r
- -> ^(TYPE_COMPONENT ID unionType) \r
- ;\r
-\r
-typeReference \r
- : ID ('(' parameter (',' parameter)* ')')? \r
- -> ^(TYPE_REFERENCE ID parameter*)\r
- ;\r
-\r
-parameter \r
- : ID '=' parameterValue -> ^(TYPE_ANNOTATION ID parameterValue)\r
- | unionType \r
- ;\r
-\r
-parameterValue \r
- : string\r
- | boolean\r
- | number\r
- | ('[' | '(') range (']' | ')')\r
- ;\r
- \r
-range\r
- : number\r
- | number '..'\r
- | '..' number \r
- | number '..' number\r
- ; \r
- \r
-number\r
- : INT\r
- | FLOAT\r
- ;\r
-\r
-string\r
- : STRING\r
- ;\r
- \r
-boolean\r
- : 'true'\r
- | 'false'\r
- ;\r
-\r
-/* -----------------------------------------------------------\r
- VALUE DEFINITIONS \r
- ----------------------------------------------------------- */\r
-\r
-valueDefinitions : valueDefinition* -> ^(VALUE_DEFINITIONS valueDefinition*);\r
-\r
-valueDefinition \r
- : ID ':' unionType '=' value\r
- -> ^(VALUE_DEFINITION ID unionType value) \r
- ;\r
-\r
-value \r
- : (basicValue -> basicValue)\r
- (':' type -> ^(VARIANT type $value))* \r
- ;\r
-\r
-basicValue \r
- : 'null' -> NO_VALUE\r
- | string\r
- | number\r
- | boolean\r
- | array\r
- | tuple\r
- | taggedValue\r
- | map\r
- | record\r
- ;\r
-\r
-array \r
- : '[' (value (',' value)*)? ']'\r
- -> ^(ARRAY value*) \r
- ;\r
-\r
-tuple \r
- : '(' (value (',' value)*)? ')'\r
- -> ^(TUPLE value*) \r
- ;\r
-\r
-taggedValue \r
- : ID basicValue\r
- -> ^(TAGGED_VALUE ID basicValue) \r
- ;\r
-\r
-record \r
- : '{' (recordAssignment (',' recordAssignment)*)? '}'\r
- -> ^(RECORD recordAssignment*) \r
- ;\r
-\r
-recordAssignment \r
- : ID '=' value\r
- -> ^(ASSIGNMENT ID value)\r
- ;\r
-\r
-map : 'map' '{' (mapAssignment (',' mapAssignment)*)? '}'\r
- -> ^(MAP mapAssignment*) \r
- ;\r
-\r
-mapAssignment \r
- : value '=' value\r
- -> ^(ASSIGNMENT value*) \r
+grammar SimanticsData;
+
+options {
+ language = C;
+ output = AST;
+ ASTLabelType=pANTLR3_BASE_TREE;
+}
+
+tokens {
+ TYPE_DEFINITIONS;
+ TYPE_DEFINITION;
+
+ UNION_TYPE;
+ RECORD_TYPE;
+ TUPLE_TYPE;
+ ARRAY_TYPE;
+ TYPE_REFERENCE;
+ TYPE_ANNOTATION;
+ TYPE_COMPONENT;
+
+ VALUE_DEFINITIONS;
+ VALUE_DEFINITION;
+
+ NO_VALUE;
+ VARIANT;
+ ARRAY;
+ TUPLE;
+ TAGGED_VALUE;
+ RECORD;
+ MAP;
+ ASSIGNMENT;
+}
+
+ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*
+ ;
+
+INT : '-'? '0'..'9'+
+ ;
+
+FLOAT
+ : '-'? ('0'..'9')+ '.' ('0'..'9')+ EXPONENT?
+ //| '-'? '.' ('0'..'9')+ EXPONENT?
+ | '-'? ('0'..'9')+ EXPONENT
+ ;
+
+COMMENT
+ : '//' ~('\n'|'\r')* '\r'? '\n' {$channel=HIDDEN;}
+ | '/*' ( options {greedy=false;} : . )* '*/' {$channel=HIDDEN;}
+ ;
+
+WS : ( ' '
+ | '\t'
+ | '\r'
+ | '\n'
+ ) {$channel=HIDDEN;}
+ ;
+
+STRING
+ : '"' ( ESC_SEQ | ~('\\'|'"') )* '"'
+ | '"""' ( ~('"') | '"' ~('"') | '""' ~('"') )* '"""'
+ ;
+
+fragment
+EXPONENT : ('e'|'E') ('+'|'-')? ('0'..'9')+ ;
+
+fragment
+HEX_DIGIT : ('0'..'9'|'a'..'f'|'A'..'F') ;
+
+fragment
+ESC_SEQ
+ : '\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\')
+ | UNICODE_ESC
+ | OCTAL_ESC
+ ;
+
+fragment
+OCTAL_ESC
+ : '\\' ('0'..'3') ('0'..'7') ('0'..'7')
+ | '\\' ('0'..'7') ('0'..'7')
+ | '\\' ('0'..'7')
+ ;
+
+fragment
+UNICODE_ESC
+ : '\\' 'u' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT
+ ;
+
+/* -----------------------------------------------------------
+ TYPE DEFINITIONS
+ ----------------------------------------------------------- */
+
+
+typeDefinitions : typeDefinition* -> ^(TYPE_DEFINITIONS typeDefinition*);
+
+typeDefinition
+ : 'type' ID '=' unionType -> ^(TYPE_DEFINITION ID unionType)
+ ;
+
+unionType
+ : type
+ | ('|' unionComponent)+
+ -> ^(UNION_TYPE unionComponent+)
+ ;
+
+unionComponent : ID type? -> ^(TYPE_COMPONENT ID type?) ;
+
+type
+ : (basicType -> basicType)
+ ('[' arrayLength? ']' -> ^(ARRAY_TYPE $type arrayLength?))* ;
+
+arrayLength
+ : INT
+ | INT '..'
+ | '..' INT
+ | INT '..' INT
+ ;
+
+basicType
+ : tupleType
+ | recordType
+ | typeReference
+ ;
+
+tupleType
+ : '(' (unionType (',' unionType)*)? ')'
+ -> ^(TUPLE_TYPE unionType*)
+ ;
+
+recordType
+ : '{' (component (',' component)*)? '}'
+ -> ^(RECORD_TYPE component*)
+ ;
+
+component
+ : ID ':' unionType
+ -> ^(TYPE_COMPONENT ID unionType)
+ ;
+
+typeReference
+ : ID ('(' parameter (',' parameter)* ')')?
+ -> ^(TYPE_REFERENCE ID parameter*)
+ ;
+
+parameter
+ : ID '=' parameterValue -> ^(TYPE_ANNOTATION ID parameterValue)
+ | unionType
+ ;
+
+parameterValue
+ : string
+ | boolean
+ | number
+ | ('[' | '(') range (']' | ')')
+ ;
+
+range
+ : number
+ | number '..'
+ | '..' number
+ | number '..' number
+ ;
+
+number
+ : INT
+ | FLOAT
+ ;
+
+string
+ : STRING
+ ;
+
+boolean
+ : 'true'
+ | 'false'
+ ;
+
+/* -----------------------------------------------------------
+ VALUE DEFINITIONS
+ ----------------------------------------------------------- */
+
+valueDefinitions : valueDefinition* -> ^(VALUE_DEFINITIONS valueDefinition*);
+
+valueDefinition
+ : ID ':' unionType '=' value
+ -> ^(VALUE_DEFINITION ID unionType value)
+ ;
+
+value
+ : (basicValue -> basicValue)
+ (':' type -> ^(VARIANT type $value))*
+ ;
+
+basicValue
+ : 'null' -> NO_VALUE
+ | string
+ | number
+ | boolean
+ | array
+ | tuple
+ | taggedValue
+ | map
+ | record
+ ;
+
+array
+ : '[' (value (',' value)*)? ']'
+ -> ^(ARRAY value*)
+ ;
+
+tuple
+ : '(' (value (',' value)*)? ')'
+ -> ^(TUPLE value*)
+ ;
+
+taggedValue
+ : ID basicValue
+ -> ^(TAGGED_VALUE ID basicValue)
+ ;
+
+record
+ : '{' (recordAssignment (',' recordAssignment)*)? '}'
+ -> ^(RECORD recordAssignment*)
+ ;
+
+recordAssignment
+ : ID '=' value
+ -> ^(ASSIGNMENT ID value)
+ ;
+
+map : 'map' '{' (mapAssignment (',' mapAssignment)*)? '}'
+ -> ^(MAP mapAssignment*)
+ ;
+
+mapAssignment
+ : value '=' value
+ -> ^(ASSIGNMENT value*)
;
\ No newline at end of file