diff options
Diffstat (limited to 'grammar.txt')
| -rw-r--r-- | grammar.txt | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/grammar.txt b/grammar.txt new file mode 100644 index 0000000..84b8123 --- /dev/null +++ b/grammar.txt @@ -0,0 +1,29 @@ +let x = 2; + y = 3; in + (x y) + +let x: (Int) = 2; + y: (Int) = 3; + f: ((Int -> Int) -> Int) = [a, b] { ((plus a) b) }; in + ((f x) y) +--- + + +LetStatement: "let" [Assignment ";"]+ "in" Body +Binding: Ident (":" TypeDecl)? +Assignment: Binding "=" Computation +Computation: Identifier | Application | Abstraction +Application: "(" Computation Computation ")" +Abstraction: "[" UncurriedArguments "]" "{" Computation "}" +UncurriedArguments: Binding ("," Binding)+ + +LetStatement: "let" Ident (":" TypeDecl)? "=" Computation in + +BaseType: Identifier +Arrow: TypeDecl "->" TypeDecl +TypeDecl: "(" BaseType | Arrow ")" + +Binding: Identifier (":" TypeDecl)? +UncurriedArguments: Identifier +Abstraction: UncurriedArguments "{" Binding "=>" Computation "}" + |
