From b11703af531f32fd707164096a226dd7ac2d7157 Mon Sep 17 00:00:00 2001 From: zhaochaoyi <1251887477@qq.com> Date: Tue, 1 Mar 2022 10:12:57 +0800 Subject: [PATCH] guiyue before Tue Mar 1 10:12:57 AM CST 2022 --- .gitignore | 6 +- Code/lex.yy.c | 88 +++++++++------------- Code/lexical.l | 16 ---- Code/main.c | 6 +- Code/parser | Bin 36296 -> 36328 bytes Code/syntax.tab.c | 188 +++++++++++++++++++++++++++++++++++++++------- Code/syntax.tab.h | 16 +++- Code/syntax.y | 15 ++++ 8 files changed, 235 insertions(+), 100 deletions(-) diff --git a/.gitignore b/.gitignore index 4797760..e763a90 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ -.idea +.idea/ Appendix*.pdf -Project*.pdf \ No newline at end of file +Project*.pdf +.vscode/ +*/*.o \ No newline at end of file diff --git a/Code/lex.yy.c b/Code/lex.yy.c index 9cea245..a61d60b 100644 --- a/Code/lex.yy.c +++ b/Code/lex.yy.c @@ -528,24 +528,8 @@ char *yytext; #include <stdio.h> #include "debug.h" #include "syntax.tab.h" - - struct YYLTYPE { - int first_line; - int first_column; - int last_line; - int last_column; - }; - - struct YYLTYPE yylloc = {0}; - - int yycolumn = 1; - #define YY_USER_ACTION \ - yylloc.first_line = yylloc.last_line = yylineno; \ - yylloc.first_column = yycolumn; \ - yylloc.last_column = yycolumn + yyleng - 1; \ - yycolumn += yyleng; -#line 547 "./lex.yy.c" -#line 548 "./lex.yy.c" +#line 531 "./lex.yy.c" +#line 532 "./lex.yy.c" #define INITIAL 0 @@ -762,9 +746,9 @@ YY_DECL } { -#line 51 "./lexical.l" +#line 35 "./lexical.l" -#line 767 "./lex.yy.c" +#line 751 "./lex.yy.c" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -823,157 +807,157 @@ do_action: /* This label is used only to access EOF actions. */ case 1: YY_RULE_SETUP -#line 52 "./lexical.l" +#line 36 "./lexical.l" { ELEMENT("STRUCT"); return STRUCT; } YY_BREAK case 2: YY_RULE_SETUP -#line 53 "./lexical.l" +#line 37 "./lexical.l" { ELEMENT("RETURN"); return RETURN; } YY_BREAK case 3: YY_RULE_SETUP -#line 54 "./lexical.l" +#line 38 "./lexical.l" { ELEMENT("IF"); return IF; } YY_BREAK case 4: YY_RULE_SETUP -#line 55 "./lexical.l" +#line 39 "./lexical.l" { ELEMENT("ELSE"); return ELSE; } YY_BREAK case 5: YY_RULE_SETUP -#line 56 "./lexical.l" +#line 40 "./lexical.l" { ELEMENT("WHILE"); return WHILE; } YY_BREAK case 6: YY_RULE_SETUP -#line 57 "./lexical.l" +#line 41 "./lexical.l" { ELEMENT("TYPE"); return TYPE; } YY_BREAK case 7: /* rule 7 can match eol */ YY_RULE_SETUP -#line 58 "./lexical.l" +#line 42 "./lexical.l" { unput(yytext[yyleng-1]); yycolumn--,yytext[yyleng-1] = 0; Log("TYPE = INT:( %s )",yytext); return INT;} YY_BREAK case 8: YY_RULE_SETUP -#line 59 "./lexical.l" +#line 43 "./lexical.l" { Log("TYPE = FLOAT: %s",yytext); return FLOAT;} YY_BREAK case 9: YY_RULE_SETUP -#line 60 "./lexical.l" +#line 44 "./lexical.l" { ELEMENT("ID"); return ID; } YY_BREAK case 10: YY_RULE_SETUP -#line 61 "./lexical.l" +#line 45 "./lexical.l" { ELEMENT("SEMI"); return SEMI;} YY_BREAK case 11: YY_RULE_SETUP -#line 62 "./lexical.l" +#line 46 "./lexical.l" { ELEMENT("COMMA"); return COMMA;} YY_BREAK case 12: YY_RULE_SETUP -#line 63 "./lexical.l" +#line 47 "./lexical.l" { ELEMENT("ASSIGNOP"); return ASSIGNOP;} YY_BREAK case 13: YY_RULE_SETUP -#line 64 "./lexical.l" +#line 48 "./lexical.l" { ELEMENT("PLUS"); return PLUS;} YY_BREAK case 14: YY_RULE_SETUP -#line 65 "./lexical.l" +#line 49 "./lexical.l" { ELEMENT("MINUS"); return MINUS;} YY_BREAK case 15: YY_RULE_SETUP -#line 66 "./lexical.l" +#line 50 "./lexical.l" { ELEMENT("STAR"); return STAR;} YY_BREAK case 16: YY_RULE_SETUP -#line 67 "./lexical.l" +#line 51 "./lexical.l" { ELEMENT("DIV"); return DIV;} YY_BREAK case 17: YY_RULE_SETUP -#line 68 "./lexical.l" +#line 52 "./lexical.l" { ELEMENT("AND"); return AND;} YY_BREAK case 18: YY_RULE_SETUP -#line 69 "./lexical.l" +#line 53 "./lexical.l" { ELEMENT("OR"); return OR;} YY_BREAK case 19: YY_RULE_SETUP -#line 70 "./lexical.l" +#line 54 "./lexical.l" { ELEMENT("DOT"); return DOT;} YY_BREAK case 20: YY_RULE_SETUP -#line 71 "./lexical.l" +#line 55 "./lexical.l" { ELEMENT("NOT"); return NOT;} YY_BREAK case 21: YY_RULE_SETUP -#line 72 "./lexical.l" +#line 56 "./lexical.l" { ELEMENT("LP"); return LP;} YY_BREAK case 22: YY_RULE_SETUP -#line 73 "./lexical.l" +#line 57 "./lexical.l" { ELEMENT("RP"); return RP;} YY_BREAK case 23: YY_RULE_SETUP -#line 74 "./lexical.l" +#line 58 "./lexical.l" { ELEMENT("LB"); return LB;} YY_BREAK case 24: YY_RULE_SETUP -#line 75 "./lexical.l" +#line 59 "./lexical.l" { ELEMENT("RB"); return RB;} YY_BREAK case 25: YY_RULE_SETUP -#line 76 "./lexical.l" +#line 60 "./lexical.l" { ELEMENT("LC"); return LC;} YY_BREAK case 26: YY_RULE_SETUP -#line 77 "./lexical.l" +#line 61 "./lexical.l" { ELEMENT("RC"); return RC;} YY_BREAK case 27: YY_RULE_SETUP -#line 78 "./lexical.l" +#line 62 "./lexical.l" { ;} YY_BREAK case 28: /* rule 28 can match eol */ YY_RULE_SETUP -#line 79 "./lexical.l" +#line 63 "./lexical.l" { yycolumn += 1; } YY_BREAK case 29: YY_RULE_SETUP -#line 80 "./lexical.l" +#line 64 "./lexical.l" { printf("Error type A at Line %d: Mysterious characters \'%s\'\n", yylineno, yytext); } YY_BREAK case 30: YY_RULE_SETUP -#line 82 "./lexical.l" +#line 66 "./lexical.l" ECHO; YY_BREAK -#line 976 "./lex.yy.c" +#line 960 "./lex.yy.c" case YY_STATE_EOF(INITIAL): yyterminate(); @@ -1978,7 +1962,7 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 82 "./lexical.l" +#line 66 "./lexical.l" // #ifdef SCANNER_DEBUG diff --git a/Code/lexical.l b/Code/lexical.l index e1918b3..7aba43e 100755 --- a/Code/lexical.l +++ b/Code/lexical.l @@ -2,22 +2,6 @@ #include <stdio.h> #include "debug.h" #include "syntax.tab.h" - - struct YYLTYPE { - int first_line; - int first_column; - int last_line; - int last_column; - }; - - struct YYLTYPE yylloc = {0}; - - int yycolumn = 1; - #define YY_USER_ACTION \ - yylloc.first_line = yylloc.last_line = yylineno; \ - yylloc.first_column = yycolumn; \ - yylloc.last_column = yycolumn + yyleng - 1; \ - yycolumn += yyleng; %} INT (([+-]?[0-9])|([+-]?[1-9][0-9]+)|(0[xX][0-9A-Fa-f]+)|(0[1-7][0-7]*))[^.] diff --git a/Code/main.c b/Code/main.c index 0aff324..aed1654 100755 --- a/Code/main.c +++ b/Code/main.c @@ -1,6 +1,10 @@ -#include "lex.yy.c" #include <stdio.h> +int yyrestart(FILE*); +int yyparse (void); +int yylex(void); +void yyerror(char* s); + int main(int argc,char *argv[]) { if (argc <= 1) { printf("Usage:%s $FILE\n",argv[0]); diff --git a/Code/parser b/Code/parser index 2b32798072bfb6ddebaec0a47e4dff80a039168d..aed685946d9d3fb1860af77994c285b1e0ec4f7f 100755 GIT binary patch literal 36328 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 literal 36296 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 J*|#`R{4cZwJ7WL< diff --git a/Code/syntax.tab.c b/Code/syntax.tab.c index e0b11dd..ee2b932 100644 --- a/Code/syntax.tab.c +++ b/Code/syntax.tab.c @@ -67,11 +67,22 @@ /* First part of user prologue. */ -#line 1 "./syntax.y" +#line 3 "./syntax.y" + + int yycolumn = 1; + #define YY_USER_ACTION \ + yylloc.first_line = yylloc.last_line = yylineno; \ + yylloc.first_column = yycolumn; \ + yylloc.last_column = yycolumn + yyleng - 1; \ + yycolumn += yyleng; +#line 12 "./syntax.y" #include <stdio.h> + #include "lex.yy.c" + + void yyerror(char* s); -#line 75 "./syntax.tab.c" +#line 86 "./syntax.tab.c" # ifndef YY_CAST # ifdef __cplusplus @@ -417,13 +428,15 @@ void free (void *); /* INFRINGES ON USER NAME SPACE */ #if (! defined yyoverflow \ && (! defined __cplusplus \ - || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) + || (defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL \ + && defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { yy_state_t yyss_alloc; YYSTYPE yyvs_alloc; + YYLTYPE yyls_alloc; }; /* The size of the maximum gap between one aligned stack and the next. */ @@ -432,8 +445,9 @@ union yyalloc /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ - ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \ - + YYSTACK_GAP_MAXIMUM) + ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE) \ + + YYSIZEOF (YYLTYPE)) \ + + 2 * YYSTACK_GAP_MAXIMUM) # define YYCOPY_NEEDED 1 @@ -539,12 +553,12 @@ static const yytype_int8 yytranslate[] = /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint8 yyrline[] = { - 0, 38, 38, 40, 41, 43, 44, 45, 47, 48, - 53, 54, 56, 57, 59, 60, 62, 66, 67, 69, - 70, 72, 73, 75, 80, 82, 83, 85, 86, 87, - 88, 89, 90, 95, 96, 98, 100, 101, 103, 104, - 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 127, 128 + 0, 53, 53, 55, 56, 58, 59, 60, 62, 63, + 68, 69, 71, 72, 74, 75, 77, 81, 82, 84, + 85, 87, 88, 90, 95, 97, 98, 100, 101, 102, + 103, 104, 105, 110, 111, 113, 115, 116, 118, 119, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, + 133, 134, 135, 136, 137, 138, 139, 140, 142, 143 }; #endif @@ -765,6 +779,32 @@ enum { YYENOMEM = -2 }; Use YYerror or YYUNDEF. */ #define YYERRCODE YYUNDEF +/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. + If N is 0, then set CURRENT to the empty location which ends + the previous symbol: RHS[0] (always defined). */ + +#ifndef YYLLOC_DEFAULT +# define YYLLOC_DEFAULT(Current, Rhs, N) \ + do \ + if (N) \ + { \ + (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ + (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ + (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ + (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ + } \ + else \ + { \ + (Current).first_line = (Current).last_line = \ + YYRHSLOC (Rhs, 0).last_line; \ + (Current).first_column = (Current).last_column = \ + YYRHSLOC (Rhs, 0).last_column; \ + } \ + while (0) +#endif + +#define YYRHSLOC(Rhs, K) ((Rhs)[K]) + /* Enable debugging if requested. */ #if YYDEBUG @@ -781,6 +821,63 @@ do { \ } while (0) +/* YYLOCATION_PRINT -- Print the location on the stream. + This macro was not mandated originally: define only if we know + we won't break user code: when these are the locations we know. */ + +# ifndef YYLOCATION_PRINT + +# if defined YY_LOCATION_PRINT + + /* Temporary convenience wrapper in case some people defined the + undocumented and private YY_LOCATION_PRINT macros. */ +# define YYLOCATION_PRINT(File, Loc) YY_LOCATION_PRINT(File, *(Loc)) + +# elif defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL + +/* Print *YYLOCP on YYO. Private, do not rely on its existence. */ + +YY_ATTRIBUTE_UNUSED +static int +yy_location_print_ (FILE *yyo, YYLTYPE const * const yylocp) +{ + int res = 0; + int end_col = 0 != yylocp->last_column ? yylocp->last_column - 1 : 0; + if (0 <= yylocp->first_line) + { + res += YYFPRINTF (yyo, "%d", yylocp->first_line); + if (0 <= yylocp->first_column) + res += YYFPRINTF (yyo, ".%d", yylocp->first_column); + } + if (0 <= yylocp->last_line) + { + if (yylocp->first_line < yylocp->last_line) + { + res += YYFPRINTF (yyo, "-%d", yylocp->last_line); + if (0 <= end_col) + res += YYFPRINTF (yyo, ".%d", end_col); + } + else if (0 <= end_col && yylocp->first_column < end_col) + res += YYFPRINTF (yyo, "-%d", end_col); + } + return res; +} + +# define YYLOCATION_PRINT yy_location_print_ + + /* Temporary convenience wrapper in case some people defined the + undocumented and private YY_LOCATION_PRINT macros. */ +# define YY_LOCATION_PRINT(File, Loc) YYLOCATION_PRINT(File, &(Loc)) + +# else + +# define YYLOCATION_PRINT(File, Loc) ((void) 0) + /* Temporary convenience wrapper in case some people defined the + undocumented and private YY_LOCATION_PRINT macros. */ +# define YY_LOCATION_PRINT YYLOCATION_PRINT + +# endif +# endif /* !defined YYLOCATION_PRINT */ # define YY_SYMBOL_PRINT(Title, Kind, Value, Location) \ @@ -789,7 +886,7 @@ do { \ { \ YYFPRINTF (stderr, "%s ", Title); \ yy_symbol_print (stderr, \ - Kind, Value); \ + Kind, Value, Location); \ YYFPRINTF (stderr, "\n"); \ } \ } while (0) @@ -801,10 +898,11 @@ do { \ static void yy_symbol_value_print (FILE *yyo, - yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep) + yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp) { FILE *yyoutput = yyo; YY_USE (yyoutput); + YY_USE (yylocationp); if (!yyvaluep) return; YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN @@ -819,12 +917,14 @@ yy_symbol_value_print (FILE *yyo, static void yy_symbol_print (FILE *yyo, - yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep) + yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp) { YYFPRINTF (yyo, "%s %s (", yykind < YYNTOKENS ? "token" : "nterm", yysymbol_name (yykind)); - yy_symbol_value_print (yyo, yykind, yyvaluep); + YYLOCATION_PRINT (yyo, yylocationp); + YYFPRINTF (yyo, ": "); + yy_symbol_value_print (yyo, yykind, yyvaluep, yylocationp); YYFPRINTF (yyo, ")"); } @@ -857,7 +957,7 @@ do { \ `------------------------------------------------*/ static void -yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, +yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, YYLTYPE *yylsp, int yyrule) { int yylno = yyrline[yyrule]; @@ -871,7 +971,8 @@ yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, YYFPRINTF (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, YY_ACCESSING_SYMBOL (+yyssp[yyi + 1 - yynrhs]), - &yyvsp[(yyi + 1) - (yynrhs)]); + &yyvsp[(yyi + 1) - (yynrhs)], + &(yylsp[(yyi + 1) - (yynrhs)])); YYFPRINTF (stderr, "\n"); } } @@ -879,7 +980,7 @@ yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ - yy_reduce_print (yyssp, yyvsp, Rule); \ + yy_reduce_print (yyssp, yyvsp, yylsp, Rule); \ } while (0) /* Nonzero means print parse trace. It is left uninitialized so that @@ -920,9 +1021,10 @@ int yydebug; static void yydestruct (const char *yymsg, - yysymbol_kind_t yykind, YYSTYPE *yyvaluep) + yysymbol_kind_t yykind, YYSTYPE *yyvaluep, YYLTYPE *yylocationp) { YY_USE (yyvaluep); + YY_USE (yylocationp); if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp); @@ -938,6 +1040,12 @@ int yychar; /* The semantic value of the lookahead symbol. */ YYSTYPE yylval; +/* Location data for the lookahead symbol. */ +YYLTYPE yylloc +# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL + = { 1, 1, 1, 1 } +# endif +; /* Number of syntax errors so far. */ int yynerrs; @@ -971,6 +1079,11 @@ yyparse (void) YYSTYPE *yyvs = yyvsa; YYSTYPE *yyvsp = yyvs; + /* The location stack: array, bottom, top. */ + YYLTYPE yylsa[YYINITDEPTH]; + YYLTYPE *yyls = yylsa; + YYLTYPE *yylsp = yyls; + int yyn; /* The return value of yyparse. */ int yyresult; @@ -979,10 +1092,14 @@ yyparse (void) /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; + YYLTYPE yyloc; + + /* The locations where the error started and ended. */ + YYLTYPE yyerror_range[3]; -#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) +#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N), yylsp -= (N)) /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ @@ -992,6 +1109,7 @@ yyparse (void) yychar = YYEMPTY; /* Cause a token to be read. */ + yylsp[0] = yylloc; goto yysetstate; @@ -1030,6 +1148,7 @@ yysetstate: memory. */ yy_state_t *yyss1 = yyss; YYSTYPE *yyvs1 = yyvs; + YYLTYPE *yyls1 = yyls; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a @@ -1038,9 +1157,11 @@ yysetstate: yyoverflow (YY_("memory exhausted"), &yyss1, yysize * YYSIZEOF (*yyssp), &yyvs1, yysize * YYSIZEOF (*yyvsp), + &yyls1, yysize * YYSIZEOF (*yylsp), &yystacksize); yyss = yyss1; yyvs = yyvs1; + yyls = yyls1; } # else /* defined YYSTACK_RELOCATE */ /* Extend the stack our own way. */ @@ -1059,6 +1180,7 @@ yysetstate: YYNOMEM; YYSTACK_RELOCATE (yyss_alloc, yyss); YYSTACK_RELOCATE (yyvs_alloc, yyvs); + YYSTACK_RELOCATE (yyls_alloc, yyls); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); @@ -1067,6 +1189,7 @@ yysetstate: yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; + yylsp = yyls + yysize - 1; YY_IGNORE_USELESS_CAST_BEGIN YYDPRINTF ((stderr, "Stack size increased to %ld\n", @@ -1120,6 +1243,7 @@ yybackup: loop in error recovery. */ yychar = YYUNDEF; yytoken = YYSYMBOL_YYerror; + yyerror_range[1] = yylloc; goto yyerrlab1; } else @@ -1153,6 +1277,7 @@ yybackup: YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END + *++yylsp = yylloc; /* Discard the shifted token. */ yychar = YYEMPTY; @@ -1186,12 +1311,14 @@ yyreduce: GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1-yylen]; - + /* Default location. */ + YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen); + yyerror_range[1] = yyloc; YY_REDUCE_PRINT (yyn); switch (yyn) { -#line 1195 "./syntax.tab.c" +#line 1322 "./syntax.tab.c" default: break; } @@ -1212,6 +1339,7 @@ yyreduce: yylen = 0; *++yyvsp = yyval; + *++yylsp = yyloc; /* Now 'shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule @@ -1241,6 +1369,7 @@ yyerrlab: yyerror (YY_("syntax error")); } + yyerror_range[1] = yylloc; if (yyerrstatus == 3) { /* If just tried and failed to reuse lookahead token after an @@ -1255,7 +1384,7 @@ yyerrlab: else { yydestruct ("Error: discarding", - yytoken, &yylval); + yytoken, &yylval, &yylloc); yychar = YYEMPTY; } } @@ -1309,9 +1438,9 @@ yyerrlab1: if (yyssp == yyss) YYABORT; - + yyerror_range[1] = *yylsp; yydestruct ("Error: popping", - YY_ACCESSING_SYMBOL (yystate), yyvsp); + YY_ACCESSING_SYMBOL (yystate), yyvsp, yylsp); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); @@ -1321,6 +1450,9 @@ yyerrlab1: *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END + yyerror_range[2] = yylloc; + ++yylsp; + YYLLOC_DEFAULT (*yylsp, yyerror_range, 2); /* Shift the error token. */ YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp); @@ -1364,7 +1496,7 @@ yyreturnlab: user semantic actions for why this is necessary. */ yytoken = YYTRANSLATE (yychar); yydestruct ("Cleanup: discarding lookahead", - yytoken, &yylval); + yytoken, &yylval, &yylloc); } /* Do not reclaim the symbols of the rule whose action triggered this YYABORT or YYACCEPT. */ @@ -1373,7 +1505,7 @@ yyreturnlab: while (yyssp != yyss) { yydestruct ("Cleanup: popping", - YY_ACCESSING_SYMBOL (+*yyssp), yyvsp); + YY_ACCESSING_SYMBOL (+*yyssp), yyvsp, yylsp); YYPOPSTACK (1); } #ifndef yyoverflow @@ -1384,5 +1516,5 @@ yyreturnlab: return yyresult; } -#line 132 "./syntax.y" +#line 147 "./syntax.y" diff --git a/Code/syntax.tab.h b/Code/syntax.tab.h index 3377058..1b91d45 100644 --- a/Code/syntax.tab.h +++ b/Code/syntax.tab.h @@ -92,9 +92,23 @@ typedef int YYSTYPE; # define YYSTYPE_IS_DECLARED 1 #endif +/* Location type. */ +#if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED +typedef struct YYLTYPE YYLTYPE; +struct YYLTYPE +{ + int first_line; + int first_column; + int last_line; + int last_column; +}; +# define YYLTYPE_IS_DECLARED 1 +# define YYLTYPE_IS_TRIVIAL 1 +#endif -extern YYSTYPE yylval; +extern YYSTYPE yylval; +extern YYLTYPE yylloc; int yyparse (void); diff --git a/Code/syntax.y b/Code/syntax.y index 001cb40..e43103c 100755 --- a/Code/syntax.y +++ b/Code/syntax.y @@ -1,7 +1,22 @@ +%locations + +%{ + int yycolumn = 1; + #define YY_USER_ACTION \ + yylloc.first_line = yylloc.last_line = yylineno; \ + yylloc.first_column = yycolumn; \ + yylloc.last_column = yycolumn + yyleng - 1; \ + yycolumn += yyleng; +%} + %{ #include <stdio.h> + #include "lex.yy.c" + + void yyerror(char* s); %} + /* declared tokens */ %token INT %token FLOAT -- GitLab