diff options
author | Malte Voos <git@mal.tc> | 2024-06-23 01:36:48 +0200 |
---|---|---|
committer | Malte Voos <git@mal.tc> | 2024-06-23 01:36:48 +0200 |
commit | 8d40541003736d5319ec981278338e8c8c66daf6 (patch) | |
tree | e595d0055af42b6a9d84e504befbe114a8cef5e2 /lib/Parser.mly | |
parent | 36762e83887b6f917df46c5e40a11d53b697209d (diff) | |
download | toytt-8d40541003736d5319ec981278338e8c8c66daf6.tar.gz toytt-8d40541003736d5319ec981278338e8c8c66daf6.zip |
keep track of bound names everywhere to be able to output names instead of de bruijn indices
Diffstat (limited to 'lib/Parser.mly')
-rw-r--r-- | lib/Parser.mly | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/lib/Parser.mly b/lib/Parser.mly index fc82d1a..8588b56 100644 --- a/lib/Parser.mly +++ b/lib/Parser.mly @@ -5,7 +5,7 @@ open Ast %token <string> IDENT %token LPR RPR %token LBR RBR -%token ARROW ASTERISK BACKSLASH COLON DOUBLE_COLON COMMA DOT FATARROW +%token ARROW ASTERISK BACKSLASH COLON DOUBLE_COLON COMMA DOT FATARROW UNDERSCORE %token BOOL TRUE FALSE BOOL_ELIM AT %token FST SND %token TYPE @@ -28,7 +28,13 @@ raw_ident: id = separated_nonempty_list(DOT, IDENT) { id } %inline ident: id = locate(raw_ident) { id } -arg: LPR; name = ident; COLON; tp = expr; RPR +raw_local_name: + | name = IDENT { Some name } + | UNDERSCORE { None } + +local_name: name = locate(raw_local_name) { name } + +arg: LPR; name = local_name; COLON; tp = expr; RPR { (name, tp) } raw_expr: @@ -41,7 +47,7 @@ raw_expr: | a = arg; ARROW; b = expr { Pi (a, b) } - | BACKSLASH; a = ident; ARROW; b = expr + | BACKSLASH; a = local_name; ARROW; b = expr { Lam (a, b) } | a = expr; b = expr %prec APP { App (a, b) } @@ -64,7 +70,7 @@ raw_expr: { True } | FALSE { False } - | BOOL_ELIM; scrut = expr; AT; motive_var = ident; ARROW; motive_body = expr; + | BOOL_ELIM; scrut = expr; AT; motive_var = local_name; ARROW; motive_body = expr; LBR; TRUE; FATARROW; true_case = expr; COMMA; FALSE; FATARROW; false_case = expr; RBR { BoolElim { motive_var; motive_body; true_case; false_case; scrut } } |