Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Hiroshi Sakurai edited this page Jun 24, 2016 · 2 revisions
typ      ::= VAR
          |  typ ARROW typ
          |  typ LPAREN typ2 RPAREN
          |  typ LBRACK typs RBRACK
          |  LPAREN typs RPAREN
          |  LPAREN RPAREN

typ2     ::= typ
          |  typ typ2

typs     ::= typ
          |  typ COMMA typs

exp1     ::= exp
          |  exp1 SEMI

exps     ::= exp1
          |  exp1 exps %prec LIST

defrec   ::= VAR COLON typ
          |  VAR COLON typ SEMI

defrec1  ::= SEMI defrec1
          |  defrec1 SEMI
          |  defrec

defrecs  ::= /* empty */
          |  defrec1 defrecs %prec LIST

record   ::= VAR ASSIGN exp1
          |  VAR

records  ::= record
          |  record records  %prec LIST

variant  ::= VAR typ
          |  VAR

variant1 ::= variant
          |  variant SEMI

variants ::= variant1
          |  variant1 OR variants

exp      ::= INT
          |  FLOAT
          |  VAR
          |  STR
          |  CHR
          |  LPAREN RPAREN
          |  LPAREN exp1 RPAREN
          |  LBRACE fns RBRACE
          |  LBRACE exps RBRACE
          |  LBRACE COLON records RBRACE
          |  LBRACK RBRACK
          |  LBRACK exps RBRACK
          |  LBRACK OR RBRACK
          |  LBRACK OR exps RBRACK
          |  SEMI exp
          |  SUB exp
          |  FSUB exp
          |  DEC exp
          |  INC exp
          |  AMP exp
          |  MUL exp %prec NEW
          |  NOT exp
          |  NEW exp
          |  JSNEW exp %prec NEW
          |  exp XOR exp
          |  exp LOR exp
          |  exp LAMP exp
          |  exp OR exp
          |  exp HAT exp
          |  exp AMP exp
          |  exp EEQ exp
          |  exp ENE exp
          |  exp EQ exp
          |  exp NE exp
          |  exp LT exp
          |  exp GT exp
          |  exp LE exp
          |  exp GE exp
          |  exp ADD exp
          |  exp SUB exp
          |  exp MUL exp
          |  exp DIV exp
          |  exp MOD exp
          |  exp FADD exp
          |  exp FSUB exp
          |  exp FMUL exp
          |  exp FDIV exp
          |  exp FPOW exp
          |  exp SHL exp
          |  exp SHR exp
          |  exp AS exp
          |  exp DOT exp
          |  exp COMMA exp
          |  exp ADDLIST exp
          |  exp CATLIST exp
          |  exp MEMBER exp
          |  exp REFREF exp
          |  exp ARROWASSIGN exp
          |  exp FARROW exp
          |  exp RIMPLEMENT exp
          |  exp COLONASSIGN exp
          |  exp MATCH LBRACE fns RBRACE
          |  IF LPAREN exp RPAREN exp ELSE exp
          |  IF LPAREN exp RPAREN exp %prec LIST
          |  FOR LPAREN VAR ARROWASSIGN exp TO exp RPAREN exp
          |  FOR LPAREN VAR ARROWASSIGN exp DOWNTO exp RPAREN exp
          |  FOR LPAREN VAR ARROWASSIGN exp UNTIL exp RPAREN exp
          |  WHILE LPAREN exp RPAREN exp
          |  exp LBRACE fns RBRACE %prec CALL
          |  exp LBRACE exps RBRACE %prec CALL
          |  exp LBRACK RBRACK %prec CALL
          |  exp LBRACK exps RBRACK %prec CALL
          |  exp LPAREN exps RPAREN %prec CALL
          |  exp LPAREN RPAREN %prec CALL
          |  DEF VAR ASSIGN exp
          |      exp ASSIGN exp
          |  DEF exp ASSIGN exp
          |      exp REFASSIGN exp
          |      exp COLON typ ASSIGN exp
          |  DEF exp COLON typ ASSIGN exp
          |      exp COLON typ
          |  ADD exp %prec REF
          |  XOR exp %prec REF
          |  REF exp

ptn      ::= OR exps
          |  SEMI ptn

ptns     ::= ptn
          |  ptn ptns

fn       ::= ptns ARROW exps
          |  ptns WHEN exp ARROW exps

fn1      ::= fn
          |  SEMI fn1
          |  fn1 SEMI

fns      ::= fn1
          |  fn1 fns

stmt     ::= VAR MODULE LBRACE stmts RBRACE
          |  VAR MODULE ASSIGN exp
          |  VAR CLASS LBRACE stmts RBRACE
          |  VAR CLASS LPAREN defrecs RPAREN LBRACE stmts RBRACE
          |  exp
          |  OPEN
          |  VAR TYPE LBRACE defrecs RBRACE
          |  VAR TYPE OR variants
          |  VAR TYPE SEMI OR variants
          |  stmt1 AND stmt

stmt1    ::= stmt
          |  SEMI stmt1
          |  stmt1 SEMI

stmts    ::= /* empty */
          |  stmt1 stmts

prog     ::= stmts

Clone this wiki locally