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