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=3b3d5f7db3375beb39967744ddd3a43de7a02a92;hp=0312cf6f8819658e0a88b41a88e86565e63acc71;hb=3d043320cdee8dda92758f4ea1c324a82c7d9094;hpb=3448b94a8e90047c88eb62a0542c1596acb701b8 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 0312cf6f8..3b3d5f7db 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 @@ -132,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 @@ -157,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 @@ -199,15 +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 @@ -233,6 +244,7 @@ guardedExpArrow field = ID EQUALS exp # Field | ID # FieldShorthand + | DOTDOT # Wildcard ; /****************************************************************************** @@ -288,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 @@ -309,6 +322,8 @@ symbol | MINUS # Minus | LESS # Less | GREATER # Greater + | DOUBLE_LESS # DoubleLess + | DOUBLE_GREATER # DoubleGreater | SEPARATED_DOT # Dot ; @@ -323,4 +338,5 @@ symbolWithoutMinus /****************************************************************************** * Auxiliary tokens */ -dummy = COMMENT EOL ; \ No newline at end of file +dummy = COMMENT EOL # Dummy + ; \ No newline at end of file