Reorganized basically everything, making way for the compiler
This commit is contained in:
36
parser/parse.mly
Normal file
36
parser/parse.mly
Normal file
@@ -0,0 +1,36 @@
|
||||
%{
|
||||
open Ast
|
||||
%}
|
||||
|
||||
%token <int> INT
|
||||
%token <float> DOUBLE
|
||||
%token <string> SYM
|
||||
%token <string> STR
|
||||
%token LPAREN
|
||||
%token RPAREN
|
||||
%token QUOTE
|
||||
%token DOT
|
||||
%token EOF
|
||||
|
||||
%start <lisp_ast option> prog
|
||||
%%
|
||||
|
||||
prog:
|
||||
| EOF { None }
|
||||
| e = expr { Some e }
|
||||
;
|
||||
|
||||
expr:
|
||||
| i = INT { LInt i }
|
||||
| d = DOUBLE { LDouble d}
|
||||
| s = SYM { LSymbol s }
|
||||
| s = STR { LString (String.uppercase_ascii s) }
|
||||
| LPAREN; l = lisp_list_rest { l }
|
||||
| QUOTE; e = expr { LCons (LSymbol "quote", LCons (e, LNil)) }
|
||||
;
|
||||
|
||||
lisp_list_rest:
|
||||
| RPAREN { LNil }
|
||||
| DOT; e = expr; RPAREN { e }
|
||||
| e = expr; lr = lisp_list_rest { LCons (e, lr) }
|
||||
;
|
||||
Reference in New Issue
Block a user