packages feed

hoq-0.1.0.0: src/Syntax/Grammar.cf

entrypoints Defs, Expr;

comment "--";
comment "{-" "-}";

layout "with";
layout toplevel;

Defs.         Defs  ::= [Def];
DefType.      Def   ::= PIdent ":" Expr;
DefFun.       Def   ::= FunCase;
DefFunEmpty.  Def   ::= Pattern;
DefData.      Def   ::= "data" PIdent [DataTele] "=" [Con];
DefDataWith.  Def   ::= "data" PIdent [DataTele] "=" [Con] "with" "{" [FunCase] "}";
DefDataEmpty. Def   ::= "data" PIdent [DataTele];
separator     Def   ";";

FunCase.   FunCase  ::= Pattern "=" Expr;
separator  FunCase  ";";

Pattern.   Pattern  ::= PIdent [ParPat];
ParVar.    ParPat   ::= Arg;
ParLeft.   ParPat   ::= PLeft;
ParRight.  ParPat   ::= PRight;
ParEmpty.  ParPat   ::= PPar ")";
ParPat.    ParPat   ::= PPar Pattern ")";
terminator ParPat   "";

Con.       Con      ::= PIdent [ConTele];
separator  nonempty Con "|";

VarTele.   ConTele  ::= PPar Expr ":" Expr ")";
TypeTele.  ConTele  ::= Expr5;
terminator ConTele  "";

DataTele.  DataTele ::= PPar Expr ":" Expr ")";
terminator DataTele "";

PiTele.    PiTele   ::= PPar Expr ":" Expr ")";
terminator nonempty PiTele "";

Lam.       Expr     ::= PLam [Arg] "->" Expr;
Arr.       Expr1    ::= Expr2 "->" Expr1;
Pi.        Expr1    ::= [PiTele] "->" Expr1;
PathImp.   Expr2    ::= Expr3 "=" Expr3;
At.        Expr3    ::= Expr3 "@" Expr4;
App.       Expr4    ::= Expr4 Expr5;
Var.       Expr5    ::= Arg;
Universe.  Expr5    ::= U;
Interval.  Expr5    ::= I;
ELeft.     Expr5    ::= PLeft;
ERight.    Expr5    ::= PRight;
Path.      Expr5    ::= PPath;
PathCon.   Expr5    ::= Ppath;
Coe.       Expr5    ::= PCoe;
Iso.       Expr5    ::= PIso;
Squeeze.   Expr5    ::= PSqueeze;
_.         Expr     ::= Expr1;
_.         Expr1    ::= Expr2;
_.         Expr2    ::= Expr3;
_.         Expr3    ::= Expr4;
_.         Expr4    ::= Expr5;
Paren.     Expr5    ::= PPar Expr ")";

Arg.       Arg      ::= PIdent;
NoArg.     Arg      ::= Pus;
separator  nonempty Arg "";

position token U ('T' 'y' 'p' 'e' digit*);
position token I 'I';
position token PLeft 'l' 'e' 'f' 't';
position token PRight 'r' 'i' 'g' 'h' 't';
position token PPath 'P' 'a' 't' 'h';
position token Ppath 'p' 'a' 't' 'h';
position token PCoe 'c' 'o' 'e';
position token PIso 'i' 's' 'o';
position token PSqueeze 's' 'q' 'u' 'e' 'e' 'z' 'e';
position token PLam '\\';
position token PPar '(';
position token Pus '_';
position token PIdent (letter(letter|digit|'\''|'_'|'-')*);