]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - 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
diff --git a/bundles/org.simantics.databoard/cpp/DataBoardTest/DataBoard/SimanticsData.g b/bundles/org.simantics.databoard/cpp/DataBoardTest/DataBoard/SimanticsData.g
new file mode 100644 (file)
index 0000000..3afd843
--- /dev/null
@@ -0,0 +1,237 @@
+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
+    ;
\ No newline at end of file