X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.scl.compiler%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fcompiler%2Finternal%2Fparsing%2Fparser%2FSCL.grammar;h=0312cf6f8819658e0a88b41a88e86565e63acc71;hp=500cf3b20d5a148ed92ad0775ce0d0f487c54c7f;hb=a8758de5bc19e5adb3f618d3038743a164f09912;hpb=12d9af17384d960b75d58c3935d2b7b46d93e87b diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/parser/SCL.grammar b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/parser/SCL.grammar index 500cf3b20..0312cf6f8 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/parser/SCL.grammar +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/parser/SCL.grammar @@ -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