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=f7ea1b263617cee6eae8dbc4e5dda34139e10e45;hp=500cf3b20d5a148ed92ad0775ce0d0f487c54c7f;hb=6d233d1b05176e40f634766537082d2a2ec65fd0;hpb=6ceab2d9498554c1b825ab6ae76bef520bb05789 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..f7ea1b263 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 @@ -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