;
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
*/
exp = bexp (HASTYPE type)? # LocalTypeAnnotation, shift HASTYPE, shift COLON
- | bexp COLON ID WITH? queryBlock? # EntityTypeAnnotation, shift LBRACE, shift WITH
;
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,
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
| 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
| 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
/******************************************************************************
* Auxiliary tokens
*/
-dummy = COMMENT EOL ;
\ No newline at end of file
+dummy = COMMENT EOL # Dummy
+ ;
\ No newline at end of file