mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-10 21:39:32 -06:00
110 lines
2.7 KiB
CFEngine3
110 lines
2.7 KiB
CFEngine3
entrypoints Module, Exp ;
|
|
|
|
layout "let", "where", "of" ;
|
|
layout stop "in" ;
|
|
layout toplevel ;
|
|
|
|
comment "--" ;
|
|
comment "{-" "-}" ;
|
|
|
|
Module. Module ::= [Import] [Decl] ;
|
|
|
|
Import. Import ::= "import" Ident ;
|
|
separator Import ";" ;
|
|
|
|
DataDecl. Decl ::= "data" Ident ":" Exp "where" "{" [ConsDecl] "}" ;
|
|
TypeDecl. Decl ::= Ident ":" Exp ;
|
|
ValueDecl. Decl ::= Ident [Pattern] "=" Exp ;
|
|
DeriveDecl. Decl ::= "derive" Ident Ident ;
|
|
separator Decl ";" ;
|
|
|
|
ConsDecl. ConsDecl ::= Ident ":" Exp ;
|
|
separator ConsDecl ";" ;
|
|
|
|
-- Hack: constructor applied to at least one pattern
|
|
-- this is to separate it from variable patterns
|
|
PConsTop. Pattern ::= Ident Pattern1 [Pattern] ;
|
|
_. Pattern ::= Pattern1 ;
|
|
-- Constructor pattern with parantheses
|
|
PCons. Pattern1 ::= "(" Ident [Pattern] ")" ;
|
|
-- Record patterns
|
|
PRec. Pattern1 ::= "{" [FieldPattern] "}";
|
|
-- The pattern matching the Type constant
|
|
PType. Pattern1 ::= "Type" ;
|
|
-- String literal patterns
|
|
PStr. Pattern1 ::= String ;
|
|
-- Integer literal patterns
|
|
PInt. Pattern1 ::= Integer ;
|
|
-- Variable patterns
|
|
PVar. Pattern1 ::= Ident ;
|
|
-- Wild card patterns
|
|
PWild. Pattern1 ::= "_" ;
|
|
|
|
[]. [Pattern] ::= ;
|
|
(:). [Pattern] ::= Pattern1 [Pattern] ;
|
|
|
|
FieldPattern. FieldPattern ::= Ident "=" Pattern ;
|
|
separator FieldPattern ";" ;
|
|
|
|
ELet. Exp ::= "let" "{" [LetDef] "}" "in" Exp ;
|
|
LetDef. LetDef ::= Ident ":" Exp "=" Exp ;
|
|
separator LetDef ";" ;
|
|
|
|
ECase. Exp ::= "case" Exp "of" "{" [Case] "}" ;
|
|
Case. Case ::= Pattern "->" Exp ;
|
|
separator Case ";" ;
|
|
|
|
EIf. Exp ::= "if" Exp "then" Exp "else" Exp ;
|
|
|
|
EAbs. Exp2 ::= "\\" VarOrWild "->" Exp ;
|
|
EPi. Exp2 ::= "(" VarOrWild ":" Exp ")" "->" Exp ;
|
|
EPiNoVar. Exp2 ::= Exp3 "->" Exp ;
|
|
VVar. VarOrWild ::= Ident ;
|
|
VWild. VarOrWild ::= "_" ;
|
|
|
|
EOr. Exp3 ::= Exp4 "||" Exp3 ;
|
|
EAnd. Exp4 ::= Exp5 "&&" Exp4 ;
|
|
|
|
EEq. Exp5 ::= Exp6 "==" Exp6 ;
|
|
ENe. Exp5 ::= Exp6 "/=" Exp6 ;
|
|
ELt. Exp5 ::= Exp6 "<" Exp6 ;
|
|
ELe. Exp5 ::= Exp6 "<=" Exp6 ;
|
|
EGt. Exp5 ::= Exp6 ">" Exp6 ;
|
|
EGe. Exp5 ::= Exp6 ">=" Exp6 ;
|
|
|
|
EAdd. Exp6 ::= Exp6 "+" Exp7 ;
|
|
ESub. Exp6 ::= Exp6 "-" Exp7 ;
|
|
|
|
EMul. Exp7 ::= Exp7 "*" Exp8 ;
|
|
EDiv. Exp7 ::= Exp7 "/" Exp8 ;
|
|
EMod. Exp7 ::= Exp7 "%" Exp8 ;
|
|
|
|
ENeg. Exp8 ::= "-" Exp8 ;
|
|
|
|
EApp. Exp9 ::= Exp9 Exp10 ;
|
|
|
|
EProj. Exp10 ::= Exp10 "." Ident ;
|
|
|
|
EEmptyRec. Exp11 ::= "{" "}" ;
|
|
|
|
ERecType. Exp11 ::= "{" [FieldType] "}" ;
|
|
FieldType. FieldType ::= Ident ":" Exp ;
|
|
separator nonempty FieldType ";" ;
|
|
|
|
ERec. Exp11 ::= "{" [FieldValue] "}" ;
|
|
FieldValue.FieldValue ::= Ident "=" Exp ;
|
|
separator nonempty FieldValue ";" ;
|
|
|
|
EVar. Exp11 ::= Ident ;
|
|
EType. Exp11 ::= "Type" ;
|
|
EStr. Exp11 ::= String ;
|
|
EInt. Exp11 ::= Integer ;
|
|
|
|
coercions Exp 11 ;
|
|
|
|
|
|
|
|
|
|
|
|
|