Restricted version of imported ANTLR packages, compile with 3.5.2 49/1849/2
authorHannu Niemistö <hannu.niemisto@semantum.fi>
Fri, 15 Jun 2018 13:11:42 +0000 (16:11 +0300)
committerHannu Niemistö <hannu.niemisto@semantum.fi>
Fri, 15 Jun 2018 13:30:21 +0000 (16:30 +0300)
gitlab #24

Change-Id: Ie5bace3044f290d400a17c2bbe97774429c86ba8

bundles/org.simantics.graph.compiler/GenerateParser.xml [new file with mode: 0644]
bundles/org.simantics.graph.compiler/META-INF/MANIFEST.MF
bundles/org.simantics.graph.compiler/src/org/simantics/graph/compiler/internal/parsing/Graph.tokens
bundles/org.simantics.graph.compiler/src/org/simantics/graph/compiler/internal/parsing/GraphLexer.java
bundles/org.simantics.graph.compiler/src/org/simantics/graph/compiler/internal/parsing/GraphParser.java
bundles/org.simantics.graph.compiler/tools/antlr-3.3-complete.jar [deleted file]
bundles/org.simantics.graph.compiler/tools/antlr-3.5.2-complete.jar [new file with mode: 0644]
bundles/org.simantics.ltk.antlr/META-INF/MANIFEST.MF

diff --git a/bundles/org.simantics.graph.compiler/GenerateParser.xml b/bundles/org.simantics.graph.compiler/GenerateParser.xml
new file mode 100644 (file)
index 0000000..c80b4c2
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+    <property name="parser.dir" value="src/org/simantics/graph/compiler/internal/parsing" />
+    
+    <target name="compile">
+        <java jar="tools/antlr-3.5.2-complete.jar" fork="true" failonerror="true">
+            <arg line="${parser.dir}/Graph.g -o ${parser.dir}"/>
+        </java>
+    </target>
+</project>
\ No newline at end of file
index d64d3d56432796808e56877e2677d28d244fd975..9e5345c874fdd65ae9c3cb725df0005406900631 100644 (file)
@@ -2,11 +2,15 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: Compiler
 Bundle-SymbolicName: org.simantics.graph.compiler;singleton:=true
-Bundle-Version: 1.1.15.qualifier
+Bundle-Version: 1.1.16.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Require-Bundle: org.simantics.graph;bundle-version="1.0.0";visibility:=reexport,
- org.simantics.ltk.antlr;bundle-version="1.0.0",
+ org.simantics.ltk.antlr;bundle-version="1.1.12",
  org.simantics.databoard;bundle-version="0.5.3",
  freemarker;bundle-version="2.3.16",
  org.junit;bundle-version="4.12.0";resolution:=optional
 Export-Package: org.simantics.graph.compiler
+Import-Package: org.antlr.runtime;bundle-version="[3.5.2,4.0.0)",
+ org.antlr.runtime.debug;bundle-version="[3.5.2,4.0.0)",
+ org.antlr.runtime.misc;bundle-version="[3.5.2,4.0.0)",
+ org.antlr.runtime.tree;bundle-version="[3.5.2,4.0.0)"
index 778fc9748caaf9d5e93dc5a7fce49960cfda47f9..0a82788c19859c55b4ea3fd9ed927a3cf222fbf8 100644 (file)
@@ -14,80 +14,80 @@ T__77=77
 T__78=78
 T__79=79
 T__80=80
-INDENT=4
-DEDENT=5
-FILE=6
-RESOURCE=7
-PROPERTY=8
-VARIABLE=9
-EMBEDDED_VALUE=10
+ARRAY=4
+ARRAY_TYPE=5
+ASSIGNMENT=6
+BLANK=7
+COMMENT=8
+DEDENT=9
+DOMAIN_OF=10
 EMBEDDED_TYPE=11
-TEMPLATE_INSTANCE=12
-TEMPLATE_DEFINITION=13
-BLANK=14
-REF=15
-EQUALS=16
-INSTANCE_OF=17
-INHERITS=18
-SUBRELATION_OF=19
-HAS_DOMAIN=20
-HAS_RANGE=21
-DOMAIN_OF=22
-REQUIRES_VALUE_TYPE=23
-TYPE_DEFINITIONS=24
-TYPE_DEFINITION=25
-UNION_TYPE=26
-RECORD_TYPE=27
-TUPLE_TYPE=28
-ARRAY_TYPE=29
-TYPE_REFERENCE=30
-TYPE_ANNOTATION=31
-TYPE_COMPONENT=32
-VALUE_DEFINITIONS=33
-VALUE_DEFINITION=34
-NO_VALUE=35
-VARIANT=36
-ARRAY=37
-TUPLE=38
-TAGGED_VALUE=39
-RECORD=40
-MAP=41
-ASSIGNMENT=42
-TRUE=43
-FALSE=44
-ID=45
-COMMENT=46
-WS=47
-LPAREN=48
-RPAREN=49
-LBRACKET=50
-RBRACKET=51
-LCURLY=52
-RCURLY=53
-INT=54
-INT_RANGE=55
-FLOAT=56
-RANGE=57
-NEWLINE=58
-EXPONENT=59
-ESC_SEQ=60
-STRING=61
-URI=62
-HEX_DIGIT=63
-UNICODE_ESC=64
-'@'=65
-'.'=66
-'<T'=67
-'<R'=68
-'<--'=69
-'-->'=70
-'==>'=71
-'>--'=72
-':'=73
+EMBEDDED_VALUE=12
+EQUALS=13
+ESC_SEQ=14
+EXPONENT=15
+FALSE=16
+FILE=17
+FLOAT=18
+HAS_DOMAIN=19
+HAS_RANGE=20
+HEX_DIGIT=21
+ID=22
+INDENT=23
+INHERITS=24
+INSTANCE_OF=25
+INT=26
+INT_RANGE=27
+LBRACKET=28
+LCURLY=29
+LPAREN=30
+MAP=31
+NEWLINE=32
+NO_VALUE=33
+PROPERTY=34
+RANGE=35
+RBRACKET=36
+RCURLY=37
+RECORD=38
+RECORD_TYPE=39
+REF=40
+REQUIRES_VALUE_TYPE=41
+RESOURCE=42
+RPAREN=43
+STRING=44
+SUBRELATION_OF=45
+TAGGED_VALUE=46
+TEMPLATE_DEFINITION=47
+TEMPLATE_INSTANCE=48
+TRUE=49
+TUPLE=50
+TUPLE_TYPE=51
+TYPE_ANNOTATION=52
+TYPE_COMPONENT=53
+TYPE_DEFINITION=54
+TYPE_DEFINITIONS=55
+TYPE_REFERENCE=56
+UNICODE_ESC=57
+UNION_TYPE=58
+URI=59
+VALUE_DEFINITION=60
+VALUE_DEFINITIONS=61
+VARIABLE=62
+VARIANT=63
+WS=64
+'$'=65
+'%'=66
+','=67
+'-->'=68
+'.'=69
+':'=70
+'<--'=71
+'<R'=72
+'<T'=73
 '='=74
-'%'=75
-'$'=76
-'|'=77
-','=78
+'==>'=75
+'>--'=76
+'@'=77
+'false'=78
 'true'=79
-'false'=80
+'|'=80
index 565ba3237d858352dc78799cedc639e51d7d1e92..60cf59001db5e75d681ec4a959469c3a808d17e2 100644 (file)
@@ -1,4 +1,4 @@
-// $ANTLR 3.3 Nov 30, 2010 12:50:56 src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g 2011-12-19 14:53:14
+// $ANTLR 3.5.2 src/org/simantics/graph/compiler/internal/parsing/Graph.g 2018-06-15 14:02:54
  package org.simantics.graph.compiler.internal.parsing; 
 
 import gnu.trove.list.array.*;
@@ -9,2466 +9,2443 @@ import java.util.Stack;
 import java.util.List;
 import java.util.ArrayList;
 
-@SuppressWarnings({"unused", "unchecked", "rawtypes"})
+@SuppressWarnings("all")
 public class GraphLexer extends Lexer {
-    public static final int EOF=-1;
-    public static final int T__65=65;
-    public static final int T__66=66;
-    public static final int T__67=67;
-    public static final int T__68=68;
-    public static final int T__69=69;
-    public static final int T__70=70;
-    public static final int T__71=71;
-    public static final int T__72=72;
-    public static final int T__73=73;
-    public static final int T__74=74;
-    public static final int T__75=75;
-    public static final int T__76=76;
-    public static final int T__77=77;
-    public static final int T__78=78;
-    public static final int T__79=79;
-    public static final int T__80=80;
-    public static final int INDENT=4;
-    public static final int DEDENT=5;
-    public static final int FILE=6;
-    public static final int RESOURCE=7;
-    public static final int PROPERTY=8;
-    public static final int VARIABLE=9;
-    public static final int EMBEDDED_VALUE=10;
-    public static final int EMBEDDED_TYPE=11;
-    public static final int TEMPLATE_INSTANCE=12;
-    public static final int TEMPLATE_DEFINITION=13;
-    public static final int BLANK=14;
-    public static final int REF=15;
-    public static final int EQUALS=16;
-    public static final int INSTANCE_OF=17;
-    public static final int INHERITS=18;
-    public static final int SUBRELATION_OF=19;
-    public static final int HAS_DOMAIN=20;
-    public static final int HAS_RANGE=21;
-    public static final int DOMAIN_OF=22;
-    public static final int REQUIRES_VALUE_TYPE=23;
-    public static final int TYPE_DEFINITIONS=24;
-    public static final int TYPE_DEFINITION=25;
-    public static final int UNION_TYPE=26;
-    public static final int RECORD_TYPE=27;
-    public static final int TUPLE_TYPE=28;
-    public static final int ARRAY_TYPE=29;
-    public static final int TYPE_REFERENCE=30;
-    public static final int TYPE_ANNOTATION=31;
-    public static final int TYPE_COMPONENT=32;
-    public static final int VALUE_DEFINITIONS=33;
-    public static final int VALUE_DEFINITION=34;
-    public static final int NO_VALUE=35;
-    public static final int VARIANT=36;
-    public static final int ARRAY=37;
-    public static final int TUPLE=38;
-    public static final int TAGGED_VALUE=39;
-    public static final int RECORD=40;
-    public static final int MAP=41;
-    public static final int ASSIGNMENT=42;
-    public static final int TRUE=43;
-    public static final int FALSE=44;
-    public static final int ID=45;
-    public static final int COMMENT=46;
-    public static final int WS=47;
-    public static final int LPAREN=48;
-    public static final int RPAREN=49;
-    public static final int LBRACKET=50;
-    public static final int RBRACKET=51;
-    public static final int LCURLY=52;
-    public static final int RCURLY=53;
-    public static final int INT=54;
-    public static final int INT_RANGE=55;
-    public static final int FLOAT=56;
-    public static final int RANGE=57;
-    public static final int NEWLINE=58;
-    public static final int EXPONENT=59;
-    public static final int ESC_SEQ=60;
-    public static final int STRING=61;
-    public static final int URI=62;
-    public static final int HEX_DIGIT=63;
-    public static final int UNICODE_ESC=64;
-
-    int inParen = 0;
-
-    TIntArrayList iStack = new TIntArrayList();
-    { iStack.add(0); }
-
-    List tokens = new ArrayList();
-    public void emit(Token token) {
-        state.token = token;
-        tokens.add(token);
-    }
-    public Token nextToken() {
-        if(tokens.isEmpty()) {
-            super.nextToken();
-            if ( tokens.isEmpty() ) {
-                /* When end-of-file is encountered, we 
-                   emit balancing number of DEDENT tokens.
-                */
-                if(iStack.size() <= 1)
-                    return getEOFToken();
-                else {                
-                    while(iStack.size() > 1) {
-                        iStack.removeAt(iStack.size()-1);
-                        state.type = DEDENT;
-                        emit();
-                    }
-                    iStack.clear();
-                }
-            } 
-        }
-        return (Token)tokens.remove(0);
-    }
-
-
-
-    // delegates
-    // delegators
-
-    public GraphLexer() {;} 
-    public GraphLexer(CharStream input) {
-        this(input, new RecognizerSharedState());
-    }
-    public GraphLexer(CharStream input, RecognizerSharedState state) {
-        super(input,state);
-
-    }
-    public String getGrammarFileName() { return "src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g"; }
-
-    // $ANTLR start "T__65"
-    public final void mT__65() throws RecognitionException {
-        try {
-            int _type = T__65;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:46:7: ( '@' )
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:46:9: '@'
-            {
-            match('@'); 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__65"
-
-    // $ANTLR start "T__66"
-    public final void mT__66() throws RecognitionException {
-        try {
-            int _type = T__66;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:47:7: ( '.' )
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:47:9: '.'
-            {
-            match('.'); 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__66"
-
-    // $ANTLR start "T__67"
-    public final void mT__67() throws RecognitionException {
-        try {
-            int _type = T__67;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:48:7: ( '<T' )
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:48:9: '<T'
-            {
-            match("<T"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__67"
-
-    // $ANTLR start "T__68"
-    public final void mT__68() throws RecognitionException {
-        try {
-            int _type = T__68;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:49:7: ( '<R' )
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:49:9: '<R'
-            {
-            match("<R"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__68"
-
-    // $ANTLR start "T__69"
-    public final void mT__69() throws RecognitionException {
-        try {
-            int _type = T__69;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:50:7: ( '<--' )
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:50:9: '<--'
-            {
-            match("<--"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__69"
-
-    // $ANTLR start "T__70"
-    public final void mT__70() throws RecognitionException {
-        try {
-            int _type = T__70;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:51:7: ( '-->' )
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:51:9: '-->'
-            {
-            match("-->"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__70"
-
-    // $ANTLR start "T__71"
-    public final void mT__71() throws RecognitionException {
-        try {
-            int _type = T__71;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:52:7: ( '==>' )
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:52:9: '==>'
-            {
-            match("==>"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__71"
-
-    // $ANTLR start "T__72"
-    public final void mT__72() throws RecognitionException {
-        try {
-            int _type = T__72;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:53:7: ( '>--' )
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:53:9: '>--'
-            {
-            match(">--"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__72"
-
-    // $ANTLR start "T__73"
-    public final void mT__73() throws RecognitionException {
-        try {
-            int _type = T__73;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:54:7: ( ':' )
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:54:9: ':'
-            {
-            match(':'); 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__73"
-
-    // $ANTLR start "T__74"
-    public final void mT__74() throws RecognitionException {
-        try {
-            int _type = T__74;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:55:7: ( '=' )
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:55:9: '='
-            {
-            match('='); 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__74"
-
-    // $ANTLR start "T__75"
-    public final void mT__75() throws RecognitionException {
-        try {
-            int _type = T__75;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:56:7: ( '%' )
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:56:9: '%'
-            {
-            match('%'); 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__75"
-
-    // $ANTLR start "T__76"
-    public final void mT__76() throws RecognitionException {
-        try {
-            int _type = T__76;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:57:7: ( '$' )
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:57:9: '$'
-            {
-            match('$'); 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__76"
-
-    // $ANTLR start "T__77"
-    public final void mT__77() throws RecognitionException {
-        try {
-            int _type = T__77;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:58:7: ( '|' )
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:58:9: '|'
-            {
-            match('|'); 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__77"
-
-    // $ANTLR start "T__78"
-    public final void mT__78() throws RecognitionException {
-        try {
-            int _type = T__78;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:59:7: ( ',' )
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:59:9: ','
-            {
-            match(','); 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__78"
-
-    // $ANTLR start "T__79"
-    public final void mT__79() throws RecognitionException {
-        try {
-            int _type = T__79;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:60:7: ( 'true' )
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:60:9: 'true'
-            {
-            match("true"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__79"
-
-    // $ANTLR start "T__80"
-    public final void mT__80() throws RecognitionException {
-        try {
-            int _type = T__80;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:61:7: ( 'false' )
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:61:9: 'false'
-            {
-            match("false"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__80"
-
-    // $ANTLR start "ID"
-    public final void mID() throws RecognitionException {
-        try {
-            int _type = ID;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:108:5: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' )* )
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:108:7: ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' )*
-            {
-            if ( (input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z') ) {
-                input.consume();
-
-            }
-            else {
-                MismatchedSetException mse = new MismatchedSetException(null,input);
-                recover(mse);
-                throw mse;}
-
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:108:31: ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' )*
-            loop1:
-            do {
-                int alt1=2;
-                int LA1_0 = input.LA(1);
-
-                if ( ((LA1_0>='0' && LA1_0<='9')||(LA1_0>='A' && LA1_0<='Z')||LA1_0=='_'||(LA1_0>='a' && LA1_0<='z')) ) {
-                    alt1=1;
-                }
-
-
-                switch (alt1) {
-               case 1 :
-                   // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:
-                   {
-                   if ( (input.LA(1)>='0' && input.LA(1)<='9')||(input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z') ) {
-                       input.consume();
-
-                   }
-                   else {
-                       MismatchedSetException mse = new MismatchedSetException(null,input);
-                       recover(mse);
-                       throw mse;}
-
-
-                   }
-                   break;
-
-               default :
-                   break loop1;
-                }
-            } while (true);
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "ID"
-
-    // $ANTLR start "COMMENT"
-    public final void mCOMMENT() throws RecognitionException {
-        try {
-            int _type = COMMENT;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:112:5: ( '//' (~ ( '\\n' ) )* | '/*' ( options {greedy=false; } : . )* '*/' )
-            int alt4=2;
-            int LA4_0 = input.LA(1);
-
-            if ( (LA4_0=='/') ) {
-                int LA4_1 = input.LA(2);
-
-                if ( (LA4_1=='/') ) {
-                    alt4=1;
-                }
-                else if ( (LA4_1=='*') ) {
-                    alt4=2;
-                }
-                else {
-                    NoViableAltException nvae =
-                        new NoViableAltException("", 4, 1, input);
-
-                    throw nvae;
-                }
-            }
-            else {
-                NoViableAltException nvae =
-                    new NoViableAltException("", 4, 0, input);
-
-                throw nvae;
-            }
-            switch (alt4) {
-                case 1 :
-                    // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:112:9: '//' (~ ( '\\n' ) )*
-                    {
-                    match("//"); 
-
-                    // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:112:14: (~ ( '\\n' ) )*
-                    loop2:
-                    do {
-                        int alt2=2;
-                        int LA2_0 = input.LA(1);
-
-                        if ( ((LA2_0>='\u0000' && LA2_0<='\t')||(LA2_0>='\u000B' && LA2_0<='\uFFFF')) ) {
-                            alt2=1;
-                        }
-
-
-                        switch (alt2) {
-                       case 1 :
-                           // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:112:14: ~ ( '\\n' )
-                           {
-                           if ( (input.LA(1)>='\u0000' && input.LA(1)<='\t')||(input.LA(1)>='\u000B' && input.LA(1)<='\uFFFF') ) {
-                               input.consume();
-
-                           }
-                           else {
-                               MismatchedSetException mse = new MismatchedSetException(null,input);
-                               recover(mse);
-                               throw mse;}
-
-
-                           }
-                           break;
-
-                       default :
-                           break loop2;
-                        }
-                    } while (true);
-
-                    _channel=HIDDEN;
-
-                    }
-                    break;
-                case 2 :
-                    // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:113:9: '/*' ( options {greedy=false; } : . )* '*/'
-                    {
-                    match("/*"); 
-
-                    // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:113:14: ( options {greedy=false; } : . )*
-                    loop3:
-                    do {
-                        int alt3=2;
-                        int LA3_0 = input.LA(1);
-
-                        if ( (LA3_0=='*') ) {
-                            int LA3_1 = input.LA(2);
-
-                            if ( (LA3_1=='/') ) {
-                                alt3=2;
-                            }
-                            else if ( ((LA3_1>='\u0000' && LA3_1<='.')||(LA3_1>='0' && LA3_1<='\uFFFF')) ) {
-                                alt3=1;
-                            }
-
-
-                        }
-                        else if ( ((LA3_0>='\u0000' && LA3_0<=')')||(LA3_0>='+' && LA3_0<='\uFFFF')) ) {
-                            alt3=1;
-                        }
-
-
-                        switch (alt3) {
-                       case 1 :
-                           // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:113:42: .
-                           {
-                           matchAny(); 
-
-                           }
-                           break;
-
-                       default :
-                           break loop3;
-                        }
-                    } while (true);
-
-                    match("*/"); 
-
-                    _channel=HIDDEN;
-
-                    }
-                    break;
-
-            }
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "COMMENT"
-
-    // $ANTLR start "WS"
-    public final void mWS() throws RecognitionException {
-        try {
-            int _type = WS;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:116:5: ( ( ' ' | '\\t' | '\\r' ) )
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:116:7: ( ' ' | '\\t' | '\\r' )
-            {
-            if ( input.LA(1)=='\t'||input.LA(1)=='\r'||input.LA(1)==' ' ) {
-                input.consume();
-
-            }
-            else {
-                MismatchedSetException mse = new MismatchedSetException(null,input);
-                recover(mse);
-                throw mse;}
-
-            _channel=HIDDEN;
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "WS"
-
-    // $ANTLR start "LPAREN"
-    public final void mLPAREN() throws RecognitionException {
-        try {
-            int _type = LPAREN;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:122:11: ( '(' )
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:122:13: '('
-            {
-            match('('); 
-             ++ inParen; 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "LPAREN"
-
-    // $ANTLR start "RPAREN"
-    public final void mRPAREN() throws RecognitionException {
-        try {
-            int _type = RPAREN;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:123:11: ( ')' )
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:123:13: ')'
-            {
-            match(')'); 
-             -- inParen; 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "RPAREN"
-
-    // $ANTLR start "LBRACKET"
-    public final void mLBRACKET() throws RecognitionException {
-        try {
-            int _type = LBRACKET;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:124:11: ( '[' )
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:124:13: '['
-            {
-            match('['); 
-             ++ inParen; 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "LBRACKET"
-
-    // $ANTLR start "RBRACKET"
-    public final void mRBRACKET() throws RecognitionException {
-        try {
-            int _type = RBRACKET;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:125:11: ( ']' )
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:125:13: ']'
-            {
-            match(']'); 
-             -- inParen; 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "RBRACKET"
-
-    // $ANTLR start "LCURLY"
-    public final void mLCURLY() throws RecognitionException {
-        try {
-            int _type = LCURLY;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:126:11: ( '{' )
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:126:13: '{'
-            {
-            match('{'); 
-             ++ inParen; 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "LCURLY"
-
-    // $ANTLR start "RCURLY"
-    public final void mRCURLY() throws RecognitionException {
-        try {
-            int _type = RCURLY;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:127:11: ( '}' )
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:127:13: '}'
-            {
-            match('}'); 
-             -- inParen; 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "RCURLY"
-
-    // $ANTLR start "INT_RANGE"
-    public final void mINT_RANGE() throws RecognitionException {
-        try {
-            int _type = INT_RANGE;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:129:11: ( INT '..' ( INT )? | '..' INT )
-            int alt6=2;
-            int LA6_0 = input.LA(1);
-
-            if ( (LA6_0=='-'||(LA6_0>='0' && LA6_0<='9')) ) {
-                alt6=1;
-            }
-            else if ( (LA6_0=='.') ) {
-                alt6=2;
-            }
-            else {
-                NoViableAltException nvae =
-                    new NoViableAltException("", 6, 0, input);
-
-                throw nvae;
-            }
-            switch (alt6) {
-                case 1 :
-                    // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:129:13: INT '..' ( INT )?
-                    {
-                    mINT(); 
-                    match(".."); 
-
-                    // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:129:22: ( INT )?
-                    int alt5=2;
-                    int LA5_0 = input.LA(1);
-
-                    if ( (LA5_0=='-'||(LA5_0>='0' && LA5_0<='9')) ) {
-                        alt5=1;
-                    }
-                    switch (alt5) {
-                        case 1 :
-                            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:129:22: INT
-                            {
-                            mINT(); 
-
-                            }
-                            break;
-
-                    }
-
-
-                    }
-                    break;
-                case 2 :
-                    // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:130:13: '..' INT
-                    {
-                    match(".."); 
-
-                    mINT(); 
-
-                    }
-                    break;
-
-            }
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "INT_RANGE"
-
-    // $ANTLR start "RANGE"
-    public final void mRANGE() throws RecognitionException {
-        try {
-            int _type = RANGE;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:132:11: ( FLOAT '..' ( FLOAT | INT )? | '..' FLOAT | INT '..' FLOAT )
-            int alt8=3;
-            alt8 = dfa8.predict(input);
-            switch (alt8) {
-                case 1 :
-                    // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:132:13: FLOAT '..' ( FLOAT | INT )?
-                    {
-                    mFLOAT(); 
-                    match(".."); 
-
-                    // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:132:24: ( FLOAT | INT )?
-                    int alt7=3;
-                    alt7 = dfa7.predict(input);
-                    switch (alt7) {
-                        case 1 :
-                            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:132:25: FLOAT
-                            {
-                            mFLOAT(); 
-
-                            }
-                            break;
-                        case 2 :
-                            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:132:33: INT
-                            {
-                            mINT(); 
-
-                            }
-                            break;
-
-                    }
-
-
-                    }
-                    break;
-                case 2 :
-                    // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:133:13: '..' FLOAT
-                    {
-                    match(".."); 
-
-                    mFLOAT(); 
-
-                    }
-                    break;
-                case 3 :
-                    // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:134:13: INT '..' FLOAT
-                    {
-                    mINT(); 
-                    match(".."); 
-
-                    mFLOAT(); 
-
-                    }
-                    break;
-
-            }
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "RANGE"
-
-    // $ANTLR start "NEWLINE"
-    public final void mNEWLINE() throws RecognitionException {
-        try {
-            int _type = NEWLINE;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-             int spaces = 0; 
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:139:5: ( '\\n' ( ' ' | '//' (~ ( '\\n' ) )* '\\n' | '/*' ( options {greedy=false; } : . )* '*/' | '\\r' | '\\n' )* )
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:139:7: '\\n' ( ' ' | '//' (~ ( '\\n' ) )* '\\n' | '/*' ( options {greedy=false; } : . )* '*/' | '\\r' | '\\n' )*
-            {
-            match('\n'); 
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:140:7: ( ' ' | '//' (~ ( '\\n' ) )* '\\n' | '/*' ( options {greedy=false; } : . )* '*/' | '\\r' | '\\n' )*
-            loop11:
-            do {
-                int alt11=6;
-                switch ( input.LA(1) ) {
-                case ' ':
-                    {
-                    alt11=1;
-                    }
-                    break;
-                case '/':
-                    {
-                    int LA11_3 = input.LA(2);
-
-                    if ( (LA11_3=='/') ) {
-                        alt11=2;
-                    }
-                    else if ( (LA11_3=='*') ) {
-                        alt11=3;
-                    }
-
-
-                    }
-                    break;
-                case '\r':
-                    {
-                    alt11=4;
-                    }
-                    break;
-                case '\n':
-                    {
-                    alt11=5;
-                    }
-                    break;
-
-                }
-
-                switch (alt11) {
-               case 1 :
-                   // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:140:9: ' '
-                   {
-                   match(' '); 
-                    ++spaces; 
-
-                   }
-                   break;
-               case 2 :
-                   // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:141:9: '//' (~ ( '\\n' ) )* '\\n'
-                   {
-                   match("//"); 
-
-                   // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:141:14: (~ ( '\\n' ) )*
-                   loop9:
-                   do {
-                       int alt9=2;
-                       int LA9_0 = input.LA(1);
-
-                       if ( ((LA9_0>='\u0000' && LA9_0<='\t')||(LA9_0>='\u000B' && LA9_0<='\uFFFF')) ) {
-                           alt9=1;
-                       }
-
-
-                       switch (alt9) {
-                       case 1 :
-                           // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:141:14: ~ ( '\\n' )
-                           {
-                           if ( (input.LA(1)>='\u0000' && input.LA(1)<='\t')||(input.LA(1)>='\u000B' && input.LA(1)<='\uFFFF') ) {
-                               input.consume();
-
-                           }
-                           else {
-                               MismatchedSetException mse = new MismatchedSetException(null,input);
-                               recover(mse);
-                               throw mse;}
-
-
-                           }
-                           break;
-
-                       default :
-                           break loop9;
-                       }
-                   } while (true);
-
-                   match('\n'); 
-                    spaces = 0; 
-
-                   }
-                   break;
-               case 3 :
-                   // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:142:9: '/*' ( options {greedy=false; } : . )* '*/'
-                   {
-                   match("/*"); 
-
-                   // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:142:14: ( options {greedy=false; } : . )*
-                   loop10:
-                   do {
-                       int alt10=2;
-                       int LA10_0 = input.LA(1);
-
-                       if ( (LA10_0=='*') ) {
-                           int LA10_1 = input.LA(2);
-
-                           if ( (LA10_1=='/') ) {
-                               alt10=2;
-                           }
-                           else if ( ((LA10_1>='\u0000' && LA10_1<='.')||(LA10_1>='0' && LA10_1<='\uFFFF')) ) {
-                               alt10=1;
-                           }
-
-
-                       }
-                       else if ( ((LA10_0>='\u0000' && LA10_0<=')')||(LA10_0>='+' && LA10_0<='\uFFFF')) ) {
-                           alt10=1;
-                       }
-
-
-                       switch (alt10) {
-                       case 1 :
-                           // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:142:42: .
-                           {
-                           matchAny(); 
-
-                           }
-                           break;
-
-                       default :
-                           break loop10;
-                       }
-                   } while (true);
-
-                   match("*/"); 
-
-
-                   }
-                   break;
-               case 4 :
-                   // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:143:9: '\\r'
-                   {
-                   match('\r'); 
-
-                   }
-                   break;
-               case 5 :
-                   // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:144:9: '\\n'
-                   {
-                   match('\n'); 
-                    spaces = 0; 
-
-                   }
-                   break;
-
-               default :
-                   break loop11;
-                }
-            } while (true);
-
-             
-                      int c = input.LA(1);
-                      
-                      if(inParen > 0) {
-                          _channel = HIDDEN;
-                      }
-                      else if(c == EOF) {
-                          while(iStack.size() > 1) {
-                              iStack.removeAt(iStack.size()-1);
-                              state.type = DEDENT;
-                              emit();
-                          }
-                          _channel = HIDDEN;
-                          iStack.clear();
-                      }
-                      else {
-                          int stackTop = iStack.get(iStack.size()-1);
-                          if(spaces > stackTop) {
-                              iStack.add(spaces);
-                              _type = INDENT;
-                          }
-                          else if(spaces < stackTop) {
-                              while(spaces < iStack.get(iStack.size()-1)) {
-                                  iStack.removeAt(iStack.size()-1);
-                                  state.type = DEDENT;
-                                  emit();
-                              }
-                              state.type = NEWLINE;
-                              emit();
-                              // TODO check that spaces == iStack.get(iStack.size()-1)
-                          }
-                      }
-                  
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "NEWLINE"
-
-    // $ANTLR start "INDENT"
-    public final void mINDENT() throws RecognitionException {
-        try {
-            int _type = INDENT;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:181:7: ({...}? => 'INDENT' )
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:181:9: {...}? => 'INDENT'
-            {
-            if ( !(( false )) ) {
-                throw new FailedPredicateException(input, "INDENT", " false ");
-            }
-            match("INDENT"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "INDENT"
-
-    // $ANTLR start "DEDENT"
-    public final void mDEDENT() throws RecognitionException {
-        try {
-            int _type = DEDENT;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:182:7: ({...}? => 'DEDENT' )
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:182:9: {...}? => 'DEDENT'
-            {
-            if ( !(( false )) ) {
-                throw new FailedPredicateException(input, "DEDENT", " false ");
-            }
-            match("DEDENT"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "DEDENT"
-
-    // $ANTLR start "INT"
-    public final void mINT() throws RecognitionException {
-        try {
-            int _type = INT;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:184:5: ( ( '-' )? ( '0' .. '9' )+ )
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:184:7: ( '-' )? ( '0' .. '9' )+
-            {
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:184:7: ( '-' )?
-            int alt12=2;
-            int LA12_0 = input.LA(1);
-
-            if ( (LA12_0=='-') ) {
-                alt12=1;
-            }
-            switch (alt12) {
-                case 1 :
-                    // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:184:7: '-'
-                    {
-                    match('-'); 
-
-                    }
-                    break;
-
-            }
-
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:184:12: ( '0' .. '9' )+
-            int cnt13=0;
-            loop13:
-            do {
-                int alt13=2;
-                int LA13_0 = input.LA(1);
-
-                if ( ((LA13_0>='0' && LA13_0<='9')) ) {
-                    alt13=1;
-                }
-
-
-                switch (alt13) {
-               case 1 :
-                   // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:184:12: '0' .. '9'
-                   {
-                   matchRange('0','9'); 
-
-                   }
-                   break;
-
-               default :
-                   if ( cnt13 >= 1 ) break loop13;
-                        EarlyExitException eee =
-                            new EarlyExitException(13, input);
-                        throw eee;
-                }
-                cnt13++;
-            } while (true);
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "INT"
-
-    // $ANTLR start "FLOAT"
-    public final void mFLOAT() throws RecognitionException {
-        try {
-            int _type = FLOAT;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:188:5: ( ( '-' )? ( ( '0' .. '9' )+ '.' ( '0' .. '9' )* ( EXPONENT )? | ( '0' .. '9' )+ EXPONENT ) )
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:188:7: ( '-' )? ( ( '0' .. '9' )+ '.' ( '0' .. '9' )* ( EXPONENT )? | ( '0' .. '9' )+ EXPONENT )
-            {
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:188:7: ( '-' )?
-            int alt14=2;
-            int LA14_0 = input.LA(1);
-
-            if ( (LA14_0=='-') ) {
-                alt14=1;
-            }
-            switch (alt14) {
-                case 1 :
-                    // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:188:7: '-'
-                    {
-                    match('-'); 
-
-                    }
-                    break;
-
-            }
-
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:189:5: ( ( '0' .. '9' )+ '.' ( '0' .. '9' )* ( EXPONENT )? | ( '0' .. '9' )+ EXPONENT )
-            int alt19=2;
-            alt19 = dfa19.predict(input);
-            switch (alt19) {
-                case 1 :
-                    // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:189:7: ( '0' .. '9' )+ '.' ( '0' .. '9' )* ( EXPONENT )?
-                    {
-                    // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:189:7: ( '0' .. '9' )+
-                    int cnt15=0;
-                    loop15:
-                    do {
-                        int alt15=2;
-                        int LA15_0 = input.LA(1);
-
-                        if ( ((LA15_0>='0' && LA15_0<='9')) ) {
-                            alt15=1;
-                        }
-
-
-                        switch (alt15) {
-                       case 1 :
-                           // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:189:8: '0' .. '9'
-                           {
-                           matchRange('0','9'); 
-
-                           }
-                           break;
-
-                       default :
-                           if ( cnt15 >= 1 ) break loop15;
-                                EarlyExitException eee =
-                                    new EarlyExitException(15, input);
-                                throw eee;
-                        }
-                        cnt15++;
-                    } while (true);
-
-                    match('.'); 
-                    // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:189:23: ( '0' .. '9' )*
-                    loop16:
-                    do {
-                        int alt16=2;
-                        int LA16_0 = input.LA(1);
-
-                        if ( ((LA16_0>='0' && LA16_0<='9')) ) {
-                            alt16=1;
-                        }
-
-
-                        switch (alt16) {
-                       case 1 :
-                           // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:189:24: '0' .. '9'
-                           {
-                           matchRange('0','9'); 
-
-                           }
-                           break;
-
-                       default :
-                           break loop16;
-                        }
-                    } while (true);
-
-                    // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:189:35: ( EXPONENT )?
-                    int alt17=2;
-                    int LA17_0 = input.LA(1);
-
-                    if ( (LA17_0=='E'||LA17_0=='e') ) {
-                        alt17=1;
-                    }
-                    switch (alt17) {
-                        case 1 :
-                            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:189:35: EXPONENT
-                            {
-                            mEXPONENT(); 
-
-                            }
-                            break;
-
-                    }
-
-
-                    }
-                    break;
-                case 2 :
-                    // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:190:7: ( '0' .. '9' )+ EXPONENT
-                    {
-                    // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:190:7: ( '0' .. '9' )+
-                    int cnt18=0;
-                    loop18:
-                    do {
-                        int alt18=2;
-                        int LA18_0 = input.LA(1);
-
-                        if ( ((LA18_0>='0' && LA18_0<='9')) ) {
-                            alt18=1;
-                        }
-
-
-                        switch (alt18) {
-                       case 1 :
-                           // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:190:8: '0' .. '9'
-                           {
-                           matchRange('0','9'); 
-
-                           }
-                           break;
-
-                       default :
-                           if ( cnt18 >= 1 ) break loop18;
-                                EarlyExitException eee =
-                                    new EarlyExitException(18, input);
-                                throw eee;
-                        }
-                        cnt18++;
-                    } while (true);
-
-                    mEXPONENT(); 
-
-                    }
-                    break;
-
-            }
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "FLOAT"
-
-    // $ANTLR start "STRING"
-    public final void mSTRING() throws RecognitionException {
-        try {
-            int _type = STRING;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:195:5: ( '\"' ( ESC_SEQ | ~ ( '\\\\' | '\"' ) )* '\"' | '\"\"\"' (~ ( '\"' ) | '\"' ~ ( '\"' ) | '\"\"' ~ ( '\"' ) )* '\"\"\"' )
-            int alt22=2;
-            int LA22_0 = input.LA(1);
-
-            if ( (LA22_0=='\"') ) {
-                int LA22_1 = input.LA(2);
-
-                if ( (LA22_1=='\"') ) {
-                    int LA22_2 = input.LA(3);
-
-                    if ( (LA22_2=='\"') ) {
-                        alt22=2;
-                    }
-                    else {
-                        alt22=1;}
-                }
-                else if ( ((LA22_1>='\u0000' && LA22_1<='!')||(LA22_1>='#' && LA22_1<='\uFFFF')) ) {
-                    alt22=1;
-                }
-                else {
-                    NoViableAltException nvae =
-                        new NoViableAltException("", 22, 1, input);
-
-                    throw nvae;
-                }
-            }
-            else {
-                NoViableAltException nvae =
-                    new NoViableAltException("", 22, 0, input);
-
-                throw nvae;
-            }
-            switch (alt22) {
-                case 1 :
-                    // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:195:8: '\"' ( ESC_SEQ | ~ ( '\\\\' | '\"' ) )* '\"'
-                    {
-                    match('\"'); 
-                    // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:195:12: ( ESC_SEQ | ~ ( '\\\\' | '\"' ) )*
-                    loop20:
-                    do {
-                        int alt20=3;
-                        int LA20_0 = input.LA(1);
-
-                        if ( (LA20_0=='\\') ) {
-                            alt20=1;
-                        }
-                        else if ( ((LA20_0>='\u0000' && LA20_0<='!')||(LA20_0>='#' && LA20_0<='[')||(LA20_0>=']' && LA20_0<='\uFFFF')) ) {
-                            alt20=2;
-                        }
-
-
-                        switch (alt20) {
-                       case 1 :
-                           // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:195:14: ESC_SEQ
-                           {
-                           mESC_SEQ(); 
-
-                           }
-                           break;
-                       case 2 :
-                           // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:195:24: ~ ( '\\\\' | '\"' )
-                           {
-                           if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) {
-                               input.consume();
-
-                           }
-                           else {
-                               MismatchedSetException mse = new MismatchedSetException(null,input);
-                               recover(mse);
-                               throw mse;}
-
-
-                           }
-                           break;
-
-                       default :
-                           break loop20;
-                        }
-                    } while (true);
-
-                    match('\"'); 
-
-                    }
-                    break;
-                case 2 :
-                    // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:196:8: '\"\"\"' (~ ( '\"' ) | '\"' ~ ( '\"' ) | '\"\"' ~ ( '\"' ) )* '\"\"\"'
-                    {
-                    match("\"\"\""); 
-
-                    // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:196:14: (~ ( '\"' ) | '\"' ~ ( '\"' ) | '\"\"' ~ ( '\"' ) )*
-                    loop21:
-                    do {
-                        int alt21=4;
-                        int LA21_0 = input.LA(1);
-
-                        if ( (LA21_0=='\"') ) {
-                            int LA21_1 = input.LA(2);
-
-                            if ( (LA21_1=='\"') ) {
-                                int LA21_3 = input.LA(3);
-
-                                if ( ((LA21_3>='\u0000' && LA21_3<='!')||(LA21_3>='#' && LA21_3<='\uFFFF')) ) {
-                                    alt21=3;
-                                }
-
-
-                            }
-                            else if ( ((LA21_1>='\u0000' && LA21_1<='!')||(LA21_1>='#' && LA21_1<='\uFFFF')) ) {
-                                alt21=2;
-                            }
-
-
-                        }
-                        else if ( ((LA21_0>='\u0000' && LA21_0<='!')||(LA21_0>='#' && LA21_0<='\uFFFF')) ) {
-                            alt21=1;
-                        }
-
-
-                        switch (alt21) {
-                       case 1 :
-                           // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:196:16: ~ ( '\"' )
-                           {
-                           if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='\uFFFF') ) {
-                               input.consume();
-
-                           }
-                           else {
-                               MismatchedSetException mse = new MismatchedSetException(null,input);
-                               recover(mse);
-                               throw mse;}
-
-
-                           }
-                           break;
-                       case 2 :
-                           // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:196:25: '\"' ~ ( '\"' )
-                           {
-                           match('\"'); 
-                           if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='\uFFFF') ) {
-                               input.consume();
-
-                           }
-                           else {
-                               MismatchedSetException mse = new MismatchedSetException(null,input);
-                               recover(mse);
-                               throw mse;}
-
-
-                           }
-                           break;
-                       case 3 :
-                           // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:196:38: '\"\"' ~ ( '\"' )
-                           {
-                           match("\"\""); 
-
-                           if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='\uFFFF') ) {
-                               input.consume();
-
-                           }
-                           else {
-                               MismatchedSetException mse = new MismatchedSetException(null,input);
-                               recover(mse);
-                               throw mse;}
-
-
-                           }
-                           break;
-
-                       default :
-                           break loop21;
-                        }
-                    } while (true);
-
-                    match("\"\"\""); 
-
-
-                    }
-                    break;
-
-            }
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "STRING"
-
-    // $ANTLR start "URI"
-    public final void mURI() throws RecognitionException {
-        try {
-            int _type = URI;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:200:5: ( '<http:' (~ ( '>' ) )* '>' )
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:200:8: '<http:' (~ ( '>' ) )* '>'
-            {
-            match("<http:"); 
-
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:200:17: (~ ( '>' ) )*
-            loop23:
-            do {
-                int alt23=2;
-                int LA23_0 = input.LA(1);
-
-                if ( ((LA23_0>='\u0000' && LA23_0<='=')||(LA23_0>='?' && LA23_0<='\uFFFF')) ) {
-                    alt23=1;
-                }
-
-
-                switch (alt23) {
-               case 1 :
-                   // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:200:19: ~ ( '>' )
-                   {
-                   if ( (input.LA(1)>='\u0000' && input.LA(1)<='=')||(input.LA(1)>='?' && input.LA(1)<='\uFFFF') ) {
-                       input.consume();
-
-                   }
-                   else {
-                       MismatchedSetException mse = new MismatchedSetException(null,input);
-                       recover(mse);
-                       throw mse;}
-
-
-                   }
-                   break;
-
-               default :
-                   break loop23;
-                }
-            } while (true);
-
-            match('>'); 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "URI"
-
-    // $ANTLR start "EXPONENT"
-    public final void mEXPONENT() throws RecognitionException {
-        try {
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:204:10: ( ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+ )
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:204:12: ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+
-            {
-            if ( input.LA(1)=='E'||input.LA(1)=='e' ) {
-                input.consume();
-
-            }
-            else {
-                MismatchedSetException mse = new MismatchedSetException(null,input);
-                recover(mse);
-                throw mse;}
-
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:204:22: ( '+' | '-' )?
-            int alt24=2;
-            int LA24_0 = input.LA(1);
-
-            if ( (LA24_0=='+'||LA24_0=='-') ) {
-                alt24=1;
-            }
-            switch (alt24) {
-                case 1 :
-                    // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:
-                    {
-                    if ( input.LA(1)=='+'||input.LA(1)=='-' ) {
-                        input.consume();
-
-                    }
-                    else {
-                        MismatchedSetException mse = new MismatchedSetException(null,input);
-                        recover(mse);
-                        throw mse;}
-
-
-                    }
-                    break;
-
-            }
-
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:204:33: ( '0' .. '9' )+
-            int cnt25=0;
-            loop25:
-            do {
-                int alt25=2;
-                int LA25_0 = input.LA(1);
-
-                if ( ((LA25_0>='0' && LA25_0<='9')) ) {
-                    alt25=1;
-                }
-
-
-                switch (alt25) {
-               case 1 :
-                   // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:204:34: '0' .. '9'
-                   {
-                   matchRange('0','9'); 
-
-                   }
-                   break;
-
-               default :
-                   if ( cnt25 >= 1 ) break loop25;
-                        EarlyExitException eee =
-                            new EarlyExitException(25, input);
-                        throw eee;
-                }
-                cnt25++;
-            } while (true);
-
-
-            }
-
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "EXPONENT"
-
-    // $ANTLR start "HEX_DIGIT"
-    public final void mHEX_DIGIT() throws RecognitionException {
-        try {
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:207:11: ( ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:207:13: ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' )
-            {
-            if ( (input.LA(1)>='0' && input.LA(1)<='9')||(input.LA(1)>='A' && input.LA(1)<='F')||(input.LA(1)>='a' && input.LA(1)<='f') ) {
-                input.consume();
-
-            }
-            else {
-                MismatchedSetException mse = new MismatchedSetException(null,input);
-                recover(mse);
-                throw mse;}
-
-
-            }
-
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "HEX_DIGIT"
-
-    // $ANTLR start "ESC_SEQ"
-    public final void mESC_SEQ() throws RecognitionException {
-        try {
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:211:5: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' ) | UNICODE_ESC )
-            int alt26=2;
-            int LA26_0 = input.LA(1);
-
-            if ( (LA26_0=='\\') ) {
-                int LA26_1 = input.LA(2);
-
-                if ( (LA26_1=='\"'||LA26_1=='\''||LA26_1=='\\'||LA26_1=='b'||LA26_1=='f'||LA26_1=='n'||LA26_1=='r'||LA26_1=='t') ) {
-                    alt26=1;
-                }
-                else if ( (LA26_1=='u') ) {
-                    alt26=2;
-                }
-                else {
-                    NoViableAltException nvae =
-                        new NoViableAltException("", 26, 1, input);
-
-                    throw nvae;
-                }
-            }
-            else {
-                NoViableAltException nvae =
-                    new NoViableAltException("", 26, 0, input);
-
-                throw nvae;
-            }
-            switch (alt26) {
-                case 1 :
-                    // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:211:9: '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' )
-                    {
-                    match('\\'); 
-                    if ( input.LA(1)=='\"'||input.LA(1)=='\''||input.LA(1)=='\\'||input.LA(1)=='b'||input.LA(1)=='f'||input.LA(1)=='n'||input.LA(1)=='r'||input.LA(1)=='t' ) {
-                        input.consume();
-
-                    }
-                    else {
-                        MismatchedSetException mse = new MismatchedSetException(null,input);
-                        recover(mse);
-                        throw mse;}
-
-
-                    }
-                    break;
-                case 2 :
-                    // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:212:9: UNICODE_ESC
-                    {
-                    mUNICODE_ESC(); 
-
-                    }
-                    break;
-
-            }
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "ESC_SEQ"
-
-    // $ANTLR start "UNICODE_ESC"
-    public final void mUNICODE_ESC() throws RecognitionException {
-        try {
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:217:5: ( '\\\\' 'u' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT )
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:217:9: '\\\\' 'u' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT
-            {
-            match('\\'); 
-            match('u'); 
-            mHEX_DIGIT(); 
-            mHEX_DIGIT(); 
-            mHEX_DIGIT(); 
-            mHEX_DIGIT(); 
-
-            }
-
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "UNICODE_ESC"
-
-    public void mTokens() throws RecognitionException {
-        // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:1:8: ( T__65 | T__66 | T__67 | T__68 | T__69 | T__70 | T__71 | T__72 | T__73 | T__74 | T__75 | T__76 | T__77 | T__78 | T__79 | T__80 | ID | COMMENT | WS | LPAREN | RPAREN | LBRACKET | RBRACKET | LCURLY | RCURLY | INT_RANGE | RANGE | NEWLINE | INDENT | DEDENT | INT | FLOAT | STRING | URI )
-        int alt27=34;
-        alt27 = dfa27.predict(input);
-        switch (alt27) {
-            case 1 :
-                // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:1:10: T__65
-                {
-                mT__65(); 
-
-                }
-                break;
-            case 2 :
-                // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:1:16: T__66
-                {
-                mT__66(); 
-
-                }
-                break;
-            case 3 :
-                // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:1:22: T__67
-                {
-                mT__67(); 
-
-                }
-                break;
-            case 4 :
-                // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:1:28: T__68
-                {
-                mT__68(); 
-
-                }
-                break;
-            case 5 :
-                // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:1:34: T__69
-                {
-                mT__69(); 
-
-                }
-                break;
-            case 6 :
-                // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:1:40: T__70
-                {
-                mT__70(); 
-
-                }
-                break;
-            case 7 :
-                // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:1:46: T__71
-                {
-                mT__71(); 
-
-                }
-                break;
-            case 8 :
-                // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:1:52: T__72
-                {
-                mT__72(); 
-
-                }
-                break;
-            case 9 :
-                // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:1:58: T__73
-                {
-                mT__73(); 
-
-                }
-                break;
-            case 10 :
-                // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:1:64: T__74
-                {
-                mT__74(); 
-
-                }
-                break;
-            case 11 :
-                // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:1:70: T__75
-                {
-                mT__75(); 
-
-                }
-                break;
-            case 12 :
-                // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:1:76: T__76
-                {
-                mT__76(); 
-
-                }
-                break;
-            case 13 :
-                // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:1:82: T__77
-                {
-                mT__77(); 
-
-                }
-                break;
-            case 14 :
-                // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:1:88: T__78
-                {
-                mT__78(); 
-
-                }
-                break;
-            case 15 :
-                // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:1:94: T__79
-                {
-                mT__79(); 
-
-                }
-                break;
-            case 16 :
-                // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:1:100: T__80
-                {
-                mT__80(); 
-
-                }
-                break;
-            case 17 :
-                // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:1:106: ID
-                {
-                mID(); 
-
-                }
-                break;
-            case 18 :
-                // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:1:109: COMMENT
-                {
-                mCOMMENT(); 
-
-                }
-                break;
-            case 19 :
-                // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:1:117: WS
-                {
-                mWS(); 
-
-                }
-                break;
-            case 20 :
-                // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:1:120: LPAREN
-                {
-                mLPAREN(); 
-
-                }
-                break;
-            case 21 :
-                // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:1:127: RPAREN
-                {
-                mRPAREN(); 
-
-                }
-                break;
-            case 22 :
-                // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:1:134: LBRACKET
-                {
-                mLBRACKET(); 
-
-                }
-                break;
-            case 23 :
-                // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:1:143: RBRACKET
-                {
-                mRBRACKET(); 
-
-                }
-                break;
-            case 24 :
-                // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:1:152: LCURLY
-                {
-                mLCURLY(); 
-
-                }
-                break;
-            case 25 :
-                // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:1:159: RCURLY
-                {
-                mRCURLY(); 
-
-                }
-                break;
-            case 26 :
-                // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:1:166: INT_RANGE
-                {
-                mINT_RANGE(); 
-
-                }
-                break;
-            case 27 :
-                // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:1:176: RANGE
-                {
-                mRANGE(); 
-
-                }
-                break;
-            case 28 :
-                // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:1:182: NEWLINE
-                {
-                mNEWLINE(); 
-
-                }
-                break;
-            case 29 :
-                // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:1:190: INDENT
-                {
-                mINDENT(); 
-
-                }
-                break;
-            case 30 :
-                // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:1:197: DEDENT
-                {
-                mDEDENT(); 
-
-                }
-                break;
-            case 31 :
-                // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:1:204: INT
-                {
-                mINT(); 
-
-                }
-                break;
-            case 32 :
-                // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:1:208: FLOAT
-                {
-                mFLOAT(); 
-
-                }
-                break;
-            case 33 :
-                // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:1:214: STRING
-                {
-                mSTRING(); 
-
-                }
-                break;
-            case 34 :
-                // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:1:221: URI
-                {
-                mURI(); 
-
-                }
-                break;
-
-        }
-
-    }
-
-
-    protected DFA8 dfa8 = new DFA8(this);
-    protected DFA7 dfa7 = new DFA7(this);
-    protected DFA19 dfa19 = new DFA19(this);
-    protected DFA27 dfa27 = new DFA27(this);
-    static final String DFA8_eotS =
-        "\10\uffff";
-    static final String DFA8_eofS =
-        "\10\uffff";
-    static final String DFA8_minS =
-        "\1\55\1\60\1\56\1\uffff\1\56\1\uffff\1\55\1\uffff";
-    static final String DFA8_maxS =
-        "\2\71\1\145\1\uffff\1\145\1\uffff\1\71\1\uffff";
-    static final String DFA8_acceptS =
-        "\3\uffff\1\2\1\uffff\1\1\1\uffff\1\3";
-    static final String DFA8_specialS =
-        "\10\uffff}>";
-    static final String[] DFA8_transitionS = {
-            "\1\1\1\3\1\uffff\12\2",
-            "\12\2",
-            "\1\4\1\uffff\12\2\13\uffff\1\5\37\uffff\1\5",
-            "",
-            "\1\6\1\uffff\12\5\13\uffff\1\5\37\uffff\1\5",
-            "",
-            "\1\7\1\5\1\uffff\12\7",
-            ""
-    };
-
-    static final short[] DFA8_eot = DFA.unpackEncodedString(DFA8_eotS);
-    static final short[] DFA8_eof = DFA.unpackEncodedString(DFA8_eofS);
-    static final char[] DFA8_min = DFA.unpackEncodedStringToUnsignedChars(DFA8_minS);
-    static final char[] DFA8_max = DFA.unpackEncodedStringToUnsignedChars(DFA8_maxS);
-    static final short[] DFA8_accept = DFA.unpackEncodedString(DFA8_acceptS);
-    static final short[] DFA8_special = DFA.unpackEncodedString(DFA8_specialS);
-    static final short[][] DFA8_transition;
-
-    static {
-        int numStates = DFA8_transitionS.length;
-        DFA8_transition = new short[numStates][];
-        for (int i=0; i<numStates; i++) {
-            DFA8_transition[i] = DFA.unpackEncodedString(DFA8_transitionS[i]);
-        }
-    }
-
-    class DFA8 extends DFA {
-
-        public DFA8(BaseRecognizer recognizer) {
-            this.recognizer = recognizer;
-            this.decisionNumber = 8;
-            this.eot = DFA8_eot;
-            this.eof = DFA8_eof;
-            this.min = DFA8_min;
-            this.max = DFA8_max;
-            this.accept = DFA8_accept;
-            this.special = DFA8_special;
-            this.transition = DFA8_transition;
-        }
-        public String getDescription() {
-            return "132:1: RANGE : ( FLOAT '..' ( FLOAT | INT )? | '..' FLOAT | INT '..' FLOAT );";
-        }
-    }
-    static final String DFA7_eotS =
-        "\1\3\1\uffff\1\5\3\uffff";
-    static final String DFA7_eofS =
-        "\6\uffff";
-    static final String DFA7_minS =
-        "\1\55\1\60\1\56\3\uffff";
-    static final String DFA7_maxS =
-        "\2\71\1\145\3\uffff";
-    static final String DFA7_acceptS =
-        "\3\uffff\1\3\1\1\1\2";
-    static final String DFA7_specialS =
-        "\6\uffff}>";
-    static final String[] DFA7_transitionS = {
-            "\1\1\2\uffff\12\2",
-            "\12\2",
-            "\1\4\1\uffff\12\2\13\uffff\1\4\37\uffff\1\4",
-            "",
-            "",
-            ""
-    };
-
-    static final short[] DFA7_eot = DFA.unpackEncodedString(DFA7_eotS);
-    static final short[] DFA7_eof = DFA.unpackEncodedString(DFA7_eofS);
-    static final char[] DFA7_min = DFA.unpackEncodedStringToUnsignedChars(DFA7_minS);
-    static final char[] DFA7_max = DFA.unpackEncodedStringToUnsignedChars(DFA7_maxS);
-    static final short[] DFA7_accept = DFA.unpackEncodedString(DFA7_acceptS);
-    static final short[] DFA7_special = DFA.unpackEncodedString(DFA7_specialS);
-    static final short[][] DFA7_transition;
-
-    static {
-        int numStates = DFA7_transitionS.length;
-        DFA7_transition = new short[numStates][];
-        for (int i=0; i<numStates; i++) {
-            DFA7_transition[i] = DFA.unpackEncodedString(DFA7_transitionS[i]);
-        }
-    }
-
-    class DFA7 extends DFA {
-
-        public DFA7(BaseRecognizer recognizer) {
-            this.recognizer = recognizer;
-            this.decisionNumber = 7;
-            this.eot = DFA7_eot;
-            this.eof = DFA7_eof;
-            this.min = DFA7_min;
-            this.max = DFA7_max;
-            this.accept = DFA7_accept;
-            this.special = DFA7_special;
-            this.transition = DFA7_transition;
-        }
-        public String getDescription() {
-            return "132:24: ( FLOAT | INT )?";
-        }
-    }
-    static final String DFA19_eotS =
-        "\4\uffff";
-    static final String DFA19_eofS =
-        "\4\uffff";
-    static final String DFA19_minS =
-        "\1\60\1\56\2\uffff";
-    static final String DFA19_maxS =
-        "\1\71\1\145\2\uffff";
-    static final String DFA19_acceptS =
-        "\2\uffff\1\1\1\2";
-    static final String DFA19_specialS =
-        "\4\uffff}>";
-    static final String[] DFA19_transitionS = {
-            "\12\1",
-            "\1\2\1\uffff\12\1\13\uffff\1\3\37\uffff\1\3",
-            "",
-            ""
-    };
-
-    static final short[] DFA19_eot = DFA.unpackEncodedString(DFA19_eotS);
-    static final short[] DFA19_eof = DFA.unpackEncodedString(DFA19_eofS);
-    static final char[] DFA19_min = DFA.unpackEncodedStringToUnsignedChars(DFA19_minS);
-    static final char[] DFA19_max = DFA.unpackEncodedStringToUnsignedChars(DFA19_maxS);
-    static final short[] DFA19_accept = DFA.unpackEncodedString(DFA19_acceptS);
-    static final short[] DFA19_special = DFA.unpackEncodedString(DFA19_specialS);
-    static final short[][] DFA19_transition;
-
-    static {
-        int numStates = DFA19_transitionS.length;
-        DFA19_transition = new short[numStates][];
-        for (int i=0; i<numStates; i++) {
-            DFA19_transition[i] = DFA.unpackEncodedString(DFA19_transitionS[i]);
-        }
-    }
-
-    class DFA19 extends DFA {
-
-        public DFA19(BaseRecognizer recognizer) {
-            this.recognizer = recognizer;
-            this.decisionNumber = 19;
-            this.eot = DFA19_eot;
-            this.eof = DFA19_eof;
-            this.min = DFA19_min;
-            this.max = DFA19_max;
-            this.accept = DFA19_accept;
-            this.special = DFA19_special;
-            this.transition = DFA19_transition;
-        }
-        public String getDescription() {
-            return "189:5: ( ( '0' .. '9' )+ '.' ( '0' .. '9' )* ( EXPONENT )? | ( '0' .. '9' )+ EXPONENT )";
-        }
-    }
-    static final String DFA27_eotS =
-        "\2\uffff\1\35\2\uffff\1\44\6\uffff\3\32\10\uffff\1\50\1\uffff\1"+
-        "\32\13\uffff\3\32\1\uffff\1\64\1\uffff\1\32\1\uffff\1\70\3\32\1"+
-        "\70\1\64\3\uffff\1\64\1\32\2\uffff\1\102\2\32\1\uffff\1\70\1\uffff"+
-        "\1\64\1\32\1\uffff\1\106\2\32\1\uffff\1\111\1\112\4\uffff";
-    static final String DFA27_eofS =
-        "\115\uffff";
-    static final String DFA27_minS =
-        "\1\11\1\uffff\1\56\2\55\1\75\6\uffff\1\162\1\141\1\116\10\uffff"+
-        "\1\56\1\uffff\1\105\2\uffff\1\55\10\uffff\1\165\1\154\1\104\1\uffff"+
-        "\1\56\1\53\1\104\1\60\1\56\1\145\1\163\1\105\1\55\1\56\1\53\1\uffff"+
-        "\1\60\1\56\1\105\2\uffff\1\60\1\145\1\116\1\60\1\56\1\60\1\56\1"+
-        "\116\1\uffff\1\60\2\124\1\uffff\2\60\2\0\2\uffff";
-    static final String DFA27_maxS =
-        "\1\175\1\uffff\1\56\1\150\1\71\1\75\6\uffff\1\162\1\141\1\116\10"+
-        "\uffff\1\145\1\uffff\1\105\2\uffff\1\71\10\uffff\1\165\1\154\1\104"+
-        "\1\uffff\1\145\1\71\1\104\1\71\2\145\1\163\1\105\1\71\1\145\1\71"+
-        "\1\uffff\2\71\1\105\2\uffff\1\172\1\145\1\116\1\71\1\145\2\71\1"+
-        "\116\1\uffff\1\172\2\124\1\uffff\2\172\2\0\2\uffff";
-    static final String DFA27_acceptS =
-        "\1\uffff\1\1\4\uffff\1\10\1\11\1\13\1\14\1\15\1\16\3\uffff\1\22"+
-        "\1\23\1\24\1\25\1\26\1\27\1\30\1\31\1\uffff\1\34\1\uffff\1\21\1"+
-        "\41\1\uffff\1\2\1\3\1\4\1\5\1\42\1\6\1\7\1\12\3\uffff\1\37\13\uffff"+
-        "\1\40\3\uffff\1\32\1\33\10\uffff\1\17\3\uffff\1\20\4\uffff\1\35"+
-        "\1\36";
-    static final String DFA27_specialS =
-        "\111\uffff\1\1\1\0\2\uffff}>";
-    static final String[] DFA27_transitionS = {
-            "\1\20\1\30\2\uffff\1\20\22\uffff\1\20\1\uffff\1\33\1\uffff"+
-            "\1\11\1\10\2\uffff\1\21\1\22\2\uffff\1\13\1\4\1\2\1\17\12\27"+
-            "\1\7\1\uffff\1\3\1\5\1\6\1\uffff\1\1\3\32\1\31\4\32\1\16\21"+
-            "\32\1\23\1\uffff\1\24\1\uffff\1\32\1\uffff\5\32\1\15\15\32\1"+
-            "\14\6\32\1\25\1\12\1\26",
-            "",
-            "\1\34",
-            "\1\40\44\uffff\1\37\1\uffff\1\36\23\uffff\1\41",
-            "\1\42\2\uffff\12\27",
-            "\1\43",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "\1\45",
-            "\1\46",
-            "\1\47",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "\1\51\1\uffff\12\27\13\uffff\1\52\37\uffff\1\52",
-            "",
-            "\1\53",
-            "",
-            "",
-            "\1\54\2\uffff\12\55",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "\1\56",
-            "\1\57",
-            "\1\60",
-            "",
-            "\1\61\1\uffff\12\62\13\uffff\1\63\37\uffff\1\63",
-            "\1\65\1\uffff\1\65\2\uffff\12\66",
-            "\1\67",
-            "\12\55",
-            "\1\71\1\uffff\12\55\13\uffff\1\71\37\uffff\1\71",
-            "\1\72",
-            "\1\73",
-            "\1\74",
-            "\1\75\1\71\1\uffff\12\76",
-            "\1\71\1\uffff\12\62\13\uffff\1\63\37\uffff\1\63",
-            "\1\77\1\uffff\1\77\2\uffff\12\100",
-            "",
-            "\12\66",
-            "\1\71\1\uffff\12\66",
-            "\1\101",
-            "",
-            "",
-            "\12\32\7\uffff\32\32\4\uffff\1\32\1\uffff\32\32",
-            "\1\103",
-            "\1\104",
-            "\12\76",
-            "\1\71\1\uffff\12\76\13\uffff\1\71\37\uffff\1\71",
-            "\12\100",
-            "\1\71\1\uffff\12\100",
-            "\1\105",
-            "",
-            "\12\32\7\uffff\32\32\4\uffff\1\32\1\uffff\32\32",
-            "\1\107",
-            "\1\110",
-            "",
-            "\12\32\7\uffff\32\32\4\uffff\1\32\1\uffff\32\32",
-            "\12\32\7\uffff\32\32\4\uffff\1\32\1\uffff\32\32",
-            "\1\uffff",
-            "\1\uffff",
-            "",
-            ""
-    };
-
-    static final short[] DFA27_eot = DFA.unpackEncodedString(DFA27_eotS);
-    static final short[] DFA27_eof = DFA.unpackEncodedString(DFA27_eofS);
-    static final char[] DFA27_min = DFA.unpackEncodedStringToUnsignedChars(DFA27_minS);
-    static final char[] DFA27_max = DFA.unpackEncodedStringToUnsignedChars(DFA27_maxS);
-    static final short[] DFA27_accept = DFA.unpackEncodedString(DFA27_acceptS);
-    static final short[] DFA27_special = DFA.unpackEncodedString(DFA27_specialS);
-    static final short[][] DFA27_transition;
-
-    static {
-        int numStates = DFA27_transitionS.length;
-        DFA27_transition = new short[numStates][];
-        for (int i=0; i<numStates; i++) {
-            DFA27_transition[i] = DFA.unpackEncodedString(DFA27_transitionS[i]);
-        }
-    }
-
-    class DFA27 extends DFA {
-
-        public DFA27(BaseRecognizer recognizer) {
-            this.recognizer = recognizer;
-            this.decisionNumber = 27;
-            this.eot = DFA27_eot;
-            this.eof = DFA27_eof;
-            this.min = DFA27_min;
-            this.max = DFA27_max;
-            this.accept = DFA27_accept;
-            this.special = DFA27_special;
-            this.transition = DFA27_transition;
-        }
-        public String getDescription() {
-            return "1:1: Tokens : ( T__65 | T__66 | T__67 | T__68 | T__69 | T__70 | T__71 | T__72 | T__73 | T__74 | T__75 | T__76 | T__77 | T__78 | T__79 | T__80 | ID | COMMENT | WS | LPAREN | RPAREN | LBRACKET | RBRACKET | LCURLY | RCURLY | INT_RANGE | RANGE | NEWLINE | INDENT | DEDENT | INT | FLOAT | STRING | URI );";
-        }
-        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
-            IntStream input = _input;
-               int _s = s;
-            switch ( s ) {
-                    case 0 : 
-                        int LA27_74 = input.LA(1);
-
-                         
-                        int index27_74 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (!((( false )))) ) {s = 26;}
-
-                        else if ( (( false )) ) {s = 76;}
-
-                         
-                        input.seek(index27_74);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 1 : 
-                        int LA27_73 = input.LA(1);
-
-                         
-                        int index27_73 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (!((( false )))) ) {s = 26;}
-
-                        else if ( (( false )) ) {s = 75;}
-
-                         
-                        input.seek(index27_73);
-                        if ( s>=0 ) return s;
-                        break;
-            }
-            NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 27, _s, input);
-            error(nvae);
-            throw nvae;
-        }
-    }
+       public static final int EOF=-1;
+       public static final int T__65=65;
+       public static final int T__66=66;
+       public static final int T__67=67;
+       public static final int T__68=68;
+       public static final int T__69=69;
+       public static final int T__70=70;
+       public static final int T__71=71;
+       public static final int T__72=72;
+       public static final int T__73=73;
+       public static final int T__74=74;
+       public static final int T__75=75;
+       public static final int T__76=76;
+       public static final int T__77=77;
+       public static final int T__78=78;
+       public static final int T__79=79;
+       public static final int T__80=80;
+       public static final int ARRAY=4;
+       public static final int ARRAY_TYPE=5;
+       public static final int ASSIGNMENT=6;
+       public static final int BLANK=7;
+       public static final int COMMENT=8;
+       public static final int DEDENT=9;
+       public static final int DOMAIN_OF=10;
+       public static final int EMBEDDED_TYPE=11;
+       public static final int EMBEDDED_VALUE=12;
+       public static final int EQUALS=13;
+       public static final int ESC_SEQ=14;
+       public static final int EXPONENT=15;
+       public static final int FALSE=16;
+       public static final int FILE=17;
+       public static final int FLOAT=18;
+       public static final int HAS_DOMAIN=19;
+       public static final int HAS_RANGE=20;
+       public static final int HEX_DIGIT=21;
+       public static final int ID=22;
+       public static final int INDENT=23;
+       public static final int INHERITS=24;
+       public static final int INSTANCE_OF=25;
+       public static final int INT=26;
+       public static final int INT_RANGE=27;
+       public static final int LBRACKET=28;
+       public static final int LCURLY=29;
+       public static final int LPAREN=30;
+       public static final int MAP=31;
+       public static final int NEWLINE=32;
+       public static final int NO_VALUE=33;
+       public static final int PROPERTY=34;
+       public static final int RANGE=35;
+       public static final int RBRACKET=36;
+       public static final int RCURLY=37;
+       public static final int RECORD=38;
+       public static final int RECORD_TYPE=39;
+       public static final int REF=40;
+       public static final int REQUIRES_VALUE_TYPE=41;
+       public static final int RESOURCE=42;
+       public static final int RPAREN=43;
+       public static final int STRING=44;
+       public static final int SUBRELATION_OF=45;
+       public static final int TAGGED_VALUE=46;
+       public static final int TEMPLATE_DEFINITION=47;
+       public static final int TEMPLATE_INSTANCE=48;
+       public static final int TRUE=49;
+       public static final int TUPLE=50;
+       public static final int TUPLE_TYPE=51;
+       public static final int TYPE_ANNOTATION=52;
+       public static final int TYPE_COMPONENT=53;
+       public static final int TYPE_DEFINITION=54;
+       public static final int TYPE_DEFINITIONS=55;
+       public static final int TYPE_REFERENCE=56;
+       public static final int UNICODE_ESC=57;
+       public static final int UNION_TYPE=58;
+       public static final int URI=59;
+       public static final int VALUE_DEFINITION=60;
+       public static final int VALUE_DEFINITIONS=61;
+       public static final int VARIABLE=62;
+       public static final int VARIANT=63;
+       public static final int WS=64;
+
+       int inParen = 0;
+
+       TIntArrayList iStack = new TIntArrayList();
+       { iStack.add(0); }
+
+       List tokens = new ArrayList();
+       public void emit(Token token) {
+           state.token = token;
+           tokens.add(token);
+       }
+       public Token nextToken() {
+           if(tokens.isEmpty()) {
+               super.nextToken();
+               if ( tokens.isEmpty() ) {
+                   /* When end-of-file is encountered, we 
+                      emit balancing number of DEDENT tokens.
+                   */
+                   if(iStack.size() <= 1)
+                       return getEOFToken();
+                   else {                
+                       while(iStack.size() > 1) {
+                           iStack.removeAt(iStack.size()-1);
+                           state.type = DEDENT;
+                           emit();
+                       }
+                       iStack.clear();
+                   }
+               } 
+           }
+           return (Token)tokens.remove(0);
+       }
+
+
+
+       // delegates
+       // delegators
+       public Lexer[] getDelegates() {
+               return new Lexer[] {};
+       }
+
+       public GraphLexer() {} 
+       public GraphLexer(CharStream input) {
+               this(input, new RecognizerSharedState());
+       }
+       public GraphLexer(CharStream input, RecognizerSharedState state) {
+               super(input,state);
+       }
+       @Override public String getGrammarFileName() { return "src/org/simantics/graph/compiler/internal/parsing/Graph.g"; }
+
+       // $ANTLR start "T__65"
+       public final void mT__65() throws RecognitionException {
+               try {
+                       int _type = T__65;
+                       int _channel = DEFAULT_TOKEN_CHANNEL;
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:46:7: ( '$' )
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:46:9: '$'
+                       {
+                       match('$'); 
+                       }
+
+                       state.type = _type;
+                       state.channel = _channel;
+               }
+               finally {
+                       // do for sure before leaving
+               }
+       }
+       // $ANTLR end "T__65"
+
+       // $ANTLR start "T__66"
+       public final void mT__66() throws RecognitionException {
+               try {
+                       int _type = T__66;
+                       int _channel = DEFAULT_TOKEN_CHANNEL;
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:47:7: ( '%' )
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:47:9: '%'
+                       {
+                       match('%'); 
+                       }
+
+                       state.type = _type;
+                       state.channel = _channel;
+               }
+               finally {
+                       // do for sure before leaving
+               }
+       }
+       // $ANTLR end "T__66"
+
+       // $ANTLR start "T__67"
+       public final void mT__67() throws RecognitionException {
+               try {
+                       int _type = T__67;
+                       int _channel = DEFAULT_TOKEN_CHANNEL;
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:48:7: ( ',' )
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:48:9: ','
+                       {
+                       match(','); 
+                       }
+
+                       state.type = _type;
+                       state.channel = _channel;
+               }
+               finally {
+                       // do for sure before leaving
+               }
+       }
+       // $ANTLR end "T__67"
+
+       // $ANTLR start "T__68"
+       public final void mT__68() throws RecognitionException {
+               try {
+                       int _type = T__68;
+                       int _channel = DEFAULT_TOKEN_CHANNEL;
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:49:7: ( '-->' )
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:49:9: '-->'
+                       {
+                       match("-->"); 
+
+                       }
+
+                       state.type = _type;
+                       state.channel = _channel;
+               }
+               finally {
+                       // do for sure before leaving
+               }
+       }
+       // $ANTLR end "T__68"
+
+       // $ANTLR start "T__69"
+       public final void mT__69() throws RecognitionException {
+               try {
+                       int _type = T__69;
+                       int _channel = DEFAULT_TOKEN_CHANNEL;
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:50:7: ( '.' )
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:50:9: '.'
+                       {
+                       match('.'); 
+                       }
+
+                       state.type = _type;
+                       state.channel = _channel;
+               }
+               finally {
+                       // do for sure before leaving
+               }
+       }
+       // $ANTLR end "T__69"
+
+       // $ANTLR start "T__70"
+       public final void mT__70() throws RecognitionException {
+               try {
+                       int _type = T__70;
+                       int _channel = DEFAULT_TOKEN_CHANNEL;
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:51:7: ( ':' )
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:51:9: ':'
+                       {
+                       match(':'); 
+                       }
+
+                       state.type = _type;
+                       state.channel = _channel;
+               }
+               finally {
+                       // do for sure before leaving
+               }
+       }
+       // $ANTLR end "T__70"
+
+       // $ANTLR start "T__71"
+       public final void mT__71() throws RecognitionException {
+               try {
+                       int _type = T__71;
+                       int _channel = DEFAULT_TOKEN_CHANNEL;
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:52:7: ( '<--' )
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:52:9: '<--'
+                       {
+                       match("<--"); 
+
+                       }
+
+                       state.type = _type;
+                       state.channel = _channel;
+               }
+               finally {
+                       // do for sure before leaving
+               }
+       }
+       // $ANTLR end "T__71"
+
+       // $ANTLR start "T__72"
+       public final void mT__72() throws RecognitionException {
+               try {
+                       int _type = T__72;
+                       int _channel = DEFAULT_TOKEN_CHANNEL;
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:53:7: ( '<R' )
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:53:9: '<R'
+                       {
+                       match("<R"); 
+
+                       }
+
+                       state.type = _type;
+                       state.channel = _channel;
+               }
+               finally {
+                       // do for sure before leaving
+               }
+       }
+       // $ANTLR end "T__72"
+
+       // $ANTLR start "T__73"
+       public final void mT__73() throws RecognitionException {
+               try {
+                       int _type = T__73;
+                       int _channel = DEFAULT_TOKEN_CHANNEL;
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:54:7: ( '<T' )
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:54:9: '<T'
+                       {
+                       match("<T"); 
+
+                       }
+
+                       state.type = _type;
+                       state.channel = _channel;
+               }
+               finally {
+                       // do for sure before leaving
+               }
+       }
+       // $ANTLR end "T__73"
+
+       // $ANTLR start "T__74"
+       public final void mT__74() throws RecognitionException {
+               try {
+                       int _type = T__74;
+                       int _channel = DEFAULT_TOKEN_CHANNEL;
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:55:7: ( '=' )
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:55:9: '='
+                       {
+                       match('='); 
+                       }
+
+                       state.type = _type;
+                       state.channel = _channel;
+               }
+               finally {
+                       // do for sure before leaving
+               }
+       }
+       // $ANTLR end "T__74"
+
+       // $ANTLR start "T__75"
+       public final void mT__75() throws RecognitionException {
+               try {
+                       int _type = T__75;
+                       int _channel = DEFAULT_TOKEN_CHANNEL;
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:56:7: ( '==>' )
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:56:9: '==>'
+                       {
+                       match("==>"); 
+
+                       }
+
+                       state.type = _type;
+                       state.channel = _channel;
+               }
+               finally {
+                       // do for sure before leaving
+               }
+       }
+       // $ANTLR end "T__75"
+
+       // $ANTLR start "T__76"
+       public final void mT__76() throws RecognitionException {
+               try {
+                       int _type = T__76;
+                       int _channel = DEFAULT_TOKEN_CHANNEL;
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:57:7: ( '>--' )
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:57:9: '>--'
+                       {
+                       match(">--"); 
+
+                       }
+
+                       state.type = _type;
+                       state.channel = _channel;
+               }
+               finally {
+                       // do for sure before leaving
+               }
+       }
+       // $ANTLR end "T__76"
+
+       // $ANTLR start "T__77"
+       public final void mT__77() throws RecognitionException {
+               try {
+                       int _type = T__77;
+                       int _channel = DEFAULT_TOKEN_CHANNEL;
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:58:7: ( '@' )
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:58:9: '@'
+                       {
+                       match('@'); 
+                       }
+
+                       state.type = _type;
+                       state.channel = _channel;
+               }
+               finally {
+                       // do for sure before leaving
+               }
+       }
+       // $ANTLR end "T__77"
+
+       // $ANTLR start "T__78"
+       public final void mT__78() throws RecognitionException {
+               try {
+                       int _type = T__78;
+                       int _channel = DEFAULT_TOKEN_CHANNEL;
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:59:7: ( 'false' )
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:59:9: 'false'
+                       {
+                       match("false"); 
+
+                       }
+
+                       state.type = _type;
+                       state.channel = _channel;
+               }
+               finally {
+                       // do for sure before leaving
+               }
+       }
+       // $ANTLR end "T__78"
+
+       // $ANTLR start "T__79"
+       public final void mT__79() throws RecognitionException {
+               try {
+                       int _type = T__79;
+                       int _channel = DEFAULT_TOKEN_CHANNEL;
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:60:7: ( 'true' )
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:60:9: 'true'
+                       {
+                       match("true"); 
+
+                       }
+
+                       state.type = _type;
+                       state.channel = _channel;
+               }
+               finally {
+                       // do for sure before leaving
+               }
+       }
+       // $ANTLR end "T__79"
+
+       // $ANTLR start "T__80"
+       public final void mT__80() throws RecognitionException {
+               try {
+                       int _type = T__80;
+                       int _channel = DEFAULT_TOKEN_CHANNEL;
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:61:7: ( '|' )
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:61:9: '|'
+                       {
+                       match('|'); 
+                       }
+
+                       state.type = _type;
+                       state.channel = _channel;
+               }
+               finally {
+                       // do for sure before leaving
+               }
+       }
+       // $ANTLR end "T__80"
+
+       // $ANTLR start "ID"
+       public final void mID() throws RecognitionException {
+               try {
+                       int _type = ID;
+                       int _channel = DEFAULT_TOKEN_CHANNEL;
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:108:5: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' )* )
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:108:7: ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' )*
+                       {
+                       if ( (input.LA(1) >= 'A' && input.LA(1) <= 'Z')||input.LA(1)=='_'||(input.LA(1) >= 'a' && input.LA(1) <= 'z') ) {
+                               input.consume();
+                       }
+                       else {
+                               MismatchedSetException mse = new MismatchedSetException(null,input);
+                               recover(mse);
+                               throw mse;
+                       }
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:108:31: ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' )*
+                       loop1:
+                       while (true) {
+                               int alt1=2;
+                               int LA1_0 = input.LA(1);
+                               if ( ((LA1_0 >= '0' && LA1_0 <= '9')||(LA1_0 >= 'A' && LA1_0 <= 'Z')||LA1_0=='_'||(LA1_0 >= 'a' && LA1_0 <= 'z')) ) {
+                                       alt1=1;
+                               }
+
+                               switch (alt1) {
+                               case 1 :
+                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:
+                                       {
+                                       if ( (input.LA(1) >= '0' && input.LA(1) <= '9')||(input.LA(1) >= 'A' && input.LA(1) <= 'Z')||input.LA(1)=='_'||(input.LA(1) >= 'a' && input.LA(1) <= 'z') ) {
+                                               input.consume();
+                                       }
+                                       else {
+                                               MismatchedSetException mse = new MismatchedSetException(null,input);
+                                               recover(mse);
+                                               throw mse;
+                                       }
+                                       }
+                                       break;
+
+                               default :
+                                       break loop1;
+                               }
+                       }
+
+                       }
+
+                       state.type = _type;
+                       state.channel = _channel;
+               }
+               finally {
+                       // do for sure before leaving
+               }
+       }
+       // $ANTLR end "ID"
+
+       // $ANTLR start "COMMENT"
+       public final void mCOMMENT() throws RecognitionException {
+               try {
+                       int _type = COMMENT;
+                       int _channel = DEFAULT_TOKEN_CHANNEL;
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:112:5: ( '//' (~ ( '\\n' ) )* | '/*' ( options {greedy=false; } : . )* '*/' )
+                       int alt4=2;
+                       int LA4_0 = input.LA(1);
+                       if ( (LA4_0=='/') ) {
+                               int LA4_1 = input.LA(2);
+                               if ( (LA4_1=='/') ) {
+                                       alt4=1;
+                               }
+                               else if ( (LA4_1=='*') ) {
+                                       alt4=2;
+                               }
+
+                               else {
+                                       int nvaeMark = input.mark();
+                                       try {
+                                               input.consume();
+                                               NoViableAltException nvae =
+                                                       new NoViableAltException("", 4, 1, input);
+                                               throw nvae;
+                                       } finally {
+                                               input.rewind(nvaeMark);
+                                       }
+                               }
+
+                       }
+
+                       else {
+                               NoViableAltException nvae =
+                                       new NoViableAltException("", 4, 0, input);
+                               throw nvae;
+                       }
+
+                       switch (alt4) {
+                               case 1 :
+                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:112:9: '//' (~ ( '\\n' ) )*
+                                       {
+                                       match("//"); 
+
+                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:112:14: (~ ( '\\n' ) )*
+                                       loop2:
+                                       while (true) {
+                                               int alt2=2;
+                                               int LA2_0 = input.LA(1);
+                                               if ( ((LA2_0 >= '\u0000' && LA2_0 <= '\t')||(LA2_0 >= '\u000B' && LA2_0 <= '\uFFFF')) ) {
+                                                       alt2=1;
+                                               }
+
+                                               switch (alt2) {
+                                               case 1 :
+                                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:
+                                                       {
+                                                       if ( (input.LA(1) >= '\u0000' && input.LA(1) <= '\t')||(input.LA(1) >= '\u000B' && input.LA(1) <= '\uFFFF') ) {
+                                                               input.consume();
+                                                       }
+                                                       else {
+                                                               MismatchedSetException mse = new MismatchedSetException(null,input);
+                                                               recover(mse);
+                                                               throw mse;
+                                                       }
+                                                       }
+                                                       break;
+
+                                               default :
+                                                       break loop2;
+                                               }
+                                       }
+
+                                       _channel=HIDDEN;
+                                       }
+                                       break;
+                               case 2 :
+                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:113:9: '/*' ( options {greedy=false; } : . )* '*/'
+                                       {
+                                       match("/*"); 
+
+                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:113:14: ( options {greedy=false; } : . )*
+                                       loop3:
+                                       while (true) {
+                                               int alt3=2;
+                                               int LA3_0 = input.LA(1);
+                                               if ( (LA3_0=='*') ) {
+                                                       int LA3_1 = input.LA(2);
+                                                       if ( (LA3_1=='/') ) {
+                                                               alt3=2;
+                                                       }
+                                                       else if ( ((LA3_1 >= '\u0000' && LA3_1 <= '.')||(LA3_1 >= '0' && LA3_1 <= '\uFFFF')) ) {
+                                                               alt3=1;
+                                                       }
+
+                                               }
+                                               else if ( ((LA3_0 >= '\u0000' && LA3_0 <= ')')||(LA3_0 >= '+' && LA3_0 <= '\uFFFF')) ) {
+                                                       alt3=1;
+                                               }
+
+                                               switch (alt3) {
+                                               case 1 :
+                                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:113:42: .
+                                                       {
+                                                       matchAny(); 
+                                                       }
+                                                       break;
+
+                                               default :
+                                                       break loop3;
+                                               }
+                                       }
+
+                                       match("*/"); 
+
+                                       _channel=HIDDEN;
+                                       }
+                                       break;
+
+                       }
+                       state.type = _type;
+                       state.channel = _channel;
+               }
+               finally {
+                       // do for sure before leaving
+               }
+       }
+       // $ANTLR end "COMMENT"
+
+       // $ANTLR start "WS"
+       public final void mWS() throws RecognitionException {
+               try {
+                       int _type = WS;
+                       int _channel = DEFAULT_TOKEN_CHANNEL;
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:116:5: ( ( ' ' | '\\t' | '\\r' ) )
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:116:7: ( ' ' | '\\t' | '\\r' )
+                       {
+                       if ( input.LA(1)=='\t'||input.LA(1)=='\r'||input.LA(1)==' ' ) {
+                               input.consume();
+                       }
+                       else {
+                               MismatchedSetException mse = new MismatchedSetException(null,input);
+                               recover(mse);
+                               throw mse;
+                       }
+                       _channel=HIDDEN;
+                       }
+
+                       state.type = _type;
+                       state.channel = _channel;
+               }
+               finally {
+                       // do for sure before leaving
+               }
+       }
+       // $ANTLR end "WS"
+
+       // $ANTLR start "LPAREN"
+       public final void mLPAREN() throws RecognitionException {
+               try {
+                       int _type = LPAREN;
+                       int _channel = DEFAULT_TOKEN_CHANNEL;
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:122:11: ( '(' )
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:122:13: '('
+                       {
+                       match('('); 
+                        ++ inParen; 
+                       }
+
+                       state.type = _type;
+                       state.channel = _channel;
+               }
+               finally {
+                       // do for sure before leaving
+               }
+       }
+       // $ANTLR end "LPAREN"
+
+       // $ANTLR start "RPAREN"
+       public final void mRPAREN() throws RecognitionException {
+               try {
+                       int _type = RPAREN;
+                       int _channel = DEFAULT_TOKEN_CHANNEL;
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:123:11: ( ')' )
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:123:13: ')'
+                       {
+                       match(')'); 
+                        -- inParen; 
+                       }
+
+                       state.type = _type;
+                       state.channel = _channel;
+               }
+               finally {
+                       // do for sure before leaving
+               }
+       }
+       // $ANTLR end "RPAREN"
+
+       // $ANTLR start "LBRACKET"
+       public final void mLBRACKET() throws RecognitionException {
+               try {
+                       int _type = LBRACKET;
+                       int _channel = DEFAULT_TOKEN_CHANNEL;
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:124:11: ( '[' )
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:124:13: '['
+                       {
+                       match('['); 
+                        ++ inParen; 
+                       }
+
+                       state.type = _type;
+                       state.channel = _channel;
+               }
+               finally {
+                       // do for sure before leaving
+               }
+       }
+       // $ANTLR end "LBRACKET"
+
+       // $ANTLR start "RBRACKET"
+       public final void mRBRACKET() throws RecognitionException {
+               try {
+                       int _type = RBRACKET;
+                       int _channel = DEFAULT_TOKEN_CHANNEL;
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:125:11: ( ']' )
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:125:13: ']'
+                       {
+                       match(']'); 
+                        -- inParen; 
+                       }
+
+                       state.type = _type;
+                       state.channel = _channel;
+               }
+               finally {
+                       // do for sure before leaving
+               }
+       }
+       // $ANTLR end "RBRACKET"
+
+       // $ANTLR start "LCURLY"
+       public final void mLCURLY() throws RecognitionException {
+               try {
+                       int _type = LCURLY;
+                       int _channel = DEFAULT_TOKEN_CHANNEL;
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:126:11: ( '{' )
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:126:13: '{'
+                       {
+                       match('{'); 
+                        ++ inParen; 
+                       }
+
+                       state.type = _type;
+                       state.channel = _channel;
+               }
+               finally {
+                       // do for sure before leaving
+               }
+       }
+       // $ANTLR end "LCURLY"
+
+       // $ANTLR start "RCURLY"
+       public final void mRCURLY() throws RecognitionException {
+               try {
+                       int _type = RCURLY;
+                       int _channel = DEFAULT_TOKEN_CHANNEL;
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:127:11: ( '}' )
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:127:13: '}'
+                       {
+                       match('}'); 
+                        -- inParen; 
+                       }
+
+                       state.type = _type;
+                       state.channel = _channel;
+               }
+               finally {
+                       // do for sure before leaving
+               }
+       }
+       // $ANTLR end "RCURLY"
+
+       // $ANTLR start "INT_RANGE"
+       public final void mINT_RANGE() throws RecognitionException {
+               try {
+                       int _type = INT_RANGE;
+                       int _channel = DEFAULT_TOKEN_CHANNEL;
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:129:11: ( INT '..' ( INT )? | '..' INT )
+                       int alt6=2;
+                       int LA6_0 = input.LA(1);
+                       if ( (LA6_0=='-'||(LA6_0 >= '0' && LA6_0 <= '9')) ) {
+                               alt6=1;
+                       }
+                       else if ( (LA6_0=='.') ) {
+                               alt6=2;
+                       }
+
+                       else {
+                               NoViableAltException nvae =
+                                       new NoViableAltException("", 6, 0, input);
+                               throw nvae;
+                       }
+
+                       switch (alt6) {
+                               case 1 :
+                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:129:13: INT '..' ( INT )?
+                                       {
+                                       mINT(); 
+
+                                       match(".."); 
+
+                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:129:22: ( INT )?
+                                       int alt5=2;
+                                       int LA5_0 = input.LA(1);
+                                       if ( (LA5_0=='-'||(LA5_0 >= '0' && LA5_0 <= '9')) ) {
+                                               alt5=1;
+                                       }
+                                       switch (alt5) {
+                                               case 1 :
+                                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:129:22: INT
+                                                       {
+                                                       mINT(); 
+
+                                                       }
+                                                       break;
+
+                                       }
+
+                                       }
+                                       break;
+                               case 2 :
+                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:130:13: '..' INT
+                                       {
+                                       match(".."); 
+
+                                       mINT(); 
+
+                                       }
+                                       break;
+
+                       }
+                       state.type = _type;
+                       state.channel = _channel;
+               }
+               finally {
+                       // do for sure before leaving
+               }
+       }
+       // $ANTLR end "INT_RANGE"
+
+       // $ANTLR start "RANGE"
+       public final void mRANGE() throws RecognitionException {
+               try {
+                       int _type = RANGE;
+                       int _channel = DEFAULT_TOKEN_CHANNEL;
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:132:11: ( FLOAT '..' ( FLOAT | INT )? | '..' FLOAT | INT '..' FLOAT )
+                       int alt8=3;
+                       alt8 = dfa8.predict(input);
+                       switch (alt8) {
+                               case 1 :
+                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:132:13: FLOAT '..' ( FLOAT | INT )?
+                                       {
+                                       mFLOAT(); 
+
+                                       match(".."); 
+
+                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:132:24: ( FLOAT | INT )?
+                                       int alt7=3;
+                                       alt7 = dfa7.predict(input);
+                                       switch (alt7) {
+                                               case 1 :
+                                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:132:25: FLOAT
+                                                       {
+                                                       mFLOAT(); 
+
+                                                       }
+                                                       break;
+                                               case 2 :
+                                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:132:33: INT
+                                                       {
+                                                       mINT(); 
+
+                                                       }
+                                                       break;
+
+                                       }
+
+                                       }
+                                       break;
+                               case 2 :
+                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:133:13: '..' FLOAT
+                                       {
+                                       match(".."); 
+
+                                       mFLOAT(); 
+
+                                       }
+                                       break;
+                               case 3 :
+                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:134:13: INT '..' FLOAT
+                                       {
+                                       mINT(); 
+
+                                       match(".."); 
+
+                                       mFLOAT(); 
+
+                                       }
+                                       break;
+
+                       }
+                       state.type = _type;
+                       state.channel = _channel;
+               }
+               finally {
+                       // do for sure before leaving
+               }
+       }
+       // $ANTLR end "RANGE"
+
+       // $ANTLR start "NEWLINE"
+       public final void mNEWLINE() throws RecognitionException {
+               try {
+                       int _type = NEWLINE;
+                       int _channel = DEFAULT_TOKEN_CHANNEL;
+                        int spaces = 0; 
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:139:5: ( '\\n' ( ' ' | '//' (~ ( '\\n' ) )* '\\n' | '/*' ( options {greedy=false; } : . )* '*/' | '\\r' | '\\n' )* )
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:139:7: '\\n' ( ' ' | '//' (~ ( '\\n' ) )* '\\n' | '/*' ( options {greedy=false; } : . )* '*/' | '\\r' | '\\n' )*
+                       {
+                       match('\n'); 
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:140:7: ( ' ' | '//' (~ ( '\\n' ) )* '\\n' | '/*' ( options {greedy=false; } : . )* '*/' | '\\r' | '\\n' )*
+                       loop11:
+                       while (true) {
+                               int alt11=6;
+                               switch ( input.LA(1) ) {
+                               case ' ':
+                                       {
+                                       alt11=1;
+                                       }
+                                       break;
+                               case '/':
+                                       {
+                                       int LA11_3 = input.LA(2);
+                                       if ( (LA11_3=='/') ) {
+                                               alt11=2;
+                                       }
+                                       else if ( (LA11_3=='*') ) {
+                                               alt11=3;
+                                       }
+
+                                       }
+                                       break;
+                               case '\r':
+                                       {
+                                       alt11=4;
+                                       }
+                                       break;
+                               case '\n':
+                                       {
+                                       alt11=5;
+                                       }
+                                       break;
+                               }
+                               switch (alt11) {
+                               case 1 :
+                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:140:9: ' '
+                                       {
+                                       match(' '); 
+                                        ++spaces; 
+                                       }
+                                       break;
+                               case 2 :
+                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:141:9: '//' (~ ( '\\n' ) )* '\\n'
+                                       {
+                                       match("//"); 
+
+                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:141:14: (~ ( '\\n' ) )*
+                                       loop9:
+                                       while (true) {
+                                               int alt9=2;
+                                               int LA9_0 = input.LA(1);
+                                               if ( ((LA9_0 >= '\u0000' && LA9_0 <= '\t')||(LA9_0 >= '\u000B' && LA9_0 <= '\uFFFF')) ) {
+                                                       alt9=1;
+                                               }
+
+                                               switch (alt9) {
+                                               case 1 :
+                                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:
+                                                       {
+                                                       if ( (input.LA(1) >= '\u0000' && input.LA(1) <= '\t')||(input.LA(1) >= '\u000B' && input.LA(1) <= '\uFFFF') ) {
+                                                               input.consume();
+                                                       }
+                                                       else {
+                                                               MismatchedSetException mse = new MismatchedSetException(null,input);
+                                                               recover(mse);
+                                                               throw mse;
+                                                       }
+                                                       }
+                                                       break;
+
+                                               default :
+                                                       break loop9;
+                                               }
+                                       }
+
+                                       match('\n'); 
+                                        spaces = 0; 
+                                       }
+                                       break;
+                               case 3 :
+                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:142:9: '/*' ( options {greedy=false; } : . )* '*/'
+                                       {
+                                       match("/*"); 
+
+                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:142:14: ( options {greedy=false; } : . )*
+                                       loop10:
+                                       while (true) {
+                                               int alt10=2;
+                                               int LA10_0 = input.LA(1);
+                                               if ( (LA10_0=='*') ) {
+                                                       int LA10_1 = input.LA(2);
+                                                       if ( (LA10_1=='/') ) {
+                                                               alt10=2;
+                                                       }
+                                                       else if ( ((LA10_1 >= '\u0000' && LA10_1 <= '.')||(LA10_1 >= '0' && LA10_1 <= '\uFFFF')) ) {
+                                                               alt10=1;
+                                                       }
+
+                                               }
+                                               else if ( ((LA10_0 >= '\u0000' && LA10_0 <= ')')||(LA10_0 >= '+' && LA10_0 <= '\uFFFF')) ) {
+                                                       alt10=1;
+                                               }
+
+                                               switch (alt10) {
+                                               case 1 :
+                                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:142:42: .
+                                                       {
+                                                       matchAny(); 
+                                                       }
+                                                       break;
+
+                                               default :
+                                                       break loop10;
+                                               }
+                                       }
+
+                                       match("*/"); 
+
+                                       }
+                                       break;
+                               case 4 :
+                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:143:9: '\\r'
+                                       {
+                                       match('\r'); 
+                                       }
+                                       break;
+                               case 5 :
+                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:144:9: '\\n'
+                                       {
+                                       match('\n'); 
+                                        spaces = 0; 
+                                       }
+                                       break;
+
+                               default :
+                                       break loop11;
+                               }
+                       }
+
+                        
+                                 int c = input.LA(1);
+                                 
+                                 if(inParen > 0) {
+                                     _channel = HIDDEN;
+                                 }
+                                 else if(c == EOF) {
+                                     while(iStack.size() > 1) {
+                                         iStack.removeAt(iStack.size()-1);
+                                         state.type = DEDENT;
+                                         emit();
+                                     }
+                                     _channel = HIDDEN;
+                                     iStack.clear();
+                                 }
+                                 else {
+                                     int stackTop = iStack.get(iStack.size()-1);
+                                     if(spaces > stackTop) {
+                                         iStack.add(spaces);
+                                         _type = INDENT;
+                                     }
+                                     else if(spaces < stackTop) {
+                                         while(spaces < iStack.get(iStack.size()-1)) {
+                                             iStack.removeAt(iStack.size()-1);
+                                             state.type = DEDENT;
+                                             emit();
+                                         }
+                                         state.type = NEWLINE;
+                                         emit();
+                                         // TODO check that spaces == iStack.get(iStack.size()-1)
+                                     }
+                                 }
+                             
+                       }
+
+                       state.type = _type;
+                       state.channel = _channel;
+               }
+               finally {
+                       // do for sure before leaving
+               }
+       }
+       // $ANTLR end "NEWLINE"
+
+       // $ANTLR start "INDENT"
+       public final void mINDENT() throws RecognitionException {
+               try {
+                       int _type = INDENT;
+                       int _channel = DEFAULT_TOKEN_CHANNEL;
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:181:7: ({...}? => 'INDENT' )
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:181:9: {...}? => 'INDENT'
+                       {
+                       if ( !(( false )) ) {
+                               throw new FailedPredicateException(input, "INDENT", " false ");
+                       }
+                       match("INDENT"); 
+
+                       }
+
+                       state.type = _type;
+                       state.channel = _channel;
+               }
+               finally {
+                       // do for sure before leaving
+               }
+       }
+       // $ANTLR end "INDENT"
+
+       // $ANTLR start "DEDENT"
+       public final void mDEDENT() throws RecognitionException {
+               try {
+                       int _type = DEDENT;
+                       int _channel = DEFAULT_TOKEN_CHANNEL;
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:182:7: ({...}? => 'DEDENT' )
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:182:9: {...}? => 'DEDENT'
+                       {
+                       if ( !(( false )) ) {
+                               throw new FailedPredicateException(input, "DEDENT", " false ");
+                       }
+                       match("DEDENT"); 
+
+                       }
+
+                       state.type = _type;
+                       state.channel = _channel;
+               }
+               finally {
+                       // do for sure before leaving
+               }
+       }
+       // $ANTLR end "DEDENT"
+
+       // $ANTLR start "INT"
+       public final void mINT() throws RecognitionException {
+               try {
+                       int _type = INT;
+                       int _channel = DEFAULT_TOKEN_CHANNEL;
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:184:5: ( ( '-' )? ( '0' .. '9' )+ )
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:184:7: ( '-' )? ( '0' .. '9' )+
+                       {
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:184:7: ( '-' )?
+                       int alt12=2;
+                       int LA12_0 = input.LA(1);
+                       if ( (LA12_0=='-') ) {
+                               alt12=1;
+                       }
+                       switch (alt12) {
+                               case 1 :
+                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:184:7: '-'
+                                       {
+                                       match('-'); 
+                                       }
+                                       break;
+
+                       }
+
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:184:12: ( '0' .. '9' )+
+                       int cnt13=0;
+                       loop13:
+                       while (true) {
+                               int alt13=2;
+                               int LA13_0 = input.LA(1);
+                               if ( ((LA13_0 >= '0' && LA13_0 <= '9')) ) {
+                                       alt13=1;
+                               }
+
+                               switch (alt13) {
+                               case 1 :
+                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:
+                                       {
+                                       if ( (input.LA(1) >= '0' && input.LA(1) <= '9') ) {
+                                               input.consume();
+                                       }
+                                       else {
+                                               MismatchedSetException mse = new MismatchedSetException(null,input);
+                                               recover(mse);
+                                               throw mse;
+                                       }
+                                       }
+                                       break;
+
+                               default :
+                                       if ( cnt13 >= 1 ) break loop13;
+                                       EarlyExitException eee = new EarlyExitException(13, input);
+                                       throw eee;
+                               }
+                               cnt13++;
+                       }
+
+                       }
+
+                       state.type = _type;
+                       state.channel = _channel;
+               }
+               finally {
+                       // do for sure before leaving
+               }
+       }
+       // $ANTLR end "INT"
+
+       // $ANTLR start "FLOAT"
+       public final void mFLOAT() throws RecognitionException {
+               try {
+                       int _type = FLOAT;
+                       int _channel = DEFAULT_TOKEN_CHANNEL;
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:188:5: ( ( '-' )? ( ( '0' .. '9' )+ '.' ( '0' .. '9' )* ( EXPONENT )? | ( '0' .. '9' )+ EXPONENT ) )
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:188:7: ( '-' )? ( ( '0' .. '9' )+ '.' ( '0' .. '9' )* ( EXPONENT )? | ( '0' .. '9' )+ EXPONENT )
+                       {
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:188:7: ( '-' )?
+                       int alt14=2;
+                       int LA14_0 = input.LA(1);
+                       if ( (LA14_0=='-') ) {
+                               alt14=1;
+                       }
+                       switch (alt14) {
+                               case 1 :
+                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:188:7: '-'
+                                       {
+                                       match('-'); 
+                                       }
+                                       break;
+
+                       }
+
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:189:5: ( ( '0' .. '9' )+ '.' ( '0' .. '9' )* ( EXPONENT )? | ( '0' .. '9' )+ EXPONENT )
+                       int alt19=2;
+                       alt19 = dfa19.predict(input);
+                       switch (alt19) {
+                               case 1 :
+                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:189:7: ( '0' .. '9' )+ '.' ( '0' .. '9' )* ( EXPONENT )?
+                                       {
+                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:189:7: ( '0' .. '9' )+
+                                       int cnt15=0;
+                                       loop15:
+                                       while (true) {
+                                               int alt15=2;
+                                               int LA15_0 = input.LA(1);
+                                               if ( ((LA15_0 >= '0' && LA15_0 <= '9')) ) {
+                                                       alt15=1;
+                                               }
+
+                                               switch (alt15) {
+                                               case 1 :
+                                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:
+                                                       {
+                                                       if ( (input.LA(1) >= '0' && input.LA(1) <= '9') ) {
+                                                               input.consume();
+                                                       }
+                                                       else {
+                                                               MismatchedSetException mse = new MismatchedSetException(null,input);
+                                                               recover(mse);
+                                                               throw mse;
+                                                       }
+                                                       }
+                                                       break;
+
+                                               default :
+                                                       if ( cnt15 >= 1 ) break loop15;
+                                                       EarlyExitException eee = new EarlyExitException(15, input);
+                                                       throw eee;
+                                               }
+                                               cnt15++;
+                                       }
+
+                                       match('.'); 
+                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:189:23: ( '0' .. '9' )*
+                                       loop16:
+                                       while (true) {
+                                               int alt16=2;
+                                               int LA16_0 = input.LA(1);
+                                               if ( ((LA16_0 >= '0' && LA16_0 <= '9')) ) {
+                                                       alt16=1;
+                                               }
+
+                                               switch (alt16) {
+                                               case 1 :
+                                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:
+                                                       {
+                                                       if ( (input.LA(1) >= '0' && input.LA(1) <= '9') ) {
+                                                               input.consume();
+                                                       }
+                                                       else {
+                                                               MismatchedSetException mse = new MismatchedSetException(null,input);
+                                                               recover(mse);
+                                                               throw mse;
+                                                       }
+                                                       }
+                                                       break;
+
+                                               default :
+                                                       break loop16;
+                                               }
+                                       }
+
+                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:189:35: ( EXPONENT )?
+                                       int alt17=2;
+                                       int LA17_0 = input.LA(1);
+                                       if ( (LA17_0=='E'||LA17_0=='e') ) {
+                                               alt17=1;
+                                       }
+                                       switch (alt17) {
+                                               case 1 :
+                                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:189:35: EXPONENT
+                                                       {
+                                                       mEXPONENT(); 
+
+                                                       }
+                                                       break;
+
+                                       }
+
+                                       }
+                                       break;
+                               case 2 :
+                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:190:7: ( '0' .. '9' )+ EXPONENT
+                                       {
+                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:190:7: ( '0' .. '9' )+
+                                       int cnt18=0;
+                                       loop18:
+                                       while (true) {
+                                               int alt18=2;
+                                               int LA18_0 = input.LA(1);
+                                               if ( ((LA18_0 >= '0' && LA18_0 <= '9')) ) {
+                                                       alt18=1;
+                                               }
+
+                                               switch (alt18) {
+                                               case 1 :
+                                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:
+                                                       {
+                                                       if ( (input.LA(1) >= '0' && input.LA(1) <= '9') ) {
+                                                               input.consume();
+                                                       }
+                                                       else {
+                                                               MismatchedSetException mse = new MismatchedSetException(null,input);
+                                                               recover(mse);
+                                                               throw mse;
+                                                       }
+                                                       }
+                                                       break;
+
+                                               default :
+                                                       if ( cnt18 >= 1 ) break loop18;
+                                                       EarlyExitException eee = new EarlyExitException(18, input);
+                                                       throw eee;
+                                               }
+                                               cnt18++;
+                                       }
+
+                                       mEXPONENT(); 
+
+                                       }
+                                       break;
+
+                       }
+
+                       }
+
+                       state.type = _type;
+                       state.channel = _channel;
+               }
+               finally {
+                       // do for sure before leaving
+               }
+       }
+       // $ANTLR end "FLOAT"
+
+       // $ANTLR start "STRING"
+       public final void mSTRING() throws RecognitionException {
+               try {
+                       int _type = STRING;
+                       int _channel = DEFAULT_TOKEN_CHANNEL;
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:195:5: ( '\"' ( ESC_SEQ |~ ( '\\\\' | '\"' ) )* '\"' | '\"\"\"' (~ ( '\"' ) | '\"' ~ ( '\"' ) | '\"\"' ~ ( '\"' ) )* '\"\"\"' )
+                       int alt22=2;
+                       int LA22_0 = input.LA(1);
+                       if ( (LA22_0=='\"') ) {
+                               int LA22_1 = input.LA(2);
+                               if ( (LA22_1=='\"') ) {
+                                       int LA22_2 = input.LA(3);
+                                       if ( (LA22_2=='\"') ) {
+                                               alt22=2;
+                                       }
+
+                                       else {
+                                               alt22=1;
+                                       }
+
+                               }
+                               else if ( ((LA22_1 >= '\u0000' && LA22_1 <= '!')||(LA22_1 >= '#' && LA22_1 <= '\uFFFF')) ) {
+                                       alt22=1;
+                               }
+
+                               else {
+                                       int nvaeMark = input.mark();
+                                       try {
+                                               input.consume();
+                                               NoViableAltException nvae =
+                                                       new NoViableAltException("", 22, 1, input);
+                                               throw nvae;
+                                       } finally {
+                                               input.rewind(nvaeMark);
+                                       }
+                               }
+
+                       }
+
+                       else {
+                               NoViableAltException nvae =
+                                       new NoViableAltException("", 22, 0, input);
+                               throw nvae;
+                       }
+
+                       switch (alt22) {
+                               case 1 :
+                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:195:8: '\"' ( ESC_SEQ |~ ( '\\\\' | '\"' ) )* '\"'
+                                       {
+                                       match('\"'); 
+                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:195:12: ( ESC_SEQ |~ ( '\\\\' | '\"' ) )*
+                                       loop20:
+                                       while (true) {
+                                               int alt20=3;
+                                               int LA20_0 = input.LA(1);
+                                               if ( (LA20_0=='\\') ) {
+                                                       alt20=1;
+                                               }
+                                               else if ( ((LA20_0 >= '\u0000' && LA20_0 <= '!')||(LA20_0 >= '#' && LA20_0 <= '[')||(LA20_0 >= ']' && LA20_0 <= '\uFFFF')) ) {
+                                                       alt20=2;
+                                               }
+
+                                               switch (alt20) {
+                                               case 1 :
+                                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:195:14: ESC_SEQ
+                                                       {
+                                                       mESC_SEQ(); 
+
+                                                       }
+                                                       break;
+                                               case 2 :
+                                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:195:24: ~ ( '\\\\' | '\"' )
+                                                       {
+                                                       if ( (input.LA(1) >= '\u0000' && input.LA(1) <= '!')||(input.LA(1) >= '#' && input.LA(1) <= '[')||(input.LA(1) >= ']' && input.LA(1) <= '\uFFFF') ) {
+                                                               input.consume();
+                                                       }
+                                                       else {
+                                                               MismatchedSetException mse = new MismatchedSetException(null,input);
+                                                               recover(mse);
+                                                               throw mse;
+                                                       }
+                                                       }
+                                                       break;
+
+                                               default :
+                                                       break loop20;
+                                               }
+                                       }
+
+                                       match('\"'); 
+                                       }
+                                       break;
+                               case 2 :
+                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:196:8: '\"\"\"' (~ ( '\"' ) | '\"' ~ ( '\"' ) | '\"\"' ~ ( '\"' ) )* '\"\"\"'
+                                       {
+                                       match("\"\"\""); 
+
+                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:196:14: (~ ( '\"' ) | '\"' ~ ( '\"' ) | '\"\"' ~ ( '\"' ) )*
+                                       loop21:
+                                       while (true) {
+                                               int alt21=4;
+                                               int LA21_0 = input.LA(1);
+                                               if ( (LA21_0=='\"') ) {
+                                                       int LA21_1 = input.LA(2);
+                                                       if ( (LA21_1=='\"') ) {
+                                                               int LA21_3 = input.LA(3);
+                                                               if ( ((LA21_3 >= '\u0000' && LA21_3 <= '!')||(LA21_3 >= '#' && LA21_3 <= '\uFFFF')) ) {
+                                                                       alt21=3;
+                                                               }
+
+                                                       }
+                                                       else if ( ((LA21_1 >= '\u0000' && LA21_1 <= '!')||(LA21_1 >= '#' && LA21_1 <= '\uFFFF')) ) {
+                                                               alt21=2;
+                                                       }
+
+                                               }
+                                               else if ( ((LA21_0 >= '\u0000' && LA21_0 <= '!')||(LA21_0 >= '#' && LA21_0 <= '\uFFFF')) ) {
+                                                       alt21=1;
+                                               }
+
+                                               switch (alt21) {
+                                               case 1 :
+                                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:196:16: ~ ( '\"' )
+                                                       {
+                                                       if ( (input.LA(1) >= '\u0000' && input.LA(1) <= '!')||(input.LA(1) >= '#' && input.LA(1) <= '\uFFFF') ) {
+                                                               input.consume();
+                                                       }
+                                                       else {
+                                                               MismatchedSetException mse = new MismatchedSetException(null,input);
+                                                               recover(mse);
+                                                               throw mse;
+                                                       }
+                                                       }
+                                                       break;
+                                               case 2 :
+                                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:196:25: '\"' ~ ( '\"' )
+                                                       {
+                                                       match('\"'); 
+                                                       if ( (input.LA(1) >= '\u0000' && input.LA(1) <= '!')||(input.LA(1) >= '#' && input.LA(1) <= '\uFFFF') ) {
+                                                               input.consume();
+                                                       }
+                                                       else {
+                                                               MismatchedSetException mse = new MismatchedSetException(null,input);
+                                                               recover(mse);
+                                                               throw mse;
+                                                       }
+                                                       }
+                                                       break;
+                                               case 3 :
+                                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:196:38: '\"\"' ~ ( '\"' )
+                                                       {
+                                                       match("\"\""); 
+
+                                                       if ( (input.LA(1) >= '\u0000' && input.LA(1) <= '!')||(input.LA(1) >= '#' && input.LA(1) <= '\uFFFF') ) {
+                                                               input.consume();
+                                                       }
+                                                       else {
+                                                               MismatchedSetException mse = new MismatchedSetException(null,input);
+                                                               recover(mse);
+                                                               throw mse;
+                                                       }
+                                                       }
+                                                       break;
+
+                                               default :
+                                                       break loop21;
+                                               }
+                                       }
+
+                                       match("\"\"\""); 
+
+                                       }
+                                       break;
+
+                       }
+                       state.type = _type;
+                       state.channel = _channel;
+               }
+               finally {
+                       // do for sure before leaving
+               }
+       }
+       // $ANTLR end "STRING"
+
+       // $ANTLR start "URI"
+       public final void mURI() throws RecognitionException {
+               try {
+                       int _type = URI;
+                       int _channel = DEFAULT_TOKEN_CHANNEL;
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:200:5: ( '<http:' (~ ( '>' ) )* '>' )
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:200:8: '<http:' (~ ( '>' ) )* '>'
+                       {
+                       match("<http:"); 
+
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:200:17: (~ ( '>' ) )*
+                       loop23:
+                       while (true) {
+                               int alt23=2;
+                               int LA23_0 = input.LA(1);
+                               if ( ((LA23_0 >= '\u0000' && LA23_0 <= '=')||(LA23_0 >= '?' && LA23_0 <= '\uFFFF')) ) {
+                                       alt23=1;
+                               }
+
+                               switch (alt23) {
+                               case 1 :
+                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:
+                                       {
+                                       if ( (input.LA(1) >= '\u0000' && input.LA(1) <= '=')||(input.LA(1) >= '?' && input.LA(1) <= '\uFFFF') ) {
+                                               input.consume();
+                                       }
+                                       else {
+                                               MismatchedSetException mse = new MismatchedSetException(null,input);
+                                               recover(mse);
+                                               throw mse;
+                                       }
+                                       }
+                                       break;
+
+                               default :
+                                       break loop23;
+                               }
+                       }
+
+                       match('>'); 
+                       }
+
+                       state.type = _type;
+                       state.channel = _channel;
+               }
+               finally {
+                       // do for sure before leaving
+               }
+       }
+       // $ANTLR end "URI"
+
+       // $ANTLR start "EXPONENT"
+       public final void mEXPONENT() throws RecognitionException {
+               try {
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:205:10: ( ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+ )
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:205:12: ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+
+                       {
+                       if ( input.LA(1)=='E'||input.LA(1)=='e' ) {
+                               input.consume();
+                       }
+                       else {
+                               MismatchedSetException mse = new MismatchedSetException(null,input);
+                               recover(mse);
+                               throw mse;
+                       }
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:205:22: ( '+' | '-' )?
+                       int alt24=2;
+                       int LA24_0 = input.LA(1);
+                       if ( (LA24_0=='+'||LA24_0=='-') ) {
+                               alt24=1;
+                       }
+                       switch (alt24) {
+                               case 1 :
+                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:
+                                       {
+                                       if ( input.LA(1)=='+'||input.LA(1)=='-' ) {
+                                               input.consume();
+                                       }
+                                       else {
+                                               MismatchedSetException mse = new MismatchedSetException(null,input);
+                                               recover(mse);
+                                               throw mse;
+                                       }
+                                       }
+                                       break;
+
+                       }
+
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:205:33: ( '0' .. '9' )+
+                       int cnt25=0;
+                       loop25:
+                       while (true) {
+                               int alt25=2;
+                               int LA25_0 = input.LA(1);
+                               if ( ((LA25_0 >= '0' && LA25_0 <= '9')) ) {
+                                       alt25=1;
+                               }
+
+                               switch (alt25) {
+                               case 1 :
+                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:
+                                       {
+                                       if ( (input.LA(1) >= '0' && input.LA(1) <= '9') ) {
+                                               input.consume();
+                                       }
+                                       else {
+                                               MismatchedSetException mse = new MismatchedSetException(null,input);
+                                               recover(mse);
+                                               throw mse;
+                                       }
+                                       }
+                                       break;
+
+                               default :
+                                       if ( cnt25 >= 1 ) break loop25;
+                                       EarlyExitException eee = new EarlyExitException(25, input);
+                                       throw eee;
+                               }
+                               cnt25++;
+                       }
+
+                       }
+
+               }
+               finally {
+                       // do for sure before leaving
+               }
+       }
+       // $ANTLR end "EXPONENT"
+
+       // $ANTLR start "HEX_DIGIT"
+       public final void mHEX_DIGIT() throws RecognitionException {
+               try {
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:208:11: ( ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:
+                       {
+                       if ( (input.LA(1) >= '0' && input.LA(1) <= '9')||(input.LA(1) >= 'A' && input.LA(1) <= 'F')||(input.LA(1) >= 'a' && input.LA(1) <= 'f') ) {
+                               input.consume();
+                       }
+                       else {
+                               MismatchedSetException mse = new MismatchedSetException(null,input);
+                               recover(mse);
+                               throw mse;
+                       }
+                       }
+
+               }
+               finally {
+                       // do for sure before leaving
+               }
+       }
+       // $ANTLR end "HEX_DIGIT"
+
+       // $ANTLR start "ESC_SEQ"
+       public final void mESC_SEQ() throws RecognitionException {
+               try {
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:212:5: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' ) | UNICODE_ESC )
+                       int alt26=2;
+                       int LA26_0 = input.LA(1);
+                       if ( (LA26_0=='\\') ) {
+                               int LA26_1 = input.LA(2);
+                               if ( (LA26_1=='\"'||LA26_1=='\''||LA26_1=='\\'||LA26_1=='b'||LA26_1=='f'||LA26_1=='n'||LA26_1=='r'||LA26_1=='t') ) {
+                                       alt26=1;
+                               }
+                               else if ( (LA26_1=='u') ) {
+                                       alt26=2;
+                               }
+
+                               else {
+                                       int nvaeMark = input.mark();
+                                       try {
+                                               input.consume();
+                                               NoViableAltException nvae =
+                                                       new NoViableAltException("", 26, 1, input);
+                                               throw nvae;
+                                       } finally {
+                                               input.rewind(nvaeMark);
+                                       }
+                               }
+
+                       }
+
+                       else {
+                               NoViableAltException nvae =
+                                       new NoViableAltException("", 26, 0, input);
+                               throw nvae;
+                       }
+
+                       switch (alt26) {
+                               case 1 :
+                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:212:9: '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' )
+                                       {
+                                       match('\\'); 
+                                       if ( input.LA(1)=='\"'||input.LA(1)=='\''||input.LA(1)=='\\'||input.LA(1)=='b'||input.LA(1)=='f'||input.LA(1)=='n'||input.LA(1)=='r'||input.LA(1)=='t' ) {
+                                               input.consume();
+                                       }
+                                       else {
+                                               MismatchedSetException mse = new MismatchedSetException(null,input);
+                                               recover(mse);
+                                               throw mse;
+                                       }
+                                       }
+                                       break;
+                               case 2 :
+                                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:213:9: UNICODE_ESC
+                                       {
+                                       mUNICODE_ESC(); 
+
+                                       }
+                                       break;
+
+                       }
+               }
+               finally {
+                       // do for sure before leaving
+               }
+       }
+       // $ANTLR end "ESC_SEQ"
+
+       // $ANTLR start "UNICODE_ESC"
+       public final void mUNICODE_ESC() throws RecognitionException {
+               try {
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:218:5: ( '\\\\' 'u' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT )
+                       // src/org/simantics/graph/compiler/internal/parsing/Graph.g:218:9: '\\\\' 'u' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT
+                       {
+                       match('\\'); 
+                       match('u'); 
+                       mHEX_DIGIT(); 
+
+                       mHEX_DIGIT(); 
+
+                       mHEX_DIGIT(); 
+
+                       mHEX_DIGIT(); 
+
+                       }
+
+               }
+               finally {
+                       // do for sure before leaving
+               }
+       }
+       // $ANTLR end "UNICODE_ESC"
+
+       @Override
+       public void mTokens() throws RecognitionException {
+               // src/org/simantics/graph/compiler/internal/parsing/Graph.g:1:8: ( T__65 | T__66 | T__67 | T__68 | T__69 | T__70 | T__71 | T__72 | T__73 | T__74 | T__75 | T__76 | T__77 | T__78 | T__79 | T__80 | ID | COMMENT | WS | LPAREN | RPAREN | LBRACKET | RBRACKET | LCURLY | RCURLY | INT_RANGE | RANGE | NEWLINE | INDENT | DEDENT | INT | FLOAT | STRING | URI )
+               int alt27=34;
+               alt27 = dfa27.predict(input);
+               switch (alt27) {
+                       case 1 :
+                               // src/org/simantics/graph/compiler/internal/parsing/Graph.g:1:10: T__65
+                               {
+                               mT__65(); 
+
+                               }
+                               break;
+                       case 2 :
+                               // src/org/simantics/graph/compiler/internal/parsing/Graph.g:1:16: T__66
+                               {
+                               mT__66(); 
+
+                               }
+                               break;
+                       case 3 :
+                               // src/org/simantics/graph/compiler/internal/parsing/Graph.g:1:22: T__67
+                               {
+                               mT__67(); 
+
+                               }
+                               break;
+                       case 4 :
+                               // src/org/simantics/graph/compiler/internal/parsing/Graph.g:1:28: T__68
+                               {
+                               mT__68(); 
+
+                               }
+                               break;
+                       case 5 :
+                               // src/org/simantics/graph/compiler/internal/parsing/Graph.g:1:34: T__69
+                               {
+                               mT__69(); 
+
+                               }
+                               break;
+                       case 6 :
+                               // src/org/simantics/graph/compiler/internal/parsing/Graph.g:1:40: T__70
+                               {
+                               mT__70(); 
+
+                               }
+                               break;
+                       case 7 :
+                               // src/org/simantics/graph/compiler/internal/parsing/Graph.g:1:46: T__71
+                               {
+                               mT__71(); 
+
+                               }
+                               break;
+                       case 8 :
+                               // src/org/simantics/graph/compiler/internal/parsing/Graph.g:1:52: T__72
+                               {
+                               mT__72(); 
+
+                               }
+                               break;
+                       case 9 :
+                               // src/org/simantics/graph/compiler/internal/parsing/Graph.g:1:58: T__73
+                               {
+                               mT__73(); 
+
+                               }
+                               break;
+                       case 10 :
+                               // src/org/simantics/graph/compiler/internal/parsing/Graph.g:1:64: T__74
+                               {
+                               mT__74(); 
+
+                               }
+                               break;
+                       case 11 :
+                               // src/org/simantics/graph/compiler/internal/parsing/Graph.g:1:70: T__75
+                               {
+                               mT__75(); 
+
+                               }
+                               break;
+                       case 12 :
+                               // src/org/simantics/graph/compiler/internal/parsing/Graph.g:1:76: T__76
+                               {
+                               mT__76(); 
+
+                               }
+                               break;
+                       case 13 :
+                               // src/org/simantics/graph/compiler/internal/parsing/Graph.g:1:82: T__77
+                               {
+                               mT__77(); 
+
+                               }
+                               break;
+                       case 14 :
+                               // src/org/simantics/graph/compiler/internal/parsing/Graph.g:1:88: T__78
+                               {
+                               mT__78(); 
+
+                               }
+                               break;
+                       case 15 :
+                               // src/org/simantics/graph/compiler/internal/parsing/Graph.g:1:94: T__79
+                               {
+                               mT__79(); 
+
+                               }
+                               break;
+                       case 16 :
+                               // src/org/simantics/graph/compiler/internal/parsing/Graph.g:1:100: T__80
+                               {
+                               mT__80(); 
+
+                               }
+                               break;
+                       case 17 :
+                               // src/org/simantics/graph/compiler/internal/parsing/Graph.g:1:106: ID
+                               {
+                               mID(); 
+
+                               }
+                               break;
+                       case 18 :
+                               // src/org/simantics/graph/compiler/internal/parsing/Graph.g:1:109: COMMENT
+                               {
+                               mCOMMENT(); 
+
+                               }
+                               break;
+                       case 19 :
+                               // src/org/simantics/graph/compiler/internal/parsing/Graph.g:1:117: WS
+                               {
+                               mWS(); 
+
+                               }
+                               break;
+                       case 20 :
+                               // src/org/simantics/graph/compiler/internal/parsing/Graph.g:1:120: LPAREN
+                               {
+                               mLPAREN(); 
+
+                               }
+                               break;
+                       case 21 :
+                               // src/org/simantics/graph/compiler/internal/parsing/Graph.g:1:127: RPAREN
+                               {
+                               mRPAREN(); 
+
+                               }
+                               break;
+                       case 22 :
+                               // src/org/simantics/graph/compiler/internal/parsing/Graph.g:1:134: LBRACKET
+                               {
+                               mLBRACKET(); 
+
+                               }
+                               break;
+                       case 23 :
+                               // src/org/simantics/graph/compiler/internal/parsing/Graph.g:1:143: RBRACKET
+                               {
+                               mRBRACKET(); 
+
+                               }
+                               break;
+                       case 24 :
+                               // src/org/simantics/graph/compiler/internal/parsing/Graph.g:1:152: LCURLY
+                               {
+                               mLCURLY(); 
+
+                               }
+                               break;
+                       case 25 :
+                               // src/org/simantics/graph/compiler/internal/parsing/Graph.g:1:159: RCURLY
+                               {
+                               mRCURLY(); 
+
+                               }
+                               break;
+                       case 26 :
+                               // src/org/simantics/graph/compiler/internal/parsing/Graph.g:1:166: INT_RANGE
+                               {
+                               mINT_RANGE(); 
+
+                               }
+                               break;
+                       case 27 :
+                               // src/org/simantics/graph/compiler/internal/parsing/Graph.g:1:176: RANGE
+                               {
+                               mRANGE(); 
+
+                               }
+                               break;
+                       case 28 :
+                               // src/org/simantics/graph/compiler/internal/parsing/Graph.g:1:182: NEWLINE
+                               {
+                               mNEWLINE(); 
+
+                               }
+                               break;
+                       case 29 :
+                               // src/org/simantics/graph/compiler/internal/parsing/Graph.g:1:190: INDENT
+                               {
+                               mINDENT(); 
+
+                               }
+                               break;
+                       case 30 :
+                               // src/org/simantics/graph/compiler/internal/parsing/Graph.g:1:197: DEDENT
+                               {
+                               mDEDENT(); 
+
+                               }
+                               break;
+                       case 31 :
+                               // src/org/simantics/graph/compiler/internal/parsing/Graph.g:1:204: INT
+                               {
+                               mINT(); 
+
+                               }
+                               break;
+                       case 32 :
+                               // src/org/simantics/graph/compiler/internal/parsing/Graph.g:1:208: FLOAT
+                               {
+                               mFLOAT(); 
+
+                               }
+                               break;
+                       case 33 :
+                               // src/org/simantics/graph/compiler/internal/parsing/Graph.g:1:214: STRING
+                               {
+                               mSTRING(); 
+
+                               }
+                               break;
+                       case 34 :
+                               // src/org/simantics/graph/compiler/internal/parsing/Graph.g:1:221: URI
+                               {
+                               mURI(); 
+
+                               }
+                               break;
+
+               }
+       }
+
+
+       protected DFA8 dfa8 = new DFA8(this);
+       protected DFA7 dfa7 = new DFA7(this);
+       protected DFA19 dfa19 = new DFA19(this);
+       protected DFA27 dfa27 = new DFA27(this);
+       static final String DFA8_eotS =
+               "\10\uffff";
+       static final String DFA8_eofS =
+               "\10\uffff";
+       static final String DFA8_minS =
+               "\1\55\1\60\1\56\1\uffff\1\56\1\uffff\1\55\1\uffff";
+       static final String DFA8_maxS =
+               "\2\71\1\145\1\uffff\1\145\1\uffff\1\71\1\uffff";
+       static final String DFA8_acceptS =
+               "\3\uffff\1\2\1\uffff\1\1\1\uffff\1\3";
+       static final String DFA8_specialS =
+               "\10\uffff}>";
+       static final String[] DFA8_transitionS = {
+                       "\1\1\1\3\1\uffff\12\2",
+                       "\12\2",
+                       "\1\4\1\uffff\12\2\13\uffff\1\5\37\uffff\1\5",
+                       "",
+                       "\1\6\1\uffff\12\5\13\uffff\1\5\37\uffff\1\5",
+                       "",
+                       "\1\7\1\5\1\uffff\12\7",
+                       ""
+       };
+
+       static final short[] DFA8_eot = DFA.unpackEncodedString(DFA8_eotS);
+       static final short[] DFA8_eof = DFA.unpackEncodedString(DFA8_eofS);
+       static final char[] DFA8_min = DFA.unpackEncodedStringToUnsignedChars(DFA8_minS);
+       static final char[] DFA8_max = DFA.unpackEncodedStringToUnsignedChars(DFA8_maxS);
+       static final short[] DFA8_accept = DFA.unpackEncodedString(DFA8_acceptS);
+       static final short[] DFA8_special = DFA.unpackEncodedString(DFA8_specialS);
+       static final short[][] DFA8_transition;
+
+       static {
+               int numStates = DFA8_transitionS.length;
+               DFA8_transition = new short[numStates][];
+               for (int i=0; i<numStates; i++) {
+                       DFA8_transition[i] = DFA.unpackEncodedString(DFA8_transitionS[i]);
+               }
+       }
+
+       protected class DFA8 extends DFA {
+
+               public DFA8(BaseRecognizer recognizer) {
+                       this.recognizer = recognizer;
+                       this.decisionNumber = 8;
+                       this.eot = DFA8_eot;
+                       this.eof = DFA8_eof;
+                       this.min = DFA8_min;
+                       this.max = DFA8_max;
+                       this.accept = DFA8_accept;
+                       this.special = DFA8_special;
+                       this.transition = DFA8_transition;
+               }
+               @Override
+               public String getDescription() {
+                       return "132:1: RANGE : ( FLOAT '..' ( FLOAT | INT )? | '..' FLOAT | INT '..' FLOAT );";
+               }
+       }
+
+       static final String DFA7_eotS =
+               "\1\3\1\uffff\1\5\3\uffff";
+       static final String DFA7_eofS =
+               "\6\uffff";
+       static final String DFA7_minS =
+               "\1\55\1\60\1\56\3\uffff";
+       static final String DFA7_maxS =
+               "\2\71\1\145\3\uffff";
+       static final String DFA7_acceptS =
+               "\3\uffff\1\3\1\1\1\2";
+       static final String DFA7_specialS =
+               "\6\uffff}>";
+       static final String[] DFA7_transitionS = {
+                       "\1\1\2\uffff\12\2",
+                       "\12\2",
+                       "\1\4\1\uffff\12\2\13\uffff\1\4\37\uffff\1\4",
+                       "",
+                       "",
+                       ""
+       };
+
+       static final short[] DFA7_eot = DFA.unpackEncodedString(DFA7_eotS);
+       static final short[] DFA7_eof = DFA.unpackEncodedString(DFA7_eofS);
+       static final char[] DFA7_min = DFA.unpackEncodedStringToUnsignedChars(DFA7_minS);
+       static final char[] DFA7_max = DFA.unpackEncodedStringToUnsignedChars(DFA7_maxS);
+       static final short[] DFA7_accept = DFA.unpackEncodedString(DFA7_acceptS);
+       static final short[] DFA7_special = DFA.unpackEncodedString(DFA7_specialS);
+       static final short[][] DFA7_transition;
+
+       static {
+               int numStates = DFA7_transitionS.length;
+               DFA7_transition = new short[numStates][];
+               for (int i=0; i<numStates; i++) {
+                       DFA7_transition[i] = DFA.unpackEncodedString(DFA7_transitionS[i]);
+               }
+       }
+
+       protected class DFA7 extends DFA {
+
+               public DFA7(BaseRecognizer recognizer) {
+                       this.recognizer = recognizer;
+                       this.decisionNumber = 7;
+                       this.eot = DFA7_eot;
+                       this.eof = DFA7_eof;
+                       this.min = DFA7_min;
+                       this.max = DFA7_max;
+                       this.accept = DFA7_accept;
+                       this.special = DFA7_special;
+                       this.transition = DFA7_transition;
+               }
+               @Override
+               public String getDescription() {
+                       return "132:24: ( FLOAT | INT )?";
+               }
+       }
+
+       static final String DFA19_eotS =
+               "\4\uffff";
+       static final String DFA19_eofS =
+               "\4\uffff";
+       static final String DFA19_minS =
+               "\1\60\1\56\2\uffff";
+       static final String DFA19_maxS =
+               "\1\71\1\145\2\uffff";
+       static final String DFA19_acceptS =
+               "\2\uffff\1\1\1\2";
+       static final String DFA19_specialS =
+               "\4\uffff}>";
+       static final String[] DFA19_transitionS = {
+                       "\12\1",
+                       "\1\2\1\uffff\12\1\13\uffff\1\3\37\uffff\1\3",
+                       "",
+                       ""
+       };
+
+       static final short[] DFA19_eot = DFA.unpackEncodedString(DFA19_eotS);
+       static final short[] DFA19_eof = DFA.unpackEncodedString(DFA19_eofS);
+       static final char[] DFA19_min = DFA.unpackEncodedStringToUnsignedChars(DFA19_minS);
+       static final char[] DFA19_max = DFA.unpackEncodedStringToUnsignedChars(DFA19_maxS);
+       static final short[] DFA19_accept = DFA.unpackEncodedString(DFA19_acceptS);
+       static final short[] DFA19_special = DFA.unpackEncodedString(DFA19_specialS);
+       static final short[][] DFA19_transition;
+
+       static {
+               int numStates = DFA19_transitionS.length;
+               DFA19_transition = new short[numStates][];
+               for (int i=0; i<numStates; i++) {
+                       DFA19_transition[i] = DFA.unpackEncodedString(DFA19_transitionS[i]);
+               }
+       }
+
+       protected class DFA19 extends DFA {
+
+               public DFA19(BaseRecognizer recognizer) {
+                       this.recognizer = recognizer;
+                       this.decisionNumber = 19;
+                       this.eot = DFA19_eot;
+                       this.eof = DFA19_eof;
+                       this.min = DFA19_min;
+                       this.max = DFA19_max;
+                       this.accept = DFA19_accept;
+                       this.special = DFA19_special;
+                       this.transition = DFA19_transition;
+               }
+               @Override
+               public String getDescription() {
+                       return "189:5: ( ( '0' .. '9' )+ '.' ( '0' .. '9' )* ( EXPONENT )? | ( '0' .. '9' )+ EXPONENT )";
+               }
+       }
+
+       static final String DFA27_eotS =
+               "\5\uffff\1\36\2\uffff\1\44\2\uffff\2\32\1\uffff\1\32\10\uffff\1\50\1\uffff"+
+               "\1\32\13\uffff\3\32\1\uffff\1\64\1\uffff\1\32\1\uffff\1\70\3\32\1\70\1"+
+               "\64\3\uffff\1\64\1\32\2\uffff\1\32\1\103\1\32\1\uffff\1\70\1\uffff\1\64"+
+               "\1\32\1\106\1\uffff\2\32\1\uffff\1\111\1\112\4\uffff";
+       static final String DFA27_eofS =
+               "\115\uffff";
+       static final String DFA27_minS =
+               "\1\11\3\uffff\1\55\1\56\1\uffff\1\55\1\75\2\uffff\1\141\1\162\1\uffff"+
+               "\1\116\10\uffff\1\56\1\uffff\1\105\3\uffff\1\55\7\uffff\1\154\1\165\1"+
+               "\104\1\uffff\1\56\1\53\1\104\1\60\1\56\1\163\1\145\1\105\1\55\1\56\1\53"+
+               "\1\uffff\1\60\1\56\1\105\2\uffff\1\145\1\60\1\116\1\60\1\56\1\60\1\56"+
+               "\1\116\1\60\1\uffff\2\124\1\uffff\2\60\2\0\2\uffff";
+       static final String DFA27_maxS =
+               "\1\175\3\uffff\1\71\1\56\1\uffff\1\150\1\75\2\uffff\1\141\1\162\1\uffff"+
+               "\1\116\10\uffff\1\145\1\uffff\1\105\3\uffff\1\71\7\uffff\1\154\1\165\1"+
+               "\104\1\uffff\1\145\1\71\1\104\1\71\1\145\1\163\1\145\1\105\1\71\1\145"+
+               "\1\71\1\uffff\2\71\1\105\2\uffff\1\145\1\172\1\116\1\71\1\145\2\71\1\116"+
+               "\1\172\1\uffff\2\124\1\uffff\2\172\2\0\2\uffff";
+       static final String DFA27_acceptS =
+               "\1\uffff\1\1\1\2\1\3\2\uffff\1\6\2\uffff\1\14\1\15\2\uffff\1\20\1\uffff"+
+               "\1\22\1\23\1\24\1\25\1\26\1\27\1\30\1\31\1\uffff\1\34\1\uffff\1\21\1\41"+
+               "\1\4\1\uffff\1\5\1\7\1\10\1\11\1\42\1\13\1\12\3\uffff\1\37\13\uffff\1"+
+               "\40\3\uffff\1\32\1\33\11\uffff\1\17\2\uffff\1\16\4\uffff\1\35\1\36";
+       static final String DFA27_specialS =
+               "\111\uffff\1\0\1\1\2\uffff}>";
+       static final String[] DFA27_transitionS = {
+                       "\1\20\1\30\2\uffff\1\20\22\uffff\1\20\1\uffff\1\33\1\uffff\1\1\1\2\2"+
+                       "\uffff\1\21\1\22\2\uffff\1\3\1\4\1\5\1\17\12\27\1\6\1\uffff\1\7\1\10"+
+                       "\1\11\1\uffff\1\12\3\32\1\31\4\32\1\16\21\32\1\23\1\uffff\1\24\1\uffff"+
+                       "\1\32\1\uffff\5\32\1\13\15\32\1\14\6\32\1\25\1\15\1\26",
+                       "",
+                       "",
+                       "",
+                       "\1\34\2\uffff\12\27",
+                       "\1\35",
+                       "",
+                       "\1\37\44\uffff\1\40\1\uffff\1\41\23\uffff\1\42",
+                       "\1\43",
+                       "",
+                       "",
+                       "\1\45",
+                       "\1\46",
+                       "",
+                       "\1\47",
+                       "",
+                       "",
+                       "",
+                       "",
+                       "",
+                       "",
+                       "",
+                       "",
+                       "\1\51\1\uffff\12\27\13\uffff\1\52\37\uffff\1\52",
+                       "",
+                       "\1\53",
+                       "",
+                       "",
+                       "",
+                       "\1\54\2\uffff\12\55",
+                       "",
+                       "",
+                       "",
+                       "",
+                       "",
+                       "",
+                       "",
+                       "\1\56",
+                       "\1\57",
+                       "\1\60",
+                       "",
+                       "\1\61\1\uffff\12\62\13\uffff\1\63\37\uffff\1\63",
+                       "\1\65\1\uffff\1\65\2\uffff\12\66",
+                       "\1\67",
+                       "\12\55",
+                       "\1\71\1\uffff\12\55\13\uffff\1\71\37\uffff\1\71",
+                       "\1\72",
+                       "\1\73",
+                       "\1\74",
+                       "\1\75\1\71\1\uffff\12\76",
+                       "\1\71\1\uffff\12\62\13\uffff\1\63\37\uffff\1\63",
+                       "\1\77\1\uffff\1\77\2\uffff\12\100",
+                       "",
+                       "\12\66",
+                       "\1\71\1\uffff\12\66",
+                       "\1\101",
+                       "",
+                       "",
+                       "\1\102",
+                       "\12\32\7\uffff\32\32\4\uffff\1\32\1\uffff\32\32",
+                       "\1\104",
+                       "\12\76",
+                       "\1\71\1\uffff\12\76\13\uffff\1\71\37\uffff\1\71",
+                       "\12\100",
+                       "\1\71\1\uffff\12\100",
+                       "\1\105",
+                       "\12\32\7\uffff\32\32\4\uffff\1\32\1\uffff\32\32",
+                       "",
+                       "\1\107",
+                       "\1\110",
+                       "",
+                       "\12\32\7\uffff\32\32\4\uffff\1\32\1\uffff\32\32",
+                       "\12\32\7\uffff\32\32\4\uffff\1\32\1\uffff\32\32",
+                       "\1\uffff",
+                       "\1\uffff",
+                       "",
+                       ""
+       };
+
+       static final short[] DFA27_eot = DFA.unpackEncodedString(DFA27_eotS);
+       static final short[] DFA27_eof = DFA.unpackEncodedString(DFA27_eofS);
+       static final char[] DFA27_min = DFA.unpackEncodedStringToUnsignedChars(DFA27_minS);
+       static final char[] DFA27_max = DFA.unpackEncodedStringToUnsignedChars(DFA27_maxS);
+       static final short[] DFA27_accept = DFA.unpackEncodedString(DFA27_acceptS);
+       static final short[] DFA27_special = DFA.unpackEncodedString(DFA27_specialS);
+       static final short[][] DFA27_transition;
+
+       static {
+               int numStates = DFA27_transitionS.length;
+               DFA27_transition = new short[numStates][];
+               for (int i=0; i<numStates; i++) {
+                       DFA27_transition[i] = DFA.unpackEncodedString(DFA27_transitionS[i]);
+               }
+       }
+
+       protected class DFA27 extends DFA {
+
+               public DFA27(BaseRecognizer recognizer) {
+                       this.recognizer = recognizer;
+                       this.decisionNumber = 27;
+                       this.eot = DFA27_eot;
+                       this.eof = DFA27_eof;
+                       this.min = DFA27_min;
+                       this.max = DFA27_max;
+                       this.accept = DFA27_accept;
+                       this.special = DFA27_special;
+                       this.transition = DFA27_transition;
+               }
+               @Override
+               public String getDescription() {
+                       return "1:1: Tokens : ( T__65 | T__66 | T__67 | T__68 | T__69 | T__70 | T__71 | T__72 | T__73 | T__74 | T__75 | T__76 | T__77 | T__78 | T__79 | T__80 | ID | COMMENT | WS | LPAREN | RPAREN | LBRACKET | RBRACKET | LCURLY | RCURLY | INT_RANGE | RANGE | NEWLINE | INDENT | DEDENT | INT | FLOAT | STRING | URI );";
+               }
+               @Override
+               public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+                       IntStream input = _input;
+                       int _s = s;
+                       switch ( s ) {
+                                       case 0 : 
+                                               int LA27_73 = input.LA(1);
+                                                
+                                               int index27_73 = input.index();
+                                               input.rewind();
+                                               s = -1;
+                                               if ( (!((( false )))) ) {s = 26;}
+                                               else if ( (( false )) ) {s = 75;}
+                                                
+                                               input.seek(index27_73);
+                                               if ( s>=0 ) return s;
+                                               break;
+
+                                       case 1 : 
+                                               int LA27_74 = input.LA(1);
+                                                
+                                               int index27_74 = input.index();
+                                               input.rewind();
+                                               s = -1;
+                                               if ( (!((( false )))) ) {s = 26;}
+                                               else if ( (( false )) ) {s = 76;}
+                                                
+                                               input.seek(index27_74);
+                                               if ( s>=0 ) return s;
+                                               break;
+                       }
+                       NoViableAltException nvae =
+                               new NoViableAltException(getDescription(), 27, _s, input);
+                       error(nvae);
+                       throw nvae;
+               }
+       }
 
 }
index 94df985e056289b8bea1f4446509c17002de3f56..8fca98c53730908640c0b053fbdd5867ccf4d52c 100644 (file)
@@ -1,4 +1,4 @@
-// $ANTLR 3.3 Nov 30, 2010 12:50:56 src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g 2011-12-19 14:53:14
+// $ANTLR 3.5.2 src/org/simantics/graph/compiler/internal/parsing/Graph.g 2018-06-15 14:02:54
  package org.simantics.graph.compiler.internal.parsing; 
 
 import org.antlr.runtime.*;
@@ -10,6233 +10,5825 @@ import java.util.HashMap;
 
 import org.antlr.runtime.tree.*;
 
-@SuppressWarnings("unused")
-public class GraphParser extends Parser {
-    public static final String[] tokenNames = new String[] {
-        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "INDENT", "DEDENT", "FILE", "RESOURCE", "PROPERTY", "VARIABLE", "EMBEDDED_VALUE", "EMBEDDED_TYPE", "TEMPLATE_INSTANCE", "TEMPLATE_DEFINITION", "BLANK", "REF", "EQUALS", "INSTANCE_OF", "INHERITS", "SUBRELATION_OF", "HAS_DOMAIN", "HAS_RANGE", "DOMAIN_OF", "REQUIRES_VALUE_TYPE", "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", "TRUE", "FALSE", "ID", "COMMENT", "WS", "LPAREN", "RPAREN", "LBRACKET", "RBRACKET", "LCURLY", "RCURLY", "INT", "INT_RANGE", "FLOAT", "RANGE", "NEWLINE", "EXPONENT", "ESC_SEQ", "STRING", "URI", "HEX_DIGIT", "UNICODE_ESC", "'@'", "'.'", "'<T'", "'<R'", "'<--'", "'-->'", "'==>'", "'>--'", "':'", "'='", "'%'", "'$'", "'|'", "','", "'true'", "'false'"
-    };
-    public static final int EOF=-1;
-    public static final int T__65=65;
-    public static final int T__66=66;
-    public static final int T__67=67;
-    public static final int T__68=68;
-    public static final int T__69=69;
-    public static final int T__70=70;
-    public static final int T__71=71;
-    public static final int T__72=72;
-    public static final int T__73=73;
-    public static final int T__74=74;
-    public static final int T__75=75;
-    public static final int T__76=76;
-    public static final int T__77=77;
-    public static final int T__78=78;
-    public static final int T__79=79;
-    public static final int T__80=80;
-    public static final int INDENT=4;
-    public static final int DEDENT=5;
-    public static final int FILE=6;
-    public static final int RESOURCE=7;
-    public static final int PROPERTY=8;
-    public static final int VARIABLE=9;
-    public static final int EMBEDDED_VALUE=10;
-    public static final int EMBEDDED_TYPE=11;
-    public static final int TEMPLATE_INSTANCE=12;
-    public static final int TEMPLATE_DEFINITION=13;
-    public static final int BLANK=14;
-    public static final int REF=15;
-    public static final int EQUALS=16;
-    public static final int INSTANCE_OF=17;
-    public static final int INHERITS=18;
-    public static final int SUBRELATION_OF=19;
-    public static final int HAS_DOMAIN=20;
-    public static final int HAS_RANGE=21;
-    public static final int DOMAIN_OF=22;
-    public static final int REQUIRES_VALUE_TYPE=23;
-    public static final int TYPE_DEFINITIONS=24;
-    public static final int TYPE_DEFINITION=25;
-    public static final int UNION_TYPE=26;
-    public static final int RECORD_TYPE=27;
-    public static final int TUPLE_TYPE=28;
-    public static final int ARRAY_TYPE=29;
-    public static final int TYPE_REFERENCE=30;
-    public static final int TYPE_ANNOTATION=31;
-    public static final int TYPE_COMPONENT=32;
-    public static final int VALUE_DEFINITIONS=33;
-    public static final int VALUE_DEFINITION=34;
-    public static final int NO_VALUE=35;
-    public static final int VARIANT=36;
-    public static final int ARRAY=37;
-    public static final int TUPLE=38;
-    public static final int TAGGED_VALUE=39;
-    public static final int RECORD=40;
-    public static final int MAP=41;
-    public static final int ASSIGNMENT=42;
-    public static final int TRUE=43;
-    public static final int FALSE=44;
-    public static final int ID=45;
-    public static final int COMMENT=46;
-    public static final int WS=47;
-    public static final int LPAREN=48;
-    public static final int RPAREN=49;
-    public static final int LBRACKET=50;
-    public static final int RBRACKET=51;
-    public static final int LCURLY=52;
-    public static final int RCURLY=53;
-    public static final int INT=54;
-    public static final int INT_RANGE=55;
-    public static final int FLOAT=56;
-    public static final int RANGE=57;
-    public static final int NEWLINE=58;
-    public static final int EXPONENT=59;
-    public static final int ESC_SEQ=60;
-    public static final int STRING=61;
-    public static final int URI=62;
-    public static final int HEX_DIGIT=63;
-    public static final int UNICODE_ESC=64;
-
-    // delegates
-    // delegators
-
-
-        public GraphParser(TokenStream input) {
-            this(input, new RecognizerSharedState());
-        }
-        public GraphParser(TokenStream input, RecognizerSharedState state) {
-            super(input, state);
-             
-        }
-        
-    protected TreeAdaptor adaptor = new CommonTreeAdaptor();
-
-    public void setTreeAdaptor(TreeAdaptor adaptor) {
-        this.adaptor = adaptor;
-    }
-    public TreeAdaptor getTreeAdaptor() {
-        return adaptor;
-    }
-
-    public String[] getTokenNames() { return GraphParser.tokenNames; }
-    public String getGrammarFileName() { return "src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g"; }
-
-
-    public static class file_return extends ParserRuleReturnScope {
-        CommonTree tree;
-        public Object getTree() { return tree; }
-    };
-
-    // $ANTLR start "file"
-    // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:224:1: file : ( NEWLINE )? ( resourceDefinitions )? EOF -> ^( FILE ( resourceDefinitions )? ) ;
-    public final GraphParser.file_return file() throws RecognitionException {
-        GraphParser.file_return retval = new GraphParser.file_return();
-        retval.start = input.LT(1);
-
-        CommonTree root_0 = null;
-
-        Token NEWLINE1=null;
-        Token EOF3=null;
-        GraphParser.resourceDefinitions_return resourceDefinitions2 = null;
-
-
-        CommonTree NEWLINE1_tree=null;
-        CommonTree EOF3_tree=null;
-        RewriteRuleTokenStream stream_NEWLINE=new RewriteRuleTokenStream(adaptor,"token NEWLINE");
-        RewriteRuleTokenStream stream_EOF=new RewriteRuleTokenStream(adaptor,"token EOF");
-        RewriteRuleSubtreeStream stream_resourceDefinitions=new RewriteRuleSubtreeStream(adaptor,"rule resourceDefinitions");
-        try {
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:224:6: ( ( NEWLINE )? ( resourceDefinitions )? EOF -> ^( FILE ( resourceDefinitions )? ) )
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:224:8: ( NEWLINE )? ( resourceDefinitions )? EOF
-            {
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:224:8: ( NEWLINE )?
-            int alt1=2;
-            int LA1_0 = input.LA(1);
-
-            if ( (LA1_0==NEWLINE) ) {
-                alt1=1;
-            }
-            switch (alt1) {
-                case 1 :
-                    // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:224:8: NEWLINE
-                    {
-                    NEWLINE1=(Token)match(input,NEWLINE,FOLLOW_NEWLINE_in_file1230); if (state.failed) return retval; 
-                    if ( state.backtracking==0 ) stream_NEWLINE.add(NEWLINE1);
-
-
-                    }
-                    break;
-
-            }
-
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:224:17: ( resourceDefinitions )?
-            int alt2=2;
-            int LA2_0 = input.LA(1);
-
-            if ( (LA2_0==ID||LA2_0==LPAREN||LA2_0==LBRACKET||LA2_0==LCURLY||LA2_0==INT||LA2_0==FLOAT||(LA2_0>=STRING && LA2_0<=URI)||LA2_0==65||(LA2_0>=75 && LA2_0<=76)||(LA2_0>=79 && LA2_0<=80)) ) {
-                alt2=1;
-            }
-            switch (alt2) {
-                case 1 :
-                    // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:224:17: resourceDefinitions
-                    {
-                    pushFollow(FOLLOW_resourceDefinitions_in_file1233);
-                    resourceDefinitions2=resourceDefinitions();
-
-                    state._fsp--;
-                    if (state.failed) return retval;
-                    if ( state.backtracking==0 ) stream_resourceDefinitions.add(resourceDefinitions2.getTree());
-
-                    }
-                    break;
-
-            }
-
-            EOF3=(Token)match(input,EOF,FOLLOW_EOF_in_file1236); if (state.failed) return retval; 
-            if ( state.backtracking==0 ) stream_EOF.add(EOF3);
-
-
-
-            // AST REWRITE
-            // elements: resourceDefinitions
-            // token labels: 
-            // rule labels: retval
-            // token list labels: 
-            // rule list labels: 
-            // wildcard labels: 
-            if ( state.backtracking==0 ) {
-            retval.tree = root_0;
-            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);
-
-            root_0 = (CommonTree)adaptor.nil();
-            // 224:42: -> ^( FILE ( resourceDefinitions )? )
-            {
-                // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:224:45: ^( FILE ( resourceDefinitions )? )
-                {
-                CommonTree root_1 = (CommonTree)adaptor.nil();
-                root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(FILE, "FILE"), root_1);
-
-                // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:224:52: ( resourceDefinitions )?
-                if ( stream_resourceDefinitions.hasNext() ) {
-                    adaptor.addChild(root_1, stream_resourceDefinitions.nextTree());
-
-                }
-                stream_resourceDefinitions.reset();
-
-                adaptor.addChild(root_0, root_1);
-                }
-
-            }
-
-            retval.tree = root_0;}
-            }
-
-            retval.stop = input.LT(-1);
-
-            if ( state.backtracking==0 ) {
-
-            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
-            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
-            }
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-       retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);
-
-        }
-        finally {
-        }
-        return retval;
-    }
-    // $ANTLR end "file"
-
-    public static class resourceDefinitions_return extends ParserRuleReturnScope {
-        CommonTree tree;
-        public Object getTree() { return tree; }
-    };
-
-    // $ANTLR start "resourceDefinitions"
-    // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:226:1: resourceDefinitions : resourceDefinition ( NEWLINE resourceDefinition )* ;
-    public final GraphParser.resourceDefinitions_return resourceDefinitions() throws RecognitionException {
-        GraphParser.resourceDefinitions_return retval = new GraphParser.resourceDefinitions_return();
-        retval.start = input.LT(1);
-
-        CommonTree root_0 = null;
-
-        Token NEWLINE5=null;
-        GraphParser.resourceDefinition_return resourceDefinition4 = null;
-
-        GraphParser.resourceDefinition_return resourceDefinition6 = null;
-
-
-        CommonTree NEWLINE5_tree=null;
-
-        try {
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:227:6: ( resourceDefinition ( NEWLINE resourceDefinition )* )
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:227:8: resourceDefinition ( NEWLINE resourceDefinition )*
-            {
-            root_0 = (CommonTree)adaptor.nil();
-
-            pushFollow(FOLLOW_resourceDefinition_in_resourceDefinitions1260);
-            resourceDefinition4=resourceDefinition();
 
-            state._fsp--;
-            if (state.failed) return retval;
-            if ( state.backtracking==0 ) adaptor.addChild(root_0, resourceDefinition4.getTree());
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:227:27: ( NEWLINE resourceDefinition )*
-            loop3:
-            do {
-                int alt3=2;
-                int LA3_0 = input.LA(1);
-
-                if ( (LA3_0==NEWLINE) ) {
-                    alt3=1;
-                }
-
-
-                switch (alt3) {
-               case 1 :
-                   // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:227:28: NEWLINE resourceDefinition
-                   {
-                   NEWLINE5=(Token)match(input,NEWLINE,FOLLOW_NEWLINE_in_resourceDefinitions1263); if (state.failed) return retval;
-                   pushFollow(FOLLOW_resourceDefinition_in_resourceDefinitions1266);
-                   resourceDefinition6=resourceDefinition();
-
-                   state._fsp--;
-                   if (state.failed) return retval;
-                   if ( state.backtracking==0 ) adaptor.addChild(root_0, resourceDefinition6.getTree());
-
-                   }
-                   break;
-
-               default :
-                   break loop3;
-                }
-            } while (true);
-
-
-            }
-
-            retval.stop = input.LT(-1);
-
-            if ( state.backtracking==0 ) {
-
-            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
-            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
-            }
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-       retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);
-
-        }
-        finally {
-        }
-        return retval;
-    }
-    // $ANTLR end "resourceDefinitions"
-
-    public static class resourceDefinition_return extends ParserRuleReturnScope {
-        CommonTree tree;
-        public Object getTree() { return tree; }
-    };
-
-    // $ANTLR start "resourceDefinition"
-    // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:230:1: resourceDefinition : ( resource ( localProperty )* ( INDENT property ( NEWLINE property )* DEDENT )? -> ^( RESOURCE resource ( localProperty )* ( property )* ) | template -> ^( RESOURCE ^( BLANK template ) template ) );
-    public final GraphParser.resourceDefinition_return resourceDefinition() throws RecognitionException {
-        GraphParser.resourceDefinition_return retval = new GraphParser.resourceDefinition_return();
-        retval.start = input.LT(1);
-
-        CommonTree root_0 = null;
-
-        Token INDENT9=null;
-        Token NEWLINE11=null;
-        Token DEDENT13=null;
-        GraphParser.resource_return resource7 = null;
-
-        GraphParser.localProperty_return localProperty8 = null;
-
-        GraphParser.property_return property10 = null;
-
-        GraphParser.property_return property12 = null;
-
-        GraphParser.template_return template14 = null;
-
-
-        CommonTree INDENT9_tree=null;
-        CommonTree NEWLINE11_tree=null;
-        CommonTree DEDENT13_tree=null;
-        RewriteRuleTokenStream stream_DEDENT=new RewriteRuleTokenStream(adaptor,"token DEDENT");
-        RewriteRuleTokenStream stream_NEWLINE=new RewriteRuleTokenStream(adaptor,"token NEWLINE");
-        RewriteRuleTokenStream stream_INDENT=new RewriteRuleTokenStream(adaptor,"token INDENT");
-        RewriteRuleSubtreeStream stream_template=new RewriteRuleSubtreeStream(adaptor,"rule template");
-        RewriteRuleSubtreeStream stream_resource=new RewriteRuleSubtreeStream(adaptor,"rule resource");
-        RewriteRuleSubtreeStream stream_property=new RewriteRuleSubtreeStream(adaptor,"rule property");
-        RewriteRuleSubtreeStream stream_localProperty=new RewriteRuleSubtreeStream(adaptor,"rule localProperty");
-        try {
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:231:5: ( resource ( localProperty )* ( INDENT property ( NEWLINE property )* DEDENT )? -> ^( RESOURCE resource ( localProperty )* ( property )* ) | template -> ^( RESOURCE ^( BLANK template ) template ) )
-            int alt7=2;
-            int LA7_0 = input.LA(1);
-
-            if ( (LA7_0==ID||LA7_0==LPAREN||LA7_0==LBRACKET||LA7_0==LCURLY||LA7_0==INT||LA7_0==FLOAT||(LA7_0>=STRING && LA7_0<=URI)||(LA7_0>=75 && LA7_0<=76)||(LA7_0>=79 && LA7_0<=80)) ) {
-                alt7=1;
-            }
-            else if ( (LA7_0==65) ) {
-                alt7=2;
-            }
-            else {
-                if (state.backtracking>0) {state.failed=true; return retval;}
-                NoViableAltException nvae =
-                    new NoViableAltException("", 7, 0, input);
-
-                throw nvae;
-            }
-            switch (alt7) {
-                case 1 :
-                    // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:231:7: resource ( localProperty )* ( INDENT property ( NEWLINE property )* DEDENT )?
-                    {
-                    pushFollow(FOLLOW_resource_in_resourceDefinition1300);
-                    resource7=resource();
-
-                    state._fsp--;
-                    if (state.failed) return retval;
-                    if ( state.backtracking==0 ) stream_resource.add(resource7.getTree());
-                    // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:232:7: ( localProperty )*
-                    loop4:
-                    do {
-                        int alt4=2;
-                        int LA4_0 = input.LA(1);
-
-                        if ( (LA4_0==ID||LA4_0==URI||(LA4_0>=67 && LA4_0<=75)) ) {
-                            alt4=1;
-                        }
-
-
-                        switch (alt4) {
-                       case 1 :
-                           // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:232:7: localProperty
-                           {
-                           pushFollow(FOLLOW_localProperty_in_resourceDefinition1308);
-                           localProperty8=localProperty();
-
-                           state._fsp--;
-                           if (state.failed) return retval;
-                           if ( state.backtracking==0 ) stream_localProperty.add(localProperty8.getTree());
-
-                           }
-                           break;
-
-                       default :
-                           break loop4;
-                        }
-                    } while (true);
-
-                    // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:233:7: ( INDENT property ( NEWLINE property )* DEDENT )?
-                    int alt6=2;
-                    int LA6_0 = input.LA(1);
-
-                    if ( (LA6_0==INDENT) ) {
-                        alt6=1;
-                    }
-                    switch (alt6) {
-                        case 1 :
-                            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:233:8: INDENT property ( NEWLINE property )* DEDENT
-                            {
-                            INDENT9=(Token)match(input,INDENT,FOLLOW_INDENT_in_resourceDefinition1318); if (state.failed) return retval; 
-                            if ( state.backtracking==0 ) stream_INDENT.add(INDENT9);
-
-                            pushFollow(FOLLOW_property_in_resourceDefinition1320);
-                            property10=property();
-
-                            state._fsp--;
-                            if (state.failed) return retval;
-                            if ( state.backtracking==0 ) stream_property.add(property10.getTree());
-                            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:233:24: ( NEWLINE property )*
-                            loop5:
-                            do {
-                                int alt5=2;
-                                int LA5_0 = input.LA(1);
-
-                                if ( (LA5_0==NEWLINE) ) {
-                                    alt5=1;
-                                }
-
-
-                                switch (alt5) {
-                               case 1 :
-                                   // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:233:25: NEWLINE property
-                                   {
-                                   NEWLINE11=(Token)match(input,NEWLINE,FOLLOW_NEWLINE_in_resourceDefinition1323); if (state.failed) return retval; 
-                                   if ( state.backtracking==0 ) stream_NEWLINE.add(NEWLINE11);
-
-                                   pushFollow(FOLLOW_property_in_resourceDefinition1325);
-                                   property12=property();
-
-                                   state._fsp--;
-                                   if (state.failed) return retval;
-                                   if ( state.backtracking==0 ) stream_property.add(property12.getTree());
-
-                                   }
-                                   break;
-
-                               default :
-                                   break loop5;
-                                }
-                            } while (true);
-
-                            DEDENT13=(Token)match(input,DEDENT,FOLLOW_DEDENT_in_resourceDefinition1329); if (state.failed) return retval; 
-                            if ( state.backtracking==0 ) stream_DEDENT.add(DEDENT13);
-
-
-                            }
-                            break;
-
-                    }
-
-
-
-                    // AST REWRITE
-                    // elements: property, localProperty, resource
-                    // token labels: 
-                    // rule labels: retval
-                    // token list labels: 
-                    // rule list labels: 
-                    // wildcard labels: 
-                    if ( state.backtracking==0 ) {
-                    retval.tree = root_0;
-                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);
-
-                    root_0 = (CommonTree)adaptor.nil();
-                    // 234:5: -> ^( RESOURCE resource ( localProperty )* ( property )* )
-                    {
-                        // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:234:8: ^( RESOURCE resource ( localProperty )* ( property )* )
-                        {
-                        CommonTree root_1 = (CommonTree)adaptor.nil();
-                        root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(RESOURCE, "RESOURCE"), root_1);
-
-                        adaptor.addChild(root_1, stream_resource.nextTree());
-                        // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:234:28: ( localProperty )*
-                        while ( stream_localProperty.hasNext() ) {
-                            adaptor.addChild(root_1, stream_localProperty.nextTree());
-
-                        }
-                        stream_localProperty.reset();
-                        // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:234:43: ( property )*
-                        while ( stream_property.hasNext() ) {
-                            adaptor.addChild(root_1, stream_property.nextTree());
-
-                        }
-                        stream_property.reset();
-
-                        adaptor.addChild(root_0, root_1);
-                        }
-
-                    }
-
-                    retval.tree = root_0;}
-                    }
-                    break;
-                case 2 :
-                    // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:235:7: template
-                    {
-                    pushFollow(FOLLOW_template_in_resourceDefinition1358);
-                    template14=template();
-
-                    state._fsp--;
-                    if (state.failed) return retval;
-                    if ( state.backtracking==0 ) stream_template.add(template14.getTree());
-
-
-                    // AST REWRITE
-                    // elements: template, template
-                    // token labels: 
-                    // rule labels: retval
-                    // token list labels: 
-                    // rule list labels: 
-                    // wildcard labels: 
-                    if ( state.backtracking==0 ) {
-                    retval.tree = root_0;
-                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);
-
-                    root_0 = (CommonTree)adaptor.nil();
-                    // 235:16: -> ^( RESOURCE ^( BLANK template ) template )
-                    {
-                        // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:235:19: ^( RESOURCE ^( BLANK template ) template )
-                        {
-                        CommonTree root_1 = (CommonTree)adaptor.nil();
-                        root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(RESOURCE, "RESOURCE"), root_1);
-
-                        // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:235:30: ^( BLANK template )
-                        {
-                        CommonTree root_2 = (CommonTree)adaptor.nil();
-                        root_2 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(BLANK, "BLANK"), root_2);
-
-                        adaptor.addChild(root_2, stream_template.nextTree());
-
-                        adaptor.addChild(root_1, root_2);
-                        }
-                        adaptor.addChild(root_1, stream_template.nextTree());
-
-                        adaptor.addChild(root_0, root_1);
-                        }
-
-                    }
-
-                    retval.tree = root_0;}
-                    }
-                    break;
-
-            }
-            retval.stop = input.LT(-1);
-
-            if ( state.backtracking==0 ) {
-
-            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
-            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
-            }
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-       retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);
-
-        }
-        finally {
-        }
-        return retval;
-    }
-    // $ANTLR end "resourceDefinition"
-
-    public static class localProperty_return extends ParserRuleReturnScope {
-        CommonTree tree;
-        public Object getTree() { return tree; }
-    };
-
-    // $ANTLR start "localProperty"
-    // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:238:1: localProperty : relation resource -> ^( PROPERTY relation ^( RESOURCE resource ) ) ;
-    public final GraphParser.localProperty_return localProperty() throws RecognitionException {
-        GraphParser.localProperty_return retval = new GraphParser.localProperty_return();
-        retval.start = input.LT(1);
-
-        CommonTree root_0 = null;
-
-        GraphParser.relation_return relation15 = null;
-
-        GraphParser.resource_return resource16 = null;
-
-
-        RewriteRuleSubtreeStream stream_relation=new RewriteRuleSubtreeStream(adaptor,"rule relation");
-        RewriteRuleSubtreeStream stream_resource=new RewriteRuleSubtreeStream(adaptor,"rule resource");
-        try {
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:239:5: ( relation resource -> ^( PROPERTY relation ^( RESOURCE resource ) ) )
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:239:7: relation resource
-            {
-            pushFollow(FOLLOW_relation_in_localProperty1393);
-            relation15=relation();
-
-            state._fsp--;
-            if (state.failed) return retval;
-            if ( state.backtracking==0 ) stream_relation.add(relation15.getTree());
-            pushFollow(FOLLOW_resource_in_localProperty1395);
-            resource16=resource();
-
-            state._fsp--;
-            if (state.failed) return retval;
-            if ( state.backtracking==0 ) stream_resource.add(resource16.getTree());
-
-
-            // AST REWRITE
-            // elements: resource, relation
-            // token labels: 
-            // rule labels: retval
-            // token list labels: 
-            // rule list labels: 
-            // wildcard labels: 
-            if ( state.backtracking==0 ) {
-            retval.tree = root_0;
-            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);
-
-            root_0 = (CommonTree)adaptor.nil();
-            // 240:5: -> ^( PROPERTY relation ^( RESOURCE resource ) )
-            {
-                // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:240:8: ^( PROPERTY relation ^( RESOURCE resource ) )
-                {
-                CommonTree root_1 = (CommonTree)adaptor.nil();
-                root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(PROPERTY, "PROPERTY"), root_1);
-
-                adaptor.addChild(root_1, stream_relation.nextTree());
-                // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:240:28: ^( RESOURCE resource )
-                {
-                CommonTree root_2 = (CommonTree)adaptor.nil();
-                root_2 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(RESOURCE, "RESOURCE"), root_2);
-
-                adaptor.addChild(root_2, stream_resource.nextTree());
-
-                adaptor.addChild(root_1, root_2);
-                }
-
-                adaptor.addChild(root_0, root_1);
-                }
-
-            }
-
-            retval.tree = root_0;}
-            }
-
-            retval.stop = input.LT(-1);
-
-            if ( state.backtracking==0 ) {
-
-            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
-            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
-            }
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-       retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);
-
-        }
-        finally {
-        }
-        return retval;
-    }
-    // $ANTLR end "localProperty"
-
-    public static class property_return extends ParserRuleReturnScope {
-        CommonTree tree;
-        public Object getTree() { return tree; }
-    };
-
-    // $ANTLR start "property"
-    // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:243:1: property : ( relation ( resourceDefinition -> ^( PROPERTY relation resourceDefinition ) | INDENT resourceDefinitions DEDENT -> ^( PROPERTY relation resourceDefinitions ) ) | template );
-    public final GraphParser.property_return property() throws RecognitionException {
-        GraphParser.property_return retval = new GraphParser.property_return();
-        retval.start = input.LT(1);
-
-        CommonTree root_0 = null;
-
-        Token INDENT19=null;
-        Token DEDENT21=null;
-        GraphParser.relation_return relation17 = null;
-
-        GraphParser.resourceDefinition_return resourceDefinition18 = null;
-
-        GraphParser.resourceDefinitions_return resourceDefinitions20 = null;
-
-        GraphParser.template_return template22 = null;
-
-
-        CommonTree INDENT19_tree=null;
-        CommonTree DEDENT21_tree=null;
-        RewriteRuleTokenStream stream_DEDENT=new RewriteRuleTokenStream(adaptor,"token DEDENT");
-        RewriteRuleTokenStream stream_INDENT=new RewriteRuleTokenStream(adaptor,"token INDENT");
-        RewriteRuleSubtreeStream stream_resourceDefinition=new RewriteRuleSubtreeStream(adaptor,"rule resourceDefinition");
-        RewriteRuleSubtreeStream stream_relation=new RewriteRuleSubtreeStream(adaptor,"rule relation");
-        RewriteRuleSubtreeStream stream_resourceDefinitions=new RewriteRuleSubtreeStream(adaptor,"rule resourceDefinitions");
-        try {
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:244:5: ( relation ( resourceDefinition -> ^( PROPERTY relation resourceDefinition ) | INDENT resourceDefinitions DEDENT -> ^( PROPERTY relation resourceDefinitions ) ) | template )
-            int alt9=2;
-            int LA9_0 = input.LA(1);
-
-            if ( (LA9_0==ID||LA9_0==URI||(LA9_0>=67 && LA9_0<=75)) ) {
-                alt9=1;
-            }
-            else if ( (LA9_0==65) ) {
-                alt9=2;
-            }
-            else {
-                if (state.backtracking>0) {state.failed=true; return retval;}
-                NoViableAltException nvae =
-                    new NoViableAltException("", 9, 0, input);
-
-                throw nvae;
-            }
-            switch (alt9) {
-                case 1 :
-                    // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:244:7: relation ( resourceDefinition -> ^( PROPERTY relation resourceDefinition ) | INDENT resourceDefinitions DEDENT -> ^( PROPERTY relation resourceDefinitions ) )
-                    {
-                    pushFollow(FOLLOW_relation_in_property1434);
-                    relation17=relation();
-
-                    state._fsp--;
-                    if (state.failed) return retval;
-                    if ( state.backtracking==0 ) stream_relation.add(relation17.getTree());
-                    // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:245:7: ( resourceDefinition -> ^( PROPERTY relation resourceDefinition ) | INDENT resourceDefinitions DEDENT -> ^( PROPERTY relation resourceDefinitions ) )
-                    int alt8=2;
-                    int LA8_0 = input.LA(1);
-
-                    if ( (LA8_0==ID||LA8_0==LPAREN||LA8_0==LBRACKET||LA8_0==LCURLY||LA8_0==INT||LA8_0==FLOAT||(LA8_0>=STRING && LA8_0<=URI)||LA8_0==65||(LA8_0>=75 && LA8_0<=76)||(LA8_0>=79 && LA8_0<=80)) ) {
-                        alt8=1;
-                    }
-                    else if ( (LA8_0==INDENT) ) {
-                        alt8=2;
-                    }
-                    else {
-                        if (state.backtracking>0) {state.failed=true; return retval;}
-                        NoViableAltException nvae =
-                            new NoViableAltException("", 8, 0, input);
-
-                        throw nvae;
-                    }
-                    switch (alt8) {
-                        case 1 :
-                            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:245:9: resourceDefinition
-                            {
-                            pushFollow(FOLLOW_resourceDefinition_in_property1444);
-                            resourceDefinition18=resourceDefinition();
-
-                            state._fsp--;
-                            if (state.failed) return retval;
-                            if ( state.backtracking==0 ) stream_resourceDefinition.add(resourceDefinition18.getTree());
-
-
-                            // AST REWRITE
-                            // elements: relation, resourceDefinition
-                            // token labels: 
-                            // rule labels: retval
-                            // token list labels: 
-                            // rule list labels: 
-                            // wildcard labels: 
-                            if ( state.backtracking==0 ) {
-                            retval.tree = root_0;
-                            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);
-
-                            root_0 = (CommonTree)adaptor.nil();
-                            // 245:28: -> ^( PROPERTY relation resourceDefinition )
-                            {
-                                // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:245:31: ^( PROPERTY relation resourceDefinition )
-                                {
-                                CommonTree root_1 = (CommonTree)adaptor.nil();
-                                root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(PROPERTY, "PROPERTY"), root_1);
-
-                                adaptor.addChild(root_1, stream_relation.nextTree());
-                                adaptor.addChild(root_1, stream_resourceDefinition.nextTree());
-
-                                adaptor.addChild(root_0, root_1);
-                                }
-
-                            }
-
-                            retval.tree = root_0;}
-                            }
-                            break;
-                        case 2 :
-                            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:246:9: INDENT resourceDefinitions DEDENT
-                            {
-                            INDENT19=(Token)match(input,INDENT,FOLLOW_INDENT_in_property1464); if (state.failed) return retval; 
-                            if ( state.backtracking==0 ) stream_INDENT.add(INDENT19);
-
-                            pushFollow(FOLLOW_resourceDefinitions_in_property1466);
-                            resourceDefinitions20=resourceDefinitions();
-
-                            state._fsp--;
-                            if (state.failed) return retval;
-                            if ( state.backtracking==0 ) stream_resourceDefinitions.add(resourceDefinitions20.getTree());
-                            DEDENT21=(Token)match(input,DEDENT,FOLLOW_DEDENT_in_property1468); if (state.failed) return retval; 
-                            if ( state.backtracking==0 ) stream_DEDENT.add(DEDENT21);
-
-
-
-                            // AST REWRITE
-                            // elements: relation, resourceDefinitions
-                            // token labels: 
-                            // rule labels: retval
-                            // token list labels: 
-                            // rule list labels: 
-                            // wildcard labels: 
-                            if ( state.backtracking==0 ) {
-                            retval.tree = root_0;
-                            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);
-
-                            root_0 = (CommonTree)adaptor.nil();
-                            // 246:43: -> ^( PROPERTY relation resourceDefinitions )
-                            {
-                                // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:246:46: ^( PROPERTY relation resourceDefinitions )
-                                {
-                                CommonTree root_1 = (CommonTree)adaptor.nil();
-                                root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(PROPERTY, "PROPERTY"), root_1);
-
-                                adaptor.addChild(root_1, stream_relation.nextTree());
-                                adaptor.addChild(root_1, stream_resourceDefinitions.nextTree());
-
-                                adaptor.addChild(root_0, root_1);
-                                }
-
-                            }
-
-                            retval.tree = root_0;}
-                            }
-                            break;
-
-                    }
-
-
-                    }
-                    break;
-                case 2 :
-                    // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:248:7: template
-                    {
-                    root_0 = (CommonTree)adaptor.nil();
-
-                    pushFollow(FOLLOW_template_in_property1494);
-                    template22=template();
-
-                    state._fsp--;
-                    if (state.failed) return retval;
-                    if ( state.backtracking==0 ) adaptor.addChild(root_0, template22.getTree());
-
-                    }
-                    break;
-
-            }
-            retval.stop = input.LT(-1);
-
-            if ( state.backtracking==0 ) {
-
-            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
-            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
-            }
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-       retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);
-
-        }
-        finally {
-        }
-        return retval;
-    }
-    // $ANTLR end "property"
-
-    public static class template_return extends ParserRuleReturnScope {
-        CommonTree tree;
-        public Object getTree() { return tree; }
-    };
-
-    // $ANTLR start "template"
-    // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:251:1: template : '@' ({...}? => ID ( resource )+ INDENT resourceDefinitions DEDENT -> ^( TEMPLATE_DEFINITION ( resource )+ resourceDefinitions ) | ( resource )+ ( INDENT resourceDefinitions DEDENT )? -> ^( TEMPLATE_INSTANCE ( resource )+ ( resourceDefinitions )? ) ) ;
-    public final GraphParser.template_return template() throws RecognitionException {
-        GraphParser.template_return retval = new GraphParser.template_return();
-        retval.start = input.LT(1);
-
-        CommonTree root_0 = null;
-
-        Token char_literal23=null;
-        Token ID24=null;
-        Token INDENT26=null;
-        Token DEDENT28=null;
-        Token INDENT30=null;
-        Token DEDENT32=null;
-        GraphParser.resource_return resource25 = null;
-
-        GraphParser.resourceDefinitions_return resourceDefinitions27 = null;
-
-        GraphParser.resource_return resource29 = null;
-
-        GraphParser.resourceDefinitions_return resourceDefinitions31 = null;
-
-
-        CommonTree char_literal23_tree=null;
-        CommonTree ID24_tree=null;
-        CommonTree INDENT26_tree=null;
-        CommonTree DEDENT28_tree=null;
-        CommonTree INDENT30_tree=null;
-        CommonTree DEDENT32_tree=null;
-        RewriteRuleTokenStream stream_DEDENT=new RewriteRuleTokenStream(adaptor,"token DEDENT");
-        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
-        RewriteRuleTokenStream stream_65=new RewriteRuleTokenStream(adaptor,"token 65");
-        RewriteRuleTokenStream stream_INDENT=new RewriteRuleTokenStream(adaptor,"token INDENT");
-        RewriteRuleSubtreeStream stream_resource=new RewriteRuleSubtreeStream(adaptor,"rule resource");
-        RewriteRuleSubtreeStream stream_resourceDefinitions=new RewriteRuleSubtreeStream(adaptor,"rule resourceDefinitions");
-        try {
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:252:5: ( '@' ({...}? => ID ( resource )+ INDENT resourceDefinitions DEDENT -> ^( TEMPLATE_DEFINITION ( resource )+ resourceDefinitions ) | ( resource )+ ( INDENT resourceDefinitions DEDENT )? -> ^( TEMPLATE_INSTANCE ( resource )+ ( resourceDefinitions )? ) ) )
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:252:7: '@' ({...}? => ID ( resource )+ INDENT resourceDefinitions DEDENT -> ^( TEMPLATE_DEFINITION ( resource )+ resourceDefinitions ) | ( resource )+ ( INDENT resourceDefinitions DEDENT )? -> ^( TEMPLATE_INSTANCE ( resource )+ ( resourceDefinitions )? ) )
-            {
-            char_literal23=(Token)match(input,65,FOLLOW_65_in_template1515); if (state.failed) return retval; 
-            if ( state.backtracking==0 ) stream_65.add(char_literal23);
-
-            // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:253:5: ({...}? => ID ( resource )+ INDENT resourceDefinitions DEDENT -> ^( TEMPLATE_DEFINITION ( resource )+ resourceDefinitions ) | ( resource )+ ( INDENT resourceDefinitions DEDENT )? -> ^( TEMPLATE_INSTANCE ( resource )+ ( resourceDefinitions )? ) )
-            int alt13=2;
-            alt13 = dfa13.predict(input);
-            switch (alt13) {
-                case 1 :
-                    // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:253:7: {...}? => ID ( resource )+ INDENT resourceDefinitions DEDENT
-                    {
-                    if ( !((input.LT(1).getText().equals("template"))) ) {
-                        if (state.backtracking>0) {state.failed=true; return retval;}
-                        throw new FailedPredicateException(input, "template", "input.LT(1).getText().equals(\"template\")");
-                    }
-                    ID24=(Token)match(input,ID,FOLLOW_ID_in_template1533); if (state.failed) return retval; 
-                    if ( state.backtracking==0 ) stream_ID.add(ID24);
-
-                    // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:254:10: ( resource )+
-                    int cnt10=0;
-                    loop10:
-                    do {
-                        int alt10=2;
-                        int LA10_0 = input.LA(1);
-
-                        if ( (LA10_0==ID||LA10_0==LPAREN||LA10_0==LBRACKET||LA10_0==LCURLY||LA10_0==INT||LA10_0==FLOAT||(LA10_0>=STRING && LA10_0<=URI)||(LA10_0>=75 && LA10_0<=76)||(LA10_0>=79 && LA10_0<=80)) ) {
-                            alt10=1;
-                        }
-
-
-                        switch (alt10) {
-                       case 1 :
-                           // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:254:10: resource
-                           {
-                           pushFollow(FOLLOW_resource_in_template1535);
-                           resource25=resource();
-
-                           state._fsp--;
-                           if (state.failed) return retval;
-                           if ( state.backtracking==0 ) stream_resource.add(resource25.getTree());
-
-                           }
-                           break;
-
-                       default :
-                           if ( cnt10 >= 1 ) break loop10;
-                           if (state.backtracking>0) {state.failed=true; return retval;}
-                                EarlyExitException eee =
-                                    new EarlyExitException(10, input);
-                                throw eee;
-                        }
-                        cnt10++;
-                    } while (true);
-
-                    INDENT26=(Token)match(input,INDENT,FOLLOW_INDENT_in_template1545); if (state.failed) return retval; 
-                    if ( state.backtracking==0 ) stream_INDENT.add(INDENT26);
-
-                    pushFollow(FOLLOW_resourceDefinitions_in_template1547);
-                    resourceDefinitions27=resourceDefinitions();
-
-                    state._fsp--;
-                    if (state.failed) return retval;
-                    if ( state.backtracking==0 ) stream_resourceDefinitions.add(resourceDefinitions27.getTree());
-                    DEDENT28=(Token)match(input,DEDENT,FOLLOW_DEDENT_in_template1549); if (state.failed) return retval; 
-                    if ( state.backtracking==0 ) stream_DEDENT.add(DEDENT28);
-
-
-
-                    // AST REWRITE
-                    // elements: resourceDefinitions, resource
-                    // token labels: 
-                    // rule labels: retval
-                    // token list labels: 
-                    // rule list labels: 
-                    // wildcard labels: 
-                    if ( state.backtracking==0 ) {
-                    retval.tree = root_0;
-                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);
-
-                    root_0 = (CommonTree)adaptor.nil();
-                    // 256:7: -> ^( TEMPLATE_DEFINITION ( resource )+ resourceDefinitions )
-                    {
-                        // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:256:10: ^( TEMPLATE_DEFINITION ( resource )+ resourceDefinitions )
-                        {
-                        CommonTree root_1 = (CommonTree)adaptor.nil();
-                        root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(TEMPLATE_DEFINITION, "TEMPLATE_DEFINITION"), root_1);
-
-                        if ( !(stream_resource.hasNext()) ) {
-                            throw new RewriteEarlyExitException();
-                        }
-                        while ( stream_resource.hasNext() ) {
-                            adaptor.addChild(root_1, stream_resource.nextTree());
-
-                        }
-                        stream_resource.reset();
-                        adaptor.addChild(root_1, stream_resourceDefinitions.nextTree());
-
-                        adaptor.addChild(root_0, root_1);
-                        }
-
-                    }
-
-                    retval.tree = root_0;}
-                    }
-                    break;
-                case 2 :
-                    // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:257:7: ( resource )+ ( INDENT resourceDefinitions DEDENT )?
-                    {
-                    // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:257:7: ( resource )+
-                    int cnt11=0;
-                    loop11:
-                    do {
-                        int alt11=2;
-                        int LA11_0 = input.LA(1);
-
-                        if ( (LA11_0==ID||LA11_0==LPAREN||LA11_0==LBRACKET||LA11_0==LCURLY||LA11_0==INT||LA11_0==FLOAT||(LA11_0>=STRING && LA11_0<=URI)||(LA11_0>=75 && LA11_0<=76)||(LA11_0>=79 && LA11_0<=80)) ) {
-                            alt11=1;
-                        }
-
-
-                        switch (alt11) {
-                       case 1 :
-                           // src\\org\\simantics\\graph\\compiler\\internal\\parsing\\Graph.g:257:7: resource
-                           {
-                           pushFollow(FOLLOW_resource_in_template1574);
-                           resource29=resource();
-
-                           state._fsp--;
-                           if (state.failed) return retval;
-                           if ( state.backtracking==0 ) stream_resource.add(resource29.getTree());
-
-                           }
-                           break;
-
-                       default :
-                           if ( cnt11 >= 1 ) break loop11;
-                           if (state.backtracking>0) {state.failed=true; return retval;}
-           &nb