]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/parser/SCL.grammar
Merged changes from feature/scl to master.
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / internal / parsing / parser / SCL.grammar
index 500cf3b20d5a148ed92ad0775ce0d0f487c54c7f..0312cf6f8819658e0a88b41a88e86565e63acc71 100644 (file)
@@ -129,7 +129,7 @@ bexp
     ;
 
 lexp 
-    = faexp+                                                 # Apply, shift ID, shift LAMBDA,
+    = 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,
@@ -152,15 +152,16 @@ accessor
 
 aexp 
     = LAMBDA aexp+ ARROW exp                                 # Lambda, shift HASTYPE
+    | LAMBDA_MATCH LBRACE case (SEMICOLON case)* RBRACE      # LambdaMatch, shift HASTYPE
     | LET statements IN exp                                  # Let, shift HASTYPE
-    | IF exp THEN exp ELSE exp                               # If, shift HASTYPE
+    | IF exp THEN exp (ELSE exp)?                            # If, shift HASTYPE, shift ELSE
     | MATCH exp WITH
       LBRACE case (SEMICOLON case)* RBRACE                   # Match
     | (DO | MDO) statements                                  # Do
     | (SELECT | SELECT_FIRST | SELECT_DISTINCT) 
       exp WHERE queryBlock                                   # Select
     | ENFORCE queryBlock                                     # Enforce
-    | WHEN queryBlock SEMICOLON exp                          # When
+    //| WHEN queryBlock SEMICOLON exp                          # When
     | var                                                    # Var
     | ATTACHED_HASH ID                                       # HashedId
     | BLANK                                                  # Blank
@@ -169,6 +170,7 @@ aexp
     | stringLiteral                                          # String
     | CHAR                                                   # Char
     | LPAREN (exp (COMMA exp)*)? RPAREN                      # Tuple
+    | LPAREN exp ARROW exp RPAREN                            # ViewPattern    
     | LPAREN symbolWithoutMinus lexp RPAREN                  # RightSection
     | LPAREN lexp symbol RPAREN                              # LeftSection
     | LBRACKET (exp (COMMA exp)*)? RBRACKET                  # ListLiteral
@@ -195,6 +197,17 @@ statement
     | exp rhs                                                # LetStatement
     | exp BINDS exp                                          # BindStatement
     | exp FOLLOWS queryBlock                                 # RuleStatement
+    | chrQuery IMPLIES chrQuery                              # CHRStatement
+    | WHEN verboseChrQuery THEN_AFTER_WHEN verboseChrQuery   # VerboseCHRStatement
+    | CONSTRAINT ID atype*                                   # ConstraintStatement
+    ;
+
+chrQuery 
+    = listQualifier (COMMA listQualifier)*                   # CHRQuery
+    ;
+
+verboseChrQuery
+    = LBRACE listQualifier (SEMICOLON listQualifier)* RBRACE # VerboseCHRQuery
     ;
 
 listQualifier