From 57dcf9e62d6af90eae2c24cc3f070739178bade3 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Sat, 21 Apr 2018 23:33:58 -0400 Subject: [PATCH] create token nodes in lexer --- src/parser/parser.h | 4 ++++ src/parser/parser.l | 11 ++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/parser/parser.h b/src/parser/parser.h index 3ac5ff8..4caebcb 100644 --- a/src/parser/parser.h +++ b/src/parser/parser.h @@ -1,6 +1,10 @@ #ifndef PARSER_H #define PARSER_H +#include "Node.h" + +#define YYSTYPE Node * + void parse(const char * filename); #endif diff --git a/src/parser/parser.l b/src/parser/parser.l index 51e2653..a49fb2a 100644 --- a/src/parser/parser.l +++ b/src/parser/parser.l @@ -7,13 +7,22 @@ #include "parser.tab.h" #include "String.h" #include +#include "Node.h" -#define YY_USER_ACTION yylloc->first_column += yyleng; +#define YY_USER_ACTION \ +do { \ + yylloc->first_column += yyleng; \ + *yylval = Node_new(NODE_TYPE_TOKEN); \ + (*yylval)->token.fname = current_file; \ + (*yylval)->token.line = current_line; \ + (*yylval)->token.text = String_new(yytext); \ +} while(0); static String * build_string = NULL; static size_t current_line = 1u; static String * current_file = NULL; void handle_loc(const char * input); +void user_action(void); %}