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/parser.y | |
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/parser.y')
-rw-r--r-- | src/parser.y | 22 |
1 files changed, 9 insertions, 13 deletions
diff --git a/src/parser.y b/src/parser.y index d90aaa7..b9c3a06 100644 --- a/src/parser.y +++ b/src/parser.y @@ -1,7 +1,7 @@ %define api.prefix {ccmmc_parser_} %define api.pure full %lex-param {yyscan_t scanner} -%parse-param {yyscan_t scanner} +%parse-param {yyscan_t scanner} {CcmmcState *state} %{ #ifdef HAVE_CONFIG_H # include "config.h" @@ -10,15 +10,11 @@ typedef void* yyscan_t; #include "ast.h" +#include "state.h" #include <stdio.h> #include <stdlib.h> #include <string.h> - -AST_NODE *prog; - -extern int line_number; -extern int g_anyErrorOccur; %} %union{ @@ -28,9 +24,9 @@ extern int g_anyErrorOccur; }; %{ -extern char *ccmmc_parser_get_text(yyscan_t scanner); extern int ccmmc_parser_lex(CCMMC_PARSER_STYPE *yylval, yyscan_t scanner); -static void ccmmc_parser_error(yyscan_t scanner, const char *mesg); +extern char *ccmmc_parser_get_text(yyscan_t scanner); +static void ccmmc_parser_error(yyscan_t scanner, CcmmcState *state, const char *mesg); %} %token <lexeme>ID @@ -92,11 +88,11 @@ program : global_decl_list { $$=Allocate(PROGRAM_NODE); makeChild($$,$1); - prog=$$; + state->ast=$$; } | { - $$=Allocate(PROGRAM_NODE); prog=$$; + $$=Allocate(PROGRAM_NODE); state->ast=$$; } ; @@ -694,10 +690,10 @@ dim_list : dim_list DL_LBRACK expr DL_RBRACK %% -static void ccmmc_parser_error(yyscan_t scanner, const char *mesg) +static void ccmmc_parser_error(yyscan_t scanner, CcmmcState *state, const char *mesg) { - fprintf(stderr, "Error found in Line \t%d\tnext token: \t%s\n", - line_number, ccmmc_parser_get_text(scanner)); + fprintf(stderr, "Error found in Line \t%zu\tnext token: \t%s\n", + state->line_number, ccmmc_parser_get_text(scanner)); exit(1); } |