X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.databoard%2Fcpp%2FDataBoardTest%2FDataBoard%2FSimanticsData.g;fp=bundles%2Forg.simantics.databoard%2Fcpp%2FDataBoardTest%2FDataBoard%2FSimanticsData.g;h=694f06929dd5eeacfe0609acbea49f59ea1f0748;hb=0ae2b770234dfc3cbb18bd38f324125cf0faca07;hp=3afd843d84f22a375cb8b2620a3fa43f2730f04a;hpb=24e2b34260f219f0d1644ca7a138894980e25b14;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.databoard/cpp/DataBoardTest/DataBoard/SimanticsData.g b/bundles/org.simantics.databoard/cpp/DataBoardTest/DataBoard/SimanticsData.g index 3afd843d8..694f06929 100644 --- a/bundles/org.simantics.databoard/cpp/DataBoardTest/DataBoard/SimanticsData.g +++ b/bundles/org.simantics.databoard/cpp/DataBoardTest/DataBoard/SimanticsData.g @@ -1,237 +1,237 @@ -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*) +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