]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/parser/SCL.grammar
New SCL syntax <<effects>>
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / internal / parsing / parser / SCL.grammar
index b0911febe69bf3540f928cee928e9b84c5086edf..3b3d5f7db3375beb39967744ddd3a43de7a02a92 100644 (file)
@@ -133,12 +133,12 @@ lexp
     = faexp+                                                 # Apply, shift ID, shift LAMBDA, shift LAMBDA_MATCH,
                                                                shift LET, shift INTEGER, shift BEGIN_STRING,
                                                                shift IF, shift MATCH, shift DO,
-                                                               shift MDO, shift ENFORCE, shift BLANK,
+                                                               shift MDO, shift EDO, shift ENFORCE, shift BLANK,
                                                                shift FLOAT, shift LPAREN, shift LBRACKET,
                                                                shift ESCAPED_SYMBOL, shift CHAR, shift LBRACE,
                                                                shift WHEN, shift ATTACHED_HASH,
                                                                shift SELECT, shift SELECT_FIRST, shift SELECT_DISTINCT,
-                                                               shift TRANSFORMATION, shift EQ
+                                                               shift TRANSFORMATION, shift EQ, shift CHR_SELECT
     ; 
 
 faexp
@@ -158,9 +158,11 @@ aexp
     | IF exp THEN exp (ELSE exp)?                            # If, shift HASTYPE, shift ELSE
     | MATCH exp WITH
       LBRACE case (SEMICOLON case)* RBRACE                   # Match
-    | (DO | MDO) statements                                  # Do
+    | (DO | MDO | EDO) statements                            # Do
     | (SELECT | SELECT_FIRST | SELECT_DISTINCT) 
       exp WHERE queryBlock                                   # Select
+    | CHR_SELECT 
+      exp WHERE verboseChrQuery                              # CHRSelect
     | ENFORCE queryBlock                                     # Enforce
     //| WHEN queryBlock SEMICOLON exp                          # When
     | var                                                    # Var
@@ -200,16 +202,23 @@ statement
     | exp FOLLOWS queryBlock                                 # RuleStatement
     | chrQuery IMPLIES chrQuery                              # CHRStatement
     | WHEN verboseChrQuery THEN_AFTER_WHEN verboseChrQuery   # VerboseCHRStatement
-    | CONSTRAINT ID atype*                                   # ConstraintStatement
+    | CONSTRAINT constructor                                 # ConstraintStatement
     | INCLUDE ID aexp                                        # LocalInclude
     ;
 
+verboseChrQuery
+    = LBRACE chrQuery (SEMICOLON chrQuery)* RBRACE           # VerboseCHRConjunction
+    ;
+    
+
 chrQuery 
-    = listQualifier (COMMA listQualifier)*                   # CHRQuery
+    = chrQueryPart (COMMA chrQueryPart)*                     # CHRConjunction
     ;
 
-verboseChrQuery
-    = LBRACE listQualifier (SEMICOLON listQualifier)* RBRACE # VerboseCHRQuery
+chrQueryPart
+    = exp                                                    # CHRAtom
+    | exp EQUALS exp                                         # CHREquals
+    | exp BINDS exp                                          # CHRBinds
     ;
 
 listQualifier
@@ -235,6 +244,7 @@ guardedExpArrow
 field
     = ID EQUALS exp                                          # Field
     | ID                                                     # FieldShorthand
+    | DOTDOT                                                 # Wildcard
     ;
 
 /******************************************************************************
@@ -290,6 +300,7 @@ btype
 
 atype
     = ID                                                     # TypeVar
+    | DOUBLE_LESS ID (COMMA ID)* DOUBLE_GREATER              # PlainEffect
     | LPAREN (type (COMMA type)*)? RPAREN                    # TupleType
     | LBRACKET type RBRACKET                                 # ListType
     | LBRACKET RBRACKET                                      # ListTypeConstructor
@@ -311,6 +322,8 @@ symbol
     | MINUS                                                  # Minus
     | LESS                                                   # Less
     | GREATER                                                # Greater
+    | DOUBLE_LESS                                            # DoubleLess
+    | DOUBLE_GREATER                                         # DoubleGreater
     | SEPARATED_DOT                                          # Dot
     ;