From 70a87b8d75d649b15c82171da18bdf8eaa140648 Mon Sep 17 00:00:00 2001 From: "Michael D. Lowis" Date: Mon, 1 Apr 2019 23:23:23 -0400 Subject: [PATCH] added beginnings of pratt parser --- src/parser.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/src/parser.c b/src/parser.c index 0e9e50d..034ea29 100644 --- a/src/parser.c +++ b/src/parser.c @@ -28,6 +28,51 @@ static int Indent = 0; #define parse_exit() #endif +typedef struct { + int precedence; + int token; + AST* (*parse)(Parser* p, AST* expr); +} OpDef_T; + +AST* if_expr(Parser* p, AST* expr); +AST* block_expr(Parser* p, AST* expr); +AST* paren_expr(Parser* p, AST* expr); +AST* binop_expr(Parser* p, AST* expr); +AST* fncall_expr(Parser* p, AST* expr); + +OpDef_T PrefixOps[] = { + { 0, T_IF, if_expr }, /* If expression */ + { 0, '{', block_expr }, /* Expression block */ + { 0, '(', paren_expr }, /* Parenthese grouping */ +}; + +OpDef_T InfixOps[] = { + { 0, '.', binop_expr }, /* If expression */ + { 0, '(', fncall_expr }, /* Parenthese grouping */ +}; + +/* Operator Parsing Routines + *****************************************************************************/ +AST* if_expr(Parser* p, AST* expr) { + return NULL; +} + +AST* block_expr(Parser* p, AST* expr) { + return NULL; +} + +AST* paren_expr(Parser* p, AST* expr) { + return NULL; +} + +AST* binop_expr(Parser* p, AST* expr) { + return NULL; +} + +AST* fncall_expr(Parser* p, AST* expr) { + return NULL; +} + /* Parsing Routines *****************************************************************************/ static Tok* peek(Parser* p) { -- 2.52.0