From: Michael D. Lowis Date: Tue, 2 Apr 2019 03:23:23 +0000 (-0400) Subject: added beginnings of pratt parser X-Git-Url: https://git.mdlowis.com/?a=commitdiff_plain;h=70a87b8d75d649b15c82171da18bdf8eaa140648;p=proto%2Fsclpl.git added beginnings of pratt parser --- 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) {