]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/parser/SCL.grammar
(refs #7250) Support for record syntax for CHR relations
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / internal / parsing / parser / SCL.grammar
index 500cf3b20d5a148ed92ad0775ce0d0f487c54c7f..f7ea1b263617cee6eae8dbc4e5dda34139e10e45 100644 (file)
@@ -33,7 +33,8 @@ declarations
     ;
 
 declaration
-    = var (COMMA var)* HASTYPE type                          # TypeAnnotation
+    = MODULE LBRACE (field (COMMA field)*)? RBRACE           # ModuleHeader
+    | var (COMMA var)* HASTYPE type                          # TypeAnnotation
     | bexp rhs                                               # ValueDefinition
     | DATA ID+ (EQUALS constructor (BAR constructor)*)?      # DataDefinition
     | TYPE ID+ EQUALS type                                   # TypeDefinition
@@ -54,6 +55,7 @@ declaration
       WHERE ruleDeclarations                                 # RuleDefinition
     | MAPPING_RELATION ID atype*                             # MappingRelationDefinition
     | bexp FOLLOWS ruleDeclarations                          # RelationDefinition
+    | RULESET ID WHERE statements                            # RulesetDefinition
     ;
 
 import
@@ -119,7 +121,6 @@ ruleDeclaration
  */
  
 exp = bexp (HASTYPE type)?                                   # LocalTypeAnnotation, shift HASTYPE, shift COLON
-    | bexp COLON ID WITH? queryBlock?                        # EntityTypeAnnotation, shift LBRACE, shift WITH
     ;
 
 bexp 
@@ -129,7 +130,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 +153,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 +171,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 +198,18 @@ statement
     | exp rhs                                                # LetStatement
     | exp BINDS exp                                          # BindStatement
     | exp FOLLOWS queryBlock                                 # RuleStatement
+    | chrQuery IMPLIES chrQuery                              # CHRStatement
+    | WHEN verboseChrQuery THEN_AFTER_WHEN verboseChrQuery   # VerboseCHRStatement
+    | CONSTRAINT constructor                                 # ConstraintStatement
+    | INCLUDE ID aexp                                        # LocalInclude
+    ;
+
+chrQuery 
+    = listQualifier (COMMA listQualifier)*                   # CHRQuery
+    ;
+
+verboseChrQuery
+    = LBRACE listQualifier (SEMICOLON listQualifier)* RBRACE # VerboseCHRQuery
     ;
 
 listQualifier
@@ -310,4 +325,5 @@ symbolWithoutMinus
 /******************************************************************************
  * Auxiliary tokens
  */
-dummy = COMMENT EOL ;
\ No newline at end of file
+dummy = COMMENT EOL                                          # Dummy 
+      ;
\ No newline at end of file