diff options
author | Ting-Wei Lan <lantw44@gmail.com> | 2015-12-02 00:18:08 +0800 |
---|---|---|
committer | Ting-Wei Lan <lantw44@gmail.com> | 2015-12-02 00:18:08 +0800 |
commit | f2a04b9f3810d1c19f8359bf3f1dbbe38bf07097 (patch) | |
tree | 240f3b2b7dc52ba28da0829c977d4643282157b2 /src/lexer.l | |
parent | 15d78a2151c63a45adfad9dc954f79eba9207dab (diff) | |
download | compiler2015-f2a04b9f3810d1c19f8359bf3f1dbbe38bf07097.tar compiler2015-f2a04b9f3810d1c19f8359bf3f1dbbe38bf07097.tar.gz compiler2015-f2a04b9f3810d1c19f8359bf3f1dbbe38bf07097.tar.bz2 compiler2015-f2a04b9f3810d1c19f8359bf3f1dbbe38bf07097.tar.lz compiler2015-f2a04b9f3810d1c19f8359bf3f1dbbe38bf07097.tar.xz compiler2015-f2a04b9f3810d1c19f8359bf3f1dbbe38bf07097.tar.zst compiler2015-f2a04b9f3810d1c19f8359bf3f1dbbe38bf07097.zip |
Drop line_number and prog global variables
All important states should be stored in the local struct allocated in
main function.
Diffstat (limited to 'src/lexer.l')
-rw-r--r-- | src/lexer.l | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/src/lexer.l b/src/lexer.l index 1c7d940..92aa645 100644 --- a/src/lexer.l +++ b/src/lexer.l @@ -8,15 +8,15 @@ #include "ast.h" #include "common.h" -#include "libparser_a-parser.h" +#include "state.h" #include "symbol-table.h" +#include "libparser_a-parser.h" + #include <assert.h> #include <stdlib.h> #include <string.h> -int line_number = 1; - #define YYSTYPE CCMMC_PARSER_STYPE %} @@ -80,10 +80,11 @@ ERROR . if (strcmp(yytext, reserved[i]) == 0) return reserved_token[i]; if (i == SIZEOF_ARRAY(reserved)) { - CcmmcSymbol *ptr; - ptr = ccmmc_symbol_table_lookup(yytext); + CcmmcSymbol *ptr = ccmmc_symbol_table_lookup(yytext); + CcmmcState *state = yyextra; if (ptr == NULL) - ccmmc_symbol_table_insert_id(yytext, line_number); + ccmmc_symbol_table_insert_id( + yytext, state->line_number); else ptr->counter++; } @@ -120,9 +121,10 @@ ERROR . return CONST; } {COMMENT} { + CcmmcState *state = yyextra; for (size_t i = 0; yytext[i] != '\0'; i++) if (yytext[i] == '\n') - line_number++; + state->line_number++; } {OP_ASSIGN} return OP_ASSIGN; {OP_OR} return OP_OR; @@ -139,8 +141,10 @@ ERROR . {OP_NE} return OP_NE; {OP_EQ} return OP_EQ; -{NEWLINE} line_number++; - +{NEWLINE} { + CcmmcState *state = yyextra; + state->line_number++; + } {DL_LPAREN} return DL_LPAREN; {DL_RPAREN} return DL_RPAREN; {DL_LBRACK} return DL_LBRACK; @@ -152,8 +156,9 @@ ERROR . {DL_DOT} return DL_DOT; {ERROR} { - fprintf(stderr, "%d: error: undefined character `%s'\n", - line_number, yytext); + CcmmcState *state = yyextra; + fprintf(stderr, "%zu: error: undefined character `%s'\n", + state->line_number, yytext); exit(1); } |