Adding some improvements:
authorlbessard
Tue, 12 Aug 2008 16:14:12 +0200
changeset 136 32bd7ef40897
parent 135 0f3f6714b938
child 137 9ceda59abd27
Adding some improvements:
- columns in token location
- main parameter to allow user to display full location of errors
- parsing of errors in end of rules
main.cc
stage1_2/iec.flex
stage1_2/iec.y
stage1_2/stage1_2.cc
stage1_2/stage1_2_priv.hh
--- a/main.cc	Mon Aug 04 15:14:25 2008 +0200
+++ b/main.cc	Tue Aug 12 16:14:12 2008 +0200
@@ -80,13 +80,15 @@
 
 
 /* forward declarations... */
-int stage1_2(const char *filename, const char *includedir, symbol_c **tree_root);
+int stage1_2(const char *filename, const char *includedir, symbol_c **tree_root, bool full);
 //int stage3(symbol_c *tree_root);
 int stage4(symbol_c *tree_root, const char *builddir);
 
 
 static void printusage(const char *cmd) {
-  printf("%s [<input_file>] [-I <include_directory>] [<target_directory>]\n", cmd);
+  printf("syntaxe: %s [-fh] <input_file> [-I <include_directory>] [<target_directory>]\n", cmd);
+  printf("  f : full token location on error messages\n");
+  printf("  h : show this help message\n");
 }
 
 
@@ -95,33 +97,49 @@
   symbol_c *tree_root;
   char * includedir = NULL;
   char * builddir = NULL;
+  bool full = false;
+  int offset = 0; 
 
-  if (argc == 5) {
-    builddir = argv[4];
-    argc = 4;
-  }
-
-  if (argc == 4) {
-    if (strcmp(argv[2], "-I") != 0) {
-      printusage(argv[0]);
-      return EXIT_FAILURE;
-    }
-    includedir = argv[3];
-    argc = 2;
-  }
-
-  if (argc == 3) {
-    builddir = argv[2];
-    argc = 2;
-  }    
-
-  if (argc != 2) {
+  if (argc < 2 || argc > 6) {
     printusage(argv[0]);
     return EXIT_FAILURE;
   }
 
+  if (strcmp(argv[1], "-h") == 0) {
+    printusage(argv[0]);
+    return 0;
+  }
+
+  if (strcmp(argv[1], "-f") == 0) {
+    if (argc == 2) {
+      printusage(argv[0]);
+      return EXIT_FAILURE;
+    }
+    full = true;
+    offset = 1;
+  }
+    
+  if (argc == (5 + offset)) {
+    builddir = argv[4 + offset];
+    argc = 4 + offset;
+  }
+
+  if (argc == (4 + offset)) {
+    if (strcmp(argv[2 + offset], "-I") != 0) {
+      printusage(argv[0]);
+      return EXIT_FAILURE;
+    }
+    includedir = argv[3 + offset];
+    argc = 2 + offset;
+  }
+
+  if (argc == (3 + offset)) {
+    builddir = argv[2 + offset];
+    argc = 2 + offset;
+  }    
+
   /* 1st Pass */
-  if (stage1_2(argv[1], includedir, &tree_root) < 0)
+  if (stage1_2(argv[1 + offset], includedir, &tree_root, full) < 0)
     return EXIT_FAILURE;
 
   /* 2nd Pass */
--- a/stage1_2/iec.flex	Mon Aug 04 15:14:25 2008 +0200
+++ b/stage1_2/iec.flex	Tue Aug 12 16:14:12 2008 +0200
@@ -155,13 +155,22 @@
  */
 extern YYLTYPE yylloc;
 
+#define YY_INPUT(buf,result,max_size)  {\
+    result = GetNextChar(buf, max_size);\
+    if (  result <= 0  )\
+      result = YY_NULL;\
+    }
+
 /* Macro that is executed for every action.
  * We use it to pass the location of the token
  * back to the bison parser...
  */
-#define YY_USER_ACTION { 					\
-	yylloc.first_line = yylloc.last_line = yylineno;	\
-	yylloc.first_column = yylloc.last_column = 0;		\
+#define YY_USER_ACTION {\
+	  yylloc.first_line = current_tracking->lineNumber;\
+  	yylloc.first_column = current_tracking->currentTokenStart;\
+  	yylloc.last_line = current_tracking->lineNumber;\
+  	yylloc.last_column = current_tracking->currentChar - 1;\
+  	current_tracking->currentTokenStart = current_tracking->currentChar;\
 	}
 
 
@@ -404,10 +413,11 @@
 
 typedef struct {
 	  YY_BUFFER_STATE buffer_state;
-	  int lineno;
+	  tracking_t* env;
 	  const char *filename;
 	} include_stack_t;
 
+tracking_t* current_tracking;
 include_stack_t include_stack[MAX_INCLUDE_DEPTH];
 int include_stack_ptr = 0;
 
@@ -524,7 +534,7 @@
 octal_digit	[0-7]
 hex_digit	{digit}|[A-F]
 identifier	({letter}|(_({letter}|{digit})))((_?({letter}|{digit}))*)
-
+invalid_identifier ({letter}|{digit}|_)*
 
 /*******************/
 /* B.1.2 Constants */
@@ -710,7 +720,6 @@
 	  rst_pop_state();
 	}
 
-
 	/***************************/
 	/* Handle the pragmas!     */
 	/***************************/
@@ -745,14 +754,10 @@
 			    fprintf(stderr, "Includes nested too deeply\n");
 			    exit( 1 );
 			  }
-
-			  (include_stack[include_stack_ptr]).buffer_state = YY_CURRENT_BUFFER;
-			  (include_stack[include_stack_ptr]).lineno = yylineno;
-			  (include_stack[include_stack_ptr]).filename = current_filename;
-			  include_stack_ptr++;
-			  yylineno = 1;
-			  current_filename = strdup(yytext);
-
+        include_stack[include_stack_ptr].buffer_state = YY_CURRENT_BUFFER;
+        include_stack[include_stack_ptr].env = current_tracking;
+        include_stack[include_stack_ptr].filename = current_filename;
+			  
 			  for (i = 0, yyin = NULL; (INCLUDE_DIRECTORIES[i] != NULL) && (yyin == NULL); i++) {
 			    char *full_name = strdup3(INCLUDE_DIRECTORIES[i], "/", yytext);
 			    if (full_name == NULL) {
@@ -768,6 +773,10 @@
 			    exit( 1 );
 			  }
 
+			  current_filename = strdup(yytext);
+			  current_tracking = GetNewTracking(yyin);
+			  include_stack_ptr++;
+
 			  /* switch input buffer to new file... */
 			  yy_switch_to_buffer(yy_create_buffer(yyin, YY_BUF_SIZE));
 			  /* switch to whatever state was active before the include file */
@@ -784,6 +793,7 @@
 			       *       parser is called once again with a new file.
 			       *       (In fact, we currently do just that!)
 			       */
+			  free(current_tracking);
 			  if (include_stack_ptr == 0) {
 			      /* yyterminate() terminates the scanner and returns a 0 to the 
 			       * scanner's  caller, indicating "all done".
@@ -796,10 +806,10 @@
 			    yyterminate();
 			  }      
  else {
-			    --include_stack_ptr;	
+			    --include_stack_ptr;
 			    yy_delete_buffer(YY_CURRENT_BUFFER);
 			    yy_switch_to_buffer((include_stack[include_stack_ptr]).buffer_state);
-			    yylineno = include_stack[include_stack_ptr].lineno;
+			    current_tracking = include_stack[include_stack_ptr].env;
 			      /* removing constness of char *. This is safe actually,
 			       * since the only real const char * that is stored on the stack is
 			       * the first one (i.e. the one that gets stored in include_stack[0],
@@ -1474,6 +1484,7 @@
 	 *
 	 *  e.g.:  ':'  '('  ')'  '+'  '*'  ...
 	 */
+{invalid_identifier} return INVALID_IDENTIFIER;
 .	{return yytext[0];}
 
 
@@ -1491,7 +1502,7 @@
   if ((include_stack_ptr - 1) >= 0)
     fprintf (stderr, "in file "); 
   for (i = include_stack_ptr - 1; i >= 0; i--)
-    fprintf (stderr, "included from file %s:%d\n", include_stack[i].filename, include_stack[i].lineno);
+    fprintf (stderr, "included from file %s:%d\n", include_stack[i].filename, include_stack[i].env->lineNumber);
 }
 
 
@@ -1503,19 +1514,14 @@
    * We therefore determine how many newlines are in the text we are returning,
    * and decrement the line counter acordingly...
    */
-  unsigned int i;
-  unsigned int line_number = 0;
-  int before_yylineno = yylineno;
-
+  /*unsigned int i;
+  
   for (i = n; i < strlen(yytext); i++)
     if (yytext[i] == '\n')
-      line_number++;
+      current_tracking->lineNumber--;*/
 
   /* now return all the text back to the input stream... */
   yyless(n);
-  
-  if (line_number > 0 && before_yylineno == yylineno)
-    yylineno = yylineno - line_number;
 }
 
 
@@ -1564,7 +1570,7 @@
 
   FILE *in_file;
   int res;
-
+	
   if (argc == 1) {
     /* Work as an interactive (command line) parser... */
     while((res=yylex()))
@@ -1586,8 +1592,8 @@
       fprintf(stderr, "(line %d)token: %d (%s)\n", yylineno, res, yylval.ID);
     }
   }
-
-  return 0;
+	
+	return 0;
 
 }
 #endif
--- a/stage1_2/iec.y	Mon Aug 04 15:14:25 2008 +0200
+++ b/stage1_2/iec.y	Tue Aug 12 16:14:12 2008 +0200
@@ -154,9 +154,11 @@
 /* Convert an il_operator_c into an identifier_c */
 symbol_c *il_operator_c_2_identifier_c(symbol_c *il_operator);
 
+/* return if current token is a syntax element */
+bool is_current_syntax_token();
+
 /* print an error message */
-void print_err_msg(const char *filename,
-                   int first_line,
+void print_err_msg(int first_line,
                    int first_column,
                    int last_line,
                    int last_column,
@@ -291,7 +293,7 @@
 */
 %token <ID>	identifier_token
 %type  <leaf>	identifier
-
+%token INVALID_IDENTIFIER
 
 /*********************/
 /* B 1.2 - Constants */
@@ -1364,8 +1366,6 @@
 ;
 
 
-
-
 prev_declared_variable_name: prev_declared_variable_name_token {$$ = new identifier_c($1, locloc(@$));};
 prev_declared_fb_name: prev_declared_fb_name_token {$$ = new identifier_c($1, locloc(@$));};
 
@@ -1394,11 +1394,10 @@
 | library library_element_declaration
 	{$$ = $1; $$->add_element($2);}
 /* ERROR_CHECK_BEGIN */
+| library error library_element_declaration
+	{$$ = $1; print_err_msg(locf(@2), locl(@2), "unknown syntax error."); yyerrok;}
 | library error END_OF_INPUT
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unknown syntax error.");
-	 yyerrok;
-	}
+	{$$ = $1; print_err_msg(locf(@2), locl(@2), "unknown syntax error."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -1682,48 +1681,17 @@
  */
 /* ERROR_CHECK_BEGIN */
 | integer_type_name signed_integer
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "'#' missing between integer type name and value in integer literal.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "'#' missing between integer type name and value in integer literal."); yynerrs++;}
 | integer_type_name binary_integer
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "'#' missing between integer type name and value in integer literal.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "'#' missing between integer type name and value in integer literal."); yynerrs++;}
 | integer_type_name octal_integer
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "'#' missing between integer type name and value in integer literal.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "'#' missing between integer type name and value in integer literal."); yynerrs++;}
 | integer_type_name hex_integer
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "'#' missing between integer type name and value in integer literal.");
-	}
-| integer_type_name error signed_integer
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "expecting '#' between integer type name and value in integer literal.");
-	 yyerrok;
-	}
-| integer_type_name error binary_integer
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "expecting '#' between integer type name and value in integer literal.");
-	 yyerrok;
-	}
-| integer_type_name error octal_integer
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "expecting '#' between integer type name and value in integer literal.");
-	 yyerrok;
-	}
-| integer_type_name error hex_integer
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "expecting '#' between integer type name and value in integer literal.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "'#' missing between integer type name and value in integer literal."); yynerrs++;}
 | integer_type_name '#' error
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid value for integer literal.");
+	{$$ = NULL; 
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no value defined for integer literal.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid value for integer literal."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -1751,18 +1719,11 @@
 	{$$ = new real_literal_c($1, $3, locf(@1), locl(@3));}
 /* ERROR_CHECK_BEGIN */
 | real_type_name signed_real
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "'#' missing between real type name and value in real literal.");
-	}
-| real_type_name error signed_real
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "expecting '#' between real type name and value in real literal.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "'#' missing between real type name and value in real literal."); yynerrs++;}
 | real_type_name '#' error
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid value for real literal.");
+  {$$ = NULL;
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no value defined for real literal.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid value for real literal."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -1808,48 +1769,17 @@
  */
 /* ERROR_CHECK_BEGIN */
 | bit_string_type_name integer
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "'#' missing between bit string type name and value in bit string literal.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "'#' missing between bit string type name and value in bit string literal."); yynerrs++;}
 | bit_string_type_name binary_integer
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "'#' missing between bit string type name and value in bit string literal.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "'#' missing between bit string type name and value in bit string literal."); yynerrs++;}
 | bit_string_type_name octal_integer
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "'#' missing between bit string type name and value in bit string literal.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "'#' missing between bit string type name and value in bit string literal."); yynerrs++;}
 | bit_string_type_name hex_integer
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "'#' missing between bit string type name and value in bit string literal.");
-	}
-| bit_string_type_name error integer
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "expecting '#' between bit string type name and value in bit string literal.");
-	 yyerrok;
-	}
-| bit_string_type_name error binary_integer
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "expecting '#' between bit string type name and value in bit string literal.");
-	 yyerrok;
-	}
-| bit_string_type_name error octal_integer
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "expecting '#' between bit string type name and value in bit string literal.");
-	 yyerrok;
-	}
-| bit_string_type_name error hex_integer
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "expecting '#' between bit string type name and value in bit string literal.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "'#' missing between bit string type name and value in bit string literal."); yynerrs++;}
 | bit_string_type_name '#' error
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid value for bit string literal.");
+  {$$ = NULL;
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no value defined for bit string literal.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid value for bit string literal."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -1953,33 +1883,19 @@
 	{$$ = new duration_c(new neg_time_c(locloc(@$)), $3, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | TIME interval
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "'#' missing between 'TIME' and interval in duration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "'#' missing between 'TIME' and interval in duration."); yynerrs++;}
 | TIME '-' interval
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "'#' missing between 'TIME' and interval in duration.");
-	}
-| TIME error interval
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "expecting '#' between 'TIME' and interval in duration.");
-	 yyerrok;
-	}
-| TIME error '-' interval
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "expecting '#' between 'TIME' and interval in duration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "'#' missing between 'TIME' and interval in duration."); yynerrs++;}
 | TIME '#' error
 	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid value for duration.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no value defined for duration.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid value for duration."); yyclearin;}
 	 yyerrok;
 	}
 | T_SHARP error
 	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid value for duration.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@1), locf(@2), "no value defined for duration.");}
+	 else {print_err_msg(locf(@2), locl(@2), "invalid value for duration."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -2050,7 +1966,8 @@
 /* ERROR_CHECK_BEGIN */
 | integer_d '_' error
 	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid value for hours in duration.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no value defined for hours in duration.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid value for hours in duration."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -2069,7 +1986,8 @@
 /* ERROR_CHECK_BEGIN */
 | integer_h '_' error
 	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid value for minutes in duration.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no value defined for minutes in duration.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid value for minutes in duration."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -2088,7 +2006,8 @@
 /* ERROR_CHECK_BEGIN */
 | integer_m '_' error
 	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid value for seconds in duration.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no value defined for seconds in duration.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid value for seconds in duration."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -2106,7 +2025,8 @@
 /* ERROR_CHECK_BEGIN */
 | integer_s '_' error
 	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid value for milliseconds in duration.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no value defined for milliseconds in duration.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid value for milliseconds in duration."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -2128,18 +2048,11 @@
 	{$$ = new time_of_day_c($3, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | TIME_OF_DAY daytime
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "'#' missing between 'TIME_OF_DAY' and daytime in time of day.");
-	}
-| TIME_OF_DAY error daytime
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "expecting '#' between 'TIME_OF_DAY' and daytime in time of day.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "'#' missing between 'TIME_OF_DAY' and daytime in time of day."); yynerrs++;}
 | TIME_OF_DAY '#' error
 	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid value for time of day.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no value defined for time of day.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid value for time of day."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -2150,39 +2063,22 @@
   day_hour ':' day_minute ':' day_second
 	{$$ = new daytime_c($1, $3, $5, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
+| ':' day_minute ':' day_second
+  {$$ = NULL; print_err_msg(locf(@1), locl(@4), "no value defined for hours in daytime."); yynerrs++;}
+| error ':' day_minute ':' day_second
+  {$$ = NULL; print_err_msg(locf(@1), locl(@1), "invalid value defined for hours in daytime."); yyerrok;}
 | day_hour day_minute ':' day_second
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':' missing between hours and minutes in daytime.");
-	}
-| day_hour error day_minute ':' day_second
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "expecting ':' between hours and minutes in daytime.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locl(@1), locf(@2), "':' missing between hours and minutes in daytime."); yynerrs++;}
 | day_hour ':' ':' day_second
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "no minutes defined in daytime.");
-	}
+	{$$ = NULL; print_err_msg(locl(@2), locf(@3), "no value defined for minutes in daytime."); yynerrs++;}
 | day_hour ':' error ':' day_second
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid value for minutes in daytime.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@3), locl(@3), "invalid value defined for minutes in daytime."); yyerrok;}
 | day_hour ':' day_minute day_second
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@3), locf(@4), "':' missing between minutes and seconds in daytime.");
-	}
-| day_hour ':' day_minute error day_second
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@4), locl(@4), "expecting ':' between minutes and seconds in daytime.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locl(@3), locf(@4), "':' missing between minutes and seconds in daytime."); yynerrs++;}
 | day_hour ':' day_minute ':' error
   {$$ = NULL;
-	 print_err_msg(current_filename, locf(@5), locl(@5), "invalid value for seconds in daytime.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@4), locf(@5), "no value defined for seconds in daytime.");}
+	 else {print_err_msg(locf(@5), locl(@5), "invalid value for seconds in daytime."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -2201,23 +2097,17 @@
 	{$$ = new date_c($2, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | DATE date_literal
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "'#' missing between 'DATE' and date literal in date.");
-	}
-| DATE error date_literal
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "expecting '#' between 'DATE' and date literal in date.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "'#' missing between 'DATE' and date literal in date."); yynerrs++;}
 | DATE '#' error
 	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid value for date.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no value defined for date.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid value for date."); yyclearin;}
 	 yyerrok;
 	}
 | D_SHARP error
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid value for date.");
+  {$$ = NULL;
+	 if (is_current_syntax_token()) {print_err_msg(locl(@1), locf(@2), "no value defined for date.");}
+	 else {print_err_msg(locf(@2), locl(@2), "invalid value for date."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -2228,39 +2118,20 @@
   year '-' month '-' day
 	{$$ = new date_literal_c($1, $3, $5, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
+| '-' month '-' day
+  {$$ = NULL; print_err_msg(locl(@1), locf(@2), "no value defined for year in date literal."); yynerrs++;}
 | year month '-' day
+  {$$ = NULL; print_err_msg(locl(@1), locf(@2), "'-' missing between year and month in date literal."); yynerrs++;}
+| year '-' '-' day
+	{$$ = NULL; print_err_msg(locl(@2), locf(@3), "no value defined for month in date literal."); yynerrs++;}
+| year '-' error '-' day
+	{$$ = NULL; print_err_msg(locf(@3), locl(@3), "invalid value defined for month in date literal."); yyerrok;}
+| year '-' month day
+  {$$ = NULL; print_err_msg(locl(@3), locf(@4), "'-' missing between month and day in date literal."); yynerrs++;}
+| year '-' month '-' error
   {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "'-' missing between year and month in date literal.");
-	}
-| year error month '-' day
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "expecting '-' between year and month in date literal.");
-	 yyerrok;
-	}
-| year '-' '-' day
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "no month defined in date literal.");
-	}
-| year '-' error '-' day
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid value for month in date literal.");
-	 yyerrok;
-	}
-| year '-' month day
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@3), locf(@4), "':' missing between month and day in date literal.");
-	}
-| year ':' month error day
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@4), locl(@4), "expecting ':' between month and day in date literal.");
-	 yyerrok;
-	}
-| year ':' month ':' error
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@5), locl(@5), "invalid value for day in date literal.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@4), locf(@5), "no value defined for day in date literal.");}
+	 else {print_err_msg(locf(@5), locl(@5), "invalid value for day in date literal."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -2277,38 +2148,17 @@
 	{$$ = new date_and_time_c($3, $5, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | DATE_AND_TIME date_literal '-' daytime
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "'#' missing between 'DATE_AND_TIME' and date literal in date and time.");
-	}
-| DATE_AND_TIME error date_literal '-' daytime
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "expecting '#' between 'DATE_AND_TIME' and date literal in date and time.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "'#' missing between 'DATE_AND_TIME' and date literal in date and time."); yynerrs++;}
 | DATE_AND_TIME '#' '-' daytime
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "no value defined for date literal in date and time.");
-	}
+	{$$ = NULL; print_err_msg(locl(@2), locf(@3), "no value defined for date literal in date and time."); yynerrs++;}
 | DATE_AND_TIME '#' error '-' daytime
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid value for date literal in date and time.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@3), locl(@3), "invalid value for date literal in date and time."); yyerrok;}
 | DATE_AND_TIME '#' date_literal daytime
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@3), locf(@4), "'-' missing between date literal and daytime in date and time.");
-	}
-| DATE_AND_TIME '#' date_literal error daytime
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@4), locl(@4), "expecting '-' between date literal and daytime in date and time.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locl(@3), locf(@4), "'-' missing between date literal and daytime in date and time."); yynerrs++;}
 | DATE_AND_TIME '#' date_literal '-' error
 	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@5), locl(@5), "invalid value for daytime in date and time.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@4), locf(@5), "no value defined for daytime in date and time.");}
+	 else {print_err_msg(locf(@5), locl(@5), "invalid value for daytime in date and time."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -2477,20 +2327,13 @@
 	{$$ = new data_type_declaration_c($2, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | TYPE END_TYPE
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "no data type declared in data type(s) declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "no data type declared in data type(s) declaration."); yynerrs++;}
 | TYPE error type_declaration_list END_TYPE
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unexpected token after 'TYPE' in data type(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@2), locl(@2), "unexpected token after 'TYPE' in data type(s) declaration."); yyerrok;}
+| TYPE type_declaration_list error END_OF_INPUT
+	{$$ = NULL; print_err_msg(locf(@1), locl(@1), "unclosed data type(s) declaration."); yyerrok;}
 | TYPE error END_TYPE
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unknown error in data type(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@2), locl(@2), "unknown error in data type(s) declaration."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -2502,30 +2345,15 @@
 	{$$ = $1; $$->add_element($2);}
 /* ERROR_CHECK_BEGIN */
 | error ';'
-	{$$ = new type_declaration_list_c(locloc(@$));
-	 print_err_msg(current_filename, locf(@1), locl(@1), "invalid data type declaration.");
-	 yyerrok;
-	}
+	{$$ = new type_declaration_list_c(locloc(@$)); print_err_msg(locf(@1), locl(@1), "invalid data type declaration."); yyerrok;}
 | type_declaration error
-	{$$ = new type_declaration_list_c(locloc(@$));
-	 print_err_msg(current_filename, locl(@1), locf(@2), "';' missing at end of data type declaration.");
-	 yyerrok;
-	}
+	{$$ = new type_declaration_list_c(locloc(@$)); print_err_msg(locl(@1), locf(@2), "';' missing at end of data type declaration."); yyerrok;}
 | type_declaration_list type_declaration error
-	{$$ = $1;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "';' missing at end of data type declaration.");
-	 yyerrok;
-	}
+	{$$ = $1; print_err_msg(locl(@2), locf(@3), "';' missing at end of data type declaration."); yyerrok;}
 | type_declaration_list error ';'
-	{$$ = $1;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid data type declaration.");
-	 yyerrok;
-	}
+	{$$ = $1; print_err_msg(locf(@2), locl(@2), "invalid data type declaration."); yyerrok;}
 | type_declaration_list ';'
-	{$$ = $1;
-	 yynerrs++;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unexpected ';' after data type declaration.");
-	}
+	{$$ = $1; print_err_msg(locf(@2), locl(@2), "unexpected ';' after data type declaration."); yynerrs++;}
 /* ERROR_CHECK_END */
 ;
 
@@ -2549,19 +2377,14 @@
 	 library_element_symtable.insert($1, prev_declared_simple_type_name_token);
 	}
 /* ERROR_CHECK_BEGIN */
+| error ':' simple_spec_init
+	{$$ = NULL; print_err_msg(locf(@1), locl(@1), "invalid name defined for data type declaration.");yyerrok;}
 | identifier simple_spec_init
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':' missing between data type name and specification in simple type declaration.");
-	}
-| identifier ':' identifier
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "unknown data type defined in specification for data type declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "':' missing between data type name and specification in simple type declaration."); yynerrs++;}
 | identifier ':' error
 	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "no specification defined in data type declaration.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no specification defined in data type declaration.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid specification in data type declaration."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -2585,19 +2408,20 @@
 	{$$ = new simple_spec_init_c($1, $3, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | elementary_type_name constant
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "':=' missing in specification with initialization."); yynerrs++;}
+| prev_declared_simple_type_name constant
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "':=' missing in specification with initialization."); yynerrs++;}
+| elementary_type_name ASSIGN error
 	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':=' missing in specification with initialization.");
-	}
-| prev_declared_simple_type_name constant
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no initial value defined in specification with initialization.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid initial value in specification with initialization."); yyclearin;}
+	 yyerrok;
+	}
+| prev_declared_simple_type_name ASSIGN error
 	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':=' missing in specification with initialization.");
-	}
-| identifier ASSIGN constant
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locf(@1), locl(@1), "unknown type defined in specification.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no initial value defined in specification with initialization.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid initial value in specification with initialization."); yyclearin;}
+	 yyerrok;
 	}
 /* ERROR_CHECK_END */
 ;
@@ -2629,11 +2453,10 @@
 	 library_element_symtable.insert($1, prev_declared_subrange_type_name_token);
 	}
 /* ERROR_CHECK_BEGIN */
+| error ':' subrange_spec_init
+	{$$ = NULL; print_err_msg(locf(@1), locl(@1), "invalid name defined for subrange type declaration."); yyerrok;}
 | identifier subrange_spec_init
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':' missing between data type name and specification in subrange type declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "':' missing between data type name and specification in subrange type declaration."); yynerrs++;}
 /* ERROR_CHECK_END */
 ;
 
@@ -2644,9 +2467,12 @@
 	{$$ = new subrange_spec_init_c($1, $3, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | subrange_specification signed_integer
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "':=' missing in subrange specification with initialization."); yynerrs++;}
+| subrange_specification ASSIGN error
 	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':=' missing in subrange specification with initialization.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no initial value defined in subrange specification with initialization.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid initial value in subrange specification with initialization."); yyclearin;}
+	 yyerrok;
 	}
 /* ERROR_CHECK_END */
 ;
@@ -2658,20 +2484,11 @@
   {$$ = new subrange_specification_c($1, NULL, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | integer_type_name '(' ')'
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "no subrange defined in subrange specification.");
-	}
+	{$$ = NULL; print_err_msg(locl(@2), locf(@3), "no subrange defined in subrange specification."); yynerrs++;}
 | integer_type_name '(' error ')'
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid subrange defined in subrange specification.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@3), locl(@3), "invalid subrange defined in subrange specification."); yyerrok;}
 | integer_type_name '(' subrange error
-	{$$ = NULL;
-	 print_err_msg(current_filename, locl(@3), locf(@4), "')' missing after subrange defined in subrange specification.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locl(@3), locf(@4), "')' missing after subrange defined in subrange specification."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -2681,18 +2498,11 @@
 	{$$ = new subrange_c($1, $3, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | signed_integer signed_integer
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "'..' missing between bounds in subrange definition.");
-	}
-| signed_integer error signed_integer
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "expecting '..' between bounds in subrange definition.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "'..' missing between bounds in subrange definition."); yynerrs++;}
 | signed_integer DOTDOT error
 	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid value for upper bound in subrange definition.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no value defined for upper bound in subrange definition.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid value for upper bound in subrange definition."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -2705,11 +2515,10 @@
 	 library_element_symtable.insert($1, prev_declared_enumerated_type_name_token);
 	}
 /* ERROR_CHECK_BEGIN */
+| error ':' enumerated_spec_init
+	{$$ = NULL; print_err_msg(locf(@1), locl(@1), "invalid name defined for enumerated type declaration."); yyerrok;}
 | identifier enumerated_spec_init
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':' missing between data type name and specification in enumerated type declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "':' missing between data type name and specification in enumerated type declaration."); yynerrs++;}
 /* ERROR_CHECK_END */
 ;
 
@@ -2721,9 +2530,12 @@
 	{$$ = new enumerated_spec_init_c($1, $3, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | enumerated_specification enumerated_value
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "':=' missing in enumerated specification with initialization."); yynerrs++;}
+| enumerated_specification ASSIGN error
 	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':=' missing in enumerated specification with initialization.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no value defined in enumerated specification with initialization.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid value in enumerated specification with initialization."); yyclearin;}
+	 yyerrok;
 	}
 /* ERROR_CHECK_END */
 ;
@@ -2734,20 +2546,11 @@
 | prev_declared_enumerated_type_name
 /* ERROR_CHECK_BEGIN */
 | '(' ')'
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "no enumerated value list defined in enumerated specification.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "no enumerated value list defined in enumerated specification."); yynerrs++;}
 | '(' error ')'
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid enumerated value list defined in enumerated specification.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@2), locl(@2), "invalid enumerated value list defined in enumerated specification.");yyerrok;}
 | '(' enumerated_value_list error
-	{$$ = NULL;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "')' missing at the end of enumerated specification.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locl(@2), locf(@3), "')' missing at the end of enumerated specification."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -2759,13 +2562,11 @@
 	{$$ = $1; $$->add_element($3);}
 /* ERROR_CHECK_BEGIN */
 | enumerated_value_list enumerated_value
-	{$$ = $1;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "',' missing in enumerated value list.");
-	}
+	{$$ = $1; print_err_msg(locl(@1), locf(@2), "',' missing in enumerated value list.");}
 | enumerated_value_list ',' error
 	{$$ = $1;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid value in enumerated value list.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no value defined in enumerated value list.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid value in enumerated value list."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -2779,24 +2580,12 @@
 	{$$ = new enumerated_value_c($1, $3, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | prev_declared_enumerated_type_name any_identifier
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "'#' missing between enumerated type name and value in enumerated literal.");
-	}
-| prev_declared_enumerated_type_name error any_identifier
-	{$$ = NULL;
-	 print_err_msg(current_filename, locl(@1), locf(@3), "expecting '#' between enumerated type name and value in enumerated literal.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "'#' missing between enumerated type name and value in enumerated literal."); yynerrs++;}
 | prev_declared_enumerated_type_name '#' error
 	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid value for enumerated literal.");
-	 yyerrok;
-	}
-| identifier '#' any_identifier
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locf(@1), locl(@1), "unknown type name for typed literal.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no value defined for enumerated literal.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid value for enumerated literal."); yyclearin;}
+	 yyerrok;
 	}
 /* ERROR_CHECK_END */
 ;
@@ -2818,10 +2607,7 @@
 	}
 /* ERROR_CHECK_BEGIN */
 | identifier array_spec_init
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':' missing between data type name and specification in array type declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "':' missing between data type name and specification in array type declaration."); yynerrs++;}
 /* ERROR_CHECK_END */
 ;
 
@@ -2832,9 +2618,12 @@
 	{$$ = new array_spec_init_c($1, $3, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | array_specification array_initialization
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "':=' missing in array specification with initialization."); yynerrs++;}
+| array_specification ASSIGN error
 	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':=' missing in array specification with initialization.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no initial value defined in array specification with initialization.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid initial value in array specification with initialization."); yyclearin;}
+	 yyerrok;
 	}
 /* ERROR_CHECK_END */
 ;
@@ -2846,58 +2635,23 @@
 	{$$ = new array_specification_c($3, $6, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | ARRAY array_subrange_list ']' OF non_generic_type_name
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "'[' missing before subrange list in array specification.");
-	}
-| ARRAY error array_subrange_list ']' OF non_generic_type_name
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "expecting '[' after 'ARRAY' in array specification.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "'[' missing before subrange list in array specification."); yynerrs++;}
 | ARRAY '[' ']' OF non_generic_type_name
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "no subrange list defined in array specification.");
-	}
+	{$$ = NULL; print_err_msg(locl(@2), locf(@3), "no subrange list defined in array specification."); yynerrs++;}
 | ARRAY '[' error ']' OF non_generic_type_name
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid subrange list defined in array specification.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@3), locl(@3), "invalid subrange list defined in array specification."); yyerrok;}
 | ARRAY OF non_generic_type_name
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "no subrange list defined in array specification.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "no subrange list defined in array specification."); yynerrs++;}
 | ARRAY error OF non_generic_type_name
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid subrange list defined in array specification.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@2), locl(@2), "invalid subrange list defined in array specification."); yyerrok;}
 | ARRAY '[' array_subrange_list OF non_generic_type_name
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@3), locf(@4), "']' missing after subrange list in array specification.");
-	}
-| ARRAY '[' array_subrange_list error OF non_generic_type_name
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@4), locl(@4), "expecting '[' after subrange list in array specification.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locl(@3), locf(@4), "']' missing after subrange list in array specification."); yynerrs++;}
 | ARRAY '[' array_subrange_list ']' non_generic_type_name
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@4), locf(@5), "'OF' missing between subrange list and item type name in array specification.");
-	}
-| ARRAY '[' array_subrange_list ']' error non_generic_type_name
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@5), locl(@5), "expecting 'OF' between subrange list and item type name in array specification.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locl(@4), locf(@5), "'OF' missing between subrange list and item type name in array specification."); yynerrs++;}
 | ARRAY '[' array_subrange_list ']' OF error
 	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@6), locl(@6), "no item data type defined in array specification.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no item data type defined in array specification.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid item data type in array specification."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -2911,13 +2665,11 @@
 	{$$ = $1; $$->add_element($3);}
 /* ERROR_CHECK_BEGIN */
 | array_subrange_list subrange
-	{$$ = $1;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "',' missing in subrange list.");
-	}
+	{$$ = $1; print_err_msg(locl(@1), locf(@2), "',' missing in subrange list."); yynerrs++;}
 | array_subrange_list ',' error
 	{$$ = $1;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid subrange in subrange list.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no subrange defined in subrange list.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid subrange in subrange list."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -2929,20 +2681,11 @@
 	{$$ = $2;}
 /* ERROR_CHECK_BEGIN */
 | '[' ']'
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "no initial values list defined in array initialization.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "no initial values list defined in array initialization."); yynerrs++;}
 | '[' error ']'
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid initial values list defined in array initialization.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@2), locl(@2), "invalid initial values list defined in array initialization."); yyerrok;}
 | '[' array_initial_elements_list error
-	{$$ = NULL;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "']' missing at the end of array initialization.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locl(@2), locf(@3), "']' missing at the end of array initialization."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -2956,7 +2699,8 @@
 /* ERROR_CHECK_BEGIN 
 | array_initial_elements_list ',' error
 	{$$ = $1;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid array initial value in array initial values list.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no array initial value in array initial values list.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid array initial value in array initial values list."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -2968,17 +2712,11 @@
 | integer '(' ')'
 | integer '(' array_initial_element ')'
 	{$$ = new array_initial_elements_c($1, $3, locloc(@$));}
-/* ERROR_CHECK_BEGIN 
+/* ERROR_CHECK_BEGIN */
 | integer '(' error ')'
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid array initial value in array initial values list.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@3), locl(@3), "invalid array initial value in array initial values list."); yyerrok;}
 | integer '(' array_initial_element error
-	{$$ = NULL;
-	 print_err_msg(current_filename, locl(@3), locf(@4), "')' missing at the end of array initial value in array initial values list.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locl(@3), locf(@4), "')' missing at the end of array initial value in array initial values list."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -3000,10 +2738,7 @@
 	}
 /* ERROR_CHECK_BEGIN */
 | identifier structure_specification
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':' missing between data type name and specification in structure type declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "':' missing between data type name and specification in structure type declaration."); yynerrs++;}
 /* ERROR_CHECK_END */
 ;
 
@@ -3021,14 +2756,12 @@
 	{$$ = new initialized_structure_c($1, $3, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | prev_declared_structure_type_name structure_initialization
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "':=' missing in structure specification with initialization."); yynerrs++;}
+| prev_declared_structure_type_name ASSIGN error
 	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':=' missing in structure specification with initialization.");
-	}
-| identifier ASSIGN structure_initialization
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locf(@1), locl(@1), "unknown type name for structure specification with initialization.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no value defined in structure specification with initialization.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid value in structure specification with initialization."); yyclearin;}
+	 yyerrok;
 	}
 /* ERROR_CHECK_END */
 ;
@@ -3039,20 +2772,13 @@
 	{$$ = $2;}
 /* ERROR_CHECK_BEGIN */
 | STRUCT END_STRUCT
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "no structure element declared in structure type declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "no structure element declared in structure type declaration."); yynerrs++;}
 | STRUCT error structure_element_declaration_list END_STRUCT
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unexpected token after 'STRUCT' in structure type declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@2), locl(@2), "unexpected token after 'STRUCT' in structure type declaration."); yyerrok;}
+| STRUCT structure_element_declaration_list error END_OF_INPUT
+	{$$ = NULL; print_err_msg(locf(@1), locl(@1), "unclosed structure type declaration."); yyerrok;}
 | STRUCT error END_STRUCT
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unknown error in structure type declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@2), locl(@2), "unknown error in structure type declaration."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -3064,30 +2790,15 @@
 	{$$ = $1; $$->add_element($2);}
 /* ERROR_CHECK_BEGIN */
 | error ';'
-	{$$ = new structure_element_declaration_list_c(locloc(@$));
-	 print_err_msg(current_filename, locf(@1), locl(@1), "invalid structure element declaration.");
-	 yyerrok;
-	}
+	{$$ = new structure_element_declaration_list_c(locloc(@$)); print_err_msg(locf(@1), locl(@1), "invalid structure element declaration."); yyerrok;}
 | structure_element_declaration error
-	{$$ = new structure_element_declaration_list_c(locloc(@$));
-	 print_err_msg(current_filename, locl(@1), locf(@2), "';' missing at end of structure element declaration.");
-	 yyerrok;
-	}
+	{$$ = new structure_element_declaration_list_c(locloc(@$)); print_err_msg(locl(@1), locf(@2), "';' missing at end of structure element declaration."); yyerrok;}
 | structure_element_declaration_list structure_element_declaration error
-	{$$ = $1;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "';' missing at end of structure element declaration.");
-	 yyerrok;
-	}
+	{$$ = $1; print_err_msg(locl(@2), locf(@3), "';' missing at end of structure element declaration."); yyerrok;}
 | structure_element_declaration_list error ';'
-	{$$ = $1;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid structure element declaration.");
-	 yyerrok;
-	}
+	{$$ = $1; print_err_msg(locf(@2), locl(@2), "invalid structure element declaration."); yyerrok;}
 | structure_element_declaration_list ';'
-	{$$ = $1;
-	 yynerrs++;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unexpected ';' after structure element declaration.");
-	}
+	{$$ = $1; print_err_msg(locf(@2), locl(@2), "unexpected ';' after structure element declaration."); yynerrs++;}
 /* ERROR_CHECK_END */
 ;
 
@@ -3105,38 +2816,19 @@
 	{$$ = new structure_element_declaration_c($1, $3, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | structure_element_name simple_spec_init
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':' missing between structure element name and simple specification.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "':' missing between structure element name and simple specification."); yynerrs++;}
 | structure_element_name subrange_spec_init
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':' missing between structure element name and subrange specification.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "':' missing between structure element name and subrange specification."); yynerrs++;}
 | structure_element_name enumerated_spec_init
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':' missing between structure element name and enumerated specification.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "':' missing between structure element name and enumerated specification."); yynerrs++;}
 | structure_element_name array_spec_init
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':' missing between structure element name and array specification.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "':' missing between structure element name and array specification."); yynerrs++;}
 | structure_element_name initialized_structure
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':' missing between structure element name and structure specification.");
-	}
-| structure_element_name ':' identifier
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "unknown variable type defined in structure element declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "':' missing between structure element name and structure specification."); yynerrs++;}
 | structure_element_name ':' error
 	{$$ = NULL;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "no specification defined in structure element declaration.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no specification defined in structure element declaration.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid specification in structure element declaration."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -3151,15 +2843,9 @@
 	{$$ = $2;}
 /* ERROR_CHECK_BEGIN */
 | '(' error ')'
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid structure element initialization list in structure initialization.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@2), locl(@2), "invalid structure element initialization list in structure initialization."); yyerrok;}
 | '(' structure_element_initialization_list error
-	{$$ = NULL;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "expecting ')' at the end of structure element initialization list in structure initialization.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locl(@2), locf(@3), "expecting ')' at the end of structure element initialization list in structure initialization."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -3171,13 +2857,11 @@
 	{$$ = $1; $$->add_element($3);}
 /* ERROR_CHECK_BEGIN 
 | structure_element_initialization_list structure_element_initialization
-	{$$ = $1;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "',' missing in structure element initialization list in structure initialization.");
-	}
+	{$$ = $1; print_err_msg(locl(@1), locf(@2), "',' missing in structure element initialization list in structure initialization."); yynerrs++;}
 | structure_element_initialization_list ',' error
 	{$$ = $1;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid structure element initialization in structure initialization.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no structure element initialization defined in structure initialization.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid structure element initialization in structure initialization."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -3195,24 +2879,18 @@
 	{$$ = new structure_element_initialization_c($1, $3, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | structure_element_name constant
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "':=' missing in structure element initialization."); yynerrs++;}
+| structure_element_name enumerated_value
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "':=' missing in enumerated structure element initialization."); yynerrs++;}
+| structure_element_name array_initialization
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "':=' missing in array structure element initialization."); yynerrs++;}
+| structure_element_name structure_initialization
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "':=' missing in structured structure element initialization."); yynerrs++;}
+| structure_element_name ASSIGN error
 	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':=' missing in structure element initialization.");
-	}
-| structure_element_name enumerated_value
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':=' missing in enumerated structure element initialization.");
-	}
-| structure_element_name array_initialization
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':=' missing in array structure element initialization.");
-	}
-| structure_element_name structure_initialization
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':=' missing in structured structure element initialization.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no initial value defined in structured structure element initialization.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid initial value in structured structure element initialization."); yyclearin;}
+	 yyerrok;
 	}
 /* ERROR_CHECK_END */
 ;
@@ -3421,50 +3099,29 @@
 	{$$ = new input_declarations_c(new non_retain_option_c(locloc(@2)), $3, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | VAR_INPUT END_VAR
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "no variable declared in input variable(s) declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "no variable declared in input variable(s) declaration."); yynerrs++;}
 | VAR_INPUT RETAIN END_VAR
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "no variable declared in retentive input variable(s) declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@2), locf(@3), "no variable declared in retentive input variable(s) declaration."); yynerrs++;}
 | VAR_INPUT NON_RETAIN END_VAR
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "no variable declared in non-retentive input variable(s) declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@2), locf(@3), "no variable declared in non-retentive input variable(s) declaration."); yynerrs++;}
 | VAR_INPUT error input_declaration_list END_VAR
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unexpected token after 'VAR_INPUT' in input variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@2), locl(@2), "unexpected token after 'VAR_INPUT' in input variable(s) declaration."); yyerrok;}
 | VAR_INPUT RETAIN error input_declaration_list END_VAR
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "unexpected token after 'RETAIN' in retentive input variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@3), locl(@3), "unexpected token after 'RETAIN' in retentive input variable(s) declaration."); yyerrok;}
 | VAR_INPUT NON_RETAIN error input_declaration_list END_VAR
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "unexpected token after 'NON_RETAIN' in non-retentive input variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@3), locl(@3), "unexpected token after 'NON_RETAIN' in non-retentive input variable(s) declaration."); yyerrok;}
+| VAR_INPUT input_declaration_list error END_OF_INPUT
+	{$$ = NULL; print_err_msg(locf(@1), locl(@1), "unclosed input variable(s) declaration."); yyerrok;}
+| VAR_INPUT RETAIN input_declaration_list error END_OF_INPUT
+	{$$ = NULL; print_err_msg(locf(@1), locl(@2), "unclosed retentive input variable(s) declaration."); yyerrok;}
+| VAR_INPUT NON_RETAIN input_declaration_list error END_OF_INPUT
+	{$$ = NULL; print_err_msg(locf(@1), locl(@2), "unclosed non-retentive input variable(s) declaration."); yyerrok;}
 | VAR_INPUT error END_VAR
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unknown error in input variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@2), locl(@2), "unknown error in input variable(s) declaration."); yyerrok;}
 | VAR_INPUT RETAIN error END_VAR
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "unknown error in retentive input variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@3), locl(@3), "unknown error in retentive input variable(s) declaration."); yyerrok;}
 | VAR_INPUT NON_RETAIN error END_VAR
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "unknown error in non-retentive input variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@3), locl(@3), "unknown error in non-retentive input variable(s) declaration."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -3476,30 +3133,15 @@
 	{$$ = $1; $$->add_element($2);}
 /* ERROR_CHECK_BEGIN */
 | error ';'
-	{$$ = new input_declaration_list_c(locloc(@$));
-	 print_err_msg(current_filename, locf(@1), locl(@1), "invalid input variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = new input_declaration_list_c(locloc(@$)); print_err_msg(locf(@1), locl(@1), "invalid input variable(s) declaration."); yyerrok;}
 | input_declaration error
-	{$$ = new input_declaration_list_c(locloc(@$));
-	 print_err_msg(current_filename, locl(@1), locf(@2), "';' missing at end of input variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = new input_declaration_list_c(locloc(@$)); print_err_msg(locl(@1), locf(@2), "';' missing at end of input variable(s) declaration."); yyerrok;}
 | input_declaration_list input_declaration error
-	{$$ = $1;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "';' missing at end of input variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = $1; print_err_msg(locl(@2), locf(@3), "';' missing at end of input variable(s) declaration."); yyerrok;}
 | input_declaration_list error ';'
-	{$$ = $1;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid input variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = $1; print_err_msg(locf(@2), locl(@2), "invalid input variable(s) declaration."); yyerrok;}
 | input_declaration_list ';'
-	{$$ = $1;
-	 yynerrs++;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unexpected ';' after input variable(s) declaration.");
-	}
+	{$$ = $1; print_err_msg(locf(@2), locl(@2), "unexpected ';' after input variable(s) declaration."); yynerrs++;}
 /* ERROR_CHECK_END */
 ;
 
@@ -3517,30 +3159,15 @@
 	{$$ = new edge_declaration_c(new falling_edge_option_c(locloc(@3)), $1, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | var1_list BOOL R_EDGE
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':' missing between variable list and specification.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "':' missing between variable list and specification."); yynerrs++;}
 | var1_list BOOL F_EDGE
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':' missing between variable list and specification.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "':' missing between variable list and specification."); yynerrs++;}
 | var1_list ':' BOOL R_EDGE F_EDGE
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locf(@5), locl(@5), "'R_EDGE' and 'F_EDGE' can't be present at the same time in edge declaration.");
-	}
+	{$$ = NULL; print_err_msg(locf(@5), locl(@5), "'R_EDGE' and 'F_EDGE' can't be present at the same time in edge declaration."); yynerrs++;}
 | var1_list ':' R_EDGE
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "'BOOL' missing in edge declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@2), locf(@3), "'BOOL' missing in edge declaration."); yynerrs++;}
 | var1_list ':' F_EDGE
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "'BOOL' missing in edge declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@2), locf(@3), "'BOOL' missing in edge declaration."); yynerrs++;}
 /* ERROR_CHECK_END */
 ;
 
@@ -3565,28 +3192,15 @@
 	{$$ = new var1_init_decl_c($1, $3, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | var1_list simple_spec_init
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':' missing between variable list and simple specification.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "':' missing between variable list and simple specification."); yynerrs++;}
 | var1_list subrange_spec_init
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':' missing between variable list and subrange specification.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "':' missing between variable list and subrange specification."); yynerrs++;}
 | var1_list enumerated_spec_init
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':' missing between variable list and enumerated specification.");
-	}
-| var1_list ':' identifier
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "unknown variable type defined in variable declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "':' missing between variable list and enumerated specification."); yynerrs++;}
 | var1_list ':' error
 	{$$ = NULL;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "no specification defined in variable declaration.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no specification defined in variable declaration.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid specification in variable declaration."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -3604,13 +3218,11 @@
 	}
 /* ERROR_CHECK_BEGIN */
 | var1_list variable_name
-	{$$ = $1;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "',' missing in variable list.");
-	}
+	{$$ = $1; print_err_msg(locl(@1), locf(@2), "',' missing in variable list."); yynerrs++;}
 | var1_list ',' error
 	{$$ = $1;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unexpected ',' in variable declaration.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no variable name defined in variable declaration.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid variable name in variable declaration."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -3623,10 +3235,7 @@
 	{$$ = new array_var_init_decl_c($1, $3, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | var1_list array_spec_init
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':' missing between variable list and array specification.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "':' missing between variable list and array specification."); yynerrs++;}
 /* ERROR_CHECK_END */
 ;
 
@@ -3636,10 +3245,7 @@
 	{$$ = new structured_var_init_decl_c($1, $3, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | var1_list initialized_structure
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':' missing between variable list and structured specification.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "':' missing between variable list and structured specification."); yynerrs++;}
 /* ERROR_CHECK_END */
 ;
 
@@ -3658,18 +3264,13 @@
 	{$$ = new fb_name_decl_c($1, $2, $4, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | fb_name_list_with_colon ASSIGN structure_initialization
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "no function block type name defined in function block declaration with initialization.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "no function block type name defined in function block declaration with initialization."); yynerrs++;}
 | fb_name_list_with_colon function_block_type_name structure_initialization
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "':=' missing in function block declaration with initialization.");
-	}
+	{$$ = NULL; print_err_msg(locl(@2), locf(@3), "':=' missing in function block declaration with initialization."); yynerrs++;}
 | fb_name_list_with_colon function_block_type_name ASSIGN error
 	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@4), locl(@4), "invalid initialization in function block declaration.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@3), locf(@4), "no initialization defined in function block declaration.");}
+	 else {print_err_msg(locf(@4), locl(@4), "invalid initialization in function block declaration."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -3737,50 +3338,29 @@
 	{$$ = new output_declarations_c(new non_retain_option_c(locloc(@2)), $3, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | VAR_OUTPUT END_VAR
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "no variable declared in output variable(s) declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "no variable declared in output variable(s) declaration."); yynerrs++;}
 | VAR_OUTPUT RETAIN END_VAR
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "no variable declared in retentive output variable(s) declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@2), locf(@3), "no variable declared in retentive output variable(s) declaration."); yynerrs++;}
 | VAR_OUTPUT NON_RETAIN END_VAR
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "no variable declared in non-retentive output variable(s) declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@2), locf(@3), "no variable declared in non-retentive output variable(s) declaration."); yynerrs++;}
 | VAR_OUTPUT error var_init_decl_list END_VAR
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unexpected token after 'VAR_OUPUT' in output variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@2), locl(@2), "unexpected token after 'VAR_OUPUT' in output variable(s) declaration."); yyerrok;}
 | VAR_OUTPUT RETAIN error var_init_decl_list END_VAR
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "unexpected token after 'RETAIN' in retentive output variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@3), locl(@3), "unexpected token after 'RETAIN' in retentive output variable(s) declaration."); yyerrok;}
 | VAR_OUTPUT NON_RETAIN error var_init_decl_list END_VAR
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "unexpected token after 'NON_RETAIN' in non-retentive output variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@3), locl(@3), "unexpected token after 'NON_RETAIN' in non-retentive output variable(s) declaration."); yyerrok;}
+| VAR_OUTPUT var_init_decl_list error END_OF_INPUT
+	{$$ = NULL; print_err_msg(locf(@1), locl(@1), "unclosed output variable(s) declaration."); yyerrok;}
+| VAR_OUTPUT RETAIN var_init_decl_list error END_OF_INPUT
+	{$$ = NULL; print_err_msg(locf(@1), locl(@2), "unclosed retentive output variable(s) declaration."); yyerrok;}
+| VAR_OUTPUT NON_RETAIN var_init_decl_list error END_OF_INPUT
+	{$$ = NULL; print_err_msg(locf(@1), locl(@2), "unclosed non-retentive output variable(s) declaration."); yyerrok;}
 | VAR_OUTPUT error END_VAR
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unknown error in output variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@2), locl(@2), "unknown error in output variable(s) declaration."); yyerrok;}
 | VAR_OUTPUT RETAIN error END_VAR
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "unknown error in retentive output variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@3), locl(@3), "unknown error in retentive output variable(s) declaration."); yyerrok;}
 | VAR_OUTPUT NON_RETAIN error END_VAR
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "unknown error in non-retentive output variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@3), locl(@3), "unknown error in non-retentive output variable(s) declaration."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -3791,15 +3371,13 @@
 	{$$ = new input_output_declarations_c($2, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | VAR_IN_OUT END_VAR
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "no variable declared in in_out variable(s) declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "no variable declared in in_out variable(s) declaration."); yynerrs++;}
+| VAR_IN_OUT error var_declaration_list END_VAR
+	{$$ = NULL; print_err_msg(locf(@2), locl(@2), "unexpected token after 'VAR_IN_OUT' in in_out variable(s) declaration."); yyerrok;}
+| VAR_IN_OUT var_declaration_list error END_OF_INPUT
+	{$$ = NULL; print_err_msg(locf(@1), locl(@1), "unclosed in_out variable(s) declaration."); yyerrok;}
 | VAR_IN_OUT error END_VAR
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unknown error in in_out variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@2), locl(@2), "unknown error in in_out variable(s) declaration."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -3813,30 +3391,15 @@
 	{$$ = $1; $$->add_element($2);}
 /* ERROR_CHECK_BEGIN */
 | error ';'
-	{$$ = new var_declaration_list_c(locloc(@$));
-	 print_err_msg(current_filename, locf(@1), locl(@1), "invalid variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = new var_declaration_list_c(locloc(@$)); print_err_msg(locf(@1), locl(@1), "invalid variable(s) declaration."); yyerrok;}
 | var_declaration error
-	{$$ = new var_declaration_list_c(locloc(@$));
-	 print_err_msg(current_filename, locl(@1), locf(@2), "';' missing at end of variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = new var_declaration_list_c(locloc(@$)); print_err_msg(locl(@1), locf(@2), "';' missing at end of variable(s) declaration."); yyerrok;}
 | var_declaration_list var_declaration error
-	{$$ = $1;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "';' missing at end of variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = $1; print_err_msg(locl(@2), locf(@3), "';' missing at end of variable(s) declaration."); yyerrok;}
 | var_declaration_list error ';'
-	{$$ = $1;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = $1; print_err_msg(locf(@2), locl(@2), "invalid variable(s) declaration."); yyerrok;}
 | var_declaration_list ';'
-	{$$ = $1;
-	 yynerrs++;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unexpected ';' after variable(s) declaration.");
-	}
+	{$$ = $1; print_err_msg(locf(@2), locl(@2), "unexpected ';' after variable(s) declaration."); yynerrs++;}
 /* ERROR_CHECK_END */
 ;
 
@@ -3863,20 +3426,11 @@
 	{$$ = new var1_init_decl_c($1, $3, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | var1_list simple_specification
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':' missing between variable list and simple specification.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "':' missing between variable list and simple specification."); yynerrs++;}
 | var1_list subrange_specification
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':' missing between variable list and subrange specification.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "':' missing between variable list and subrange specification."); yynerrs++;}
 | var1_list enumerated_specification
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':' missing between variable list and enumerated specification.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "':' missing between variable list and enumerated specification."); yynerrs++;}
 /* ERROR_CHECK_END */
 ;
 
@@ -3887,10 +3441,7 @@
 	{$$ = new array_var_declaration_c($1, $3, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | var1_list array_specification
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':' missing between variable list and array specification.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "':' missing between variable list and array specification."); yynerrs++;}
 /* ERROR_CHECK_END */
 ;
 
@@ -3899,15 +3450,7 @@
 	{$$ = new structured_var_declaration_c($1, $3, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | var1_list prev_declared_structure_type_name
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':' missing between variable list and structured specification.");
-	}
-| var1_list ':' identifier
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "unknown type name in structured variable declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "':' missing between variable list and structured specification."); yynerrs++;}
 /* ERROR_CHECK_END */
 ;
 
@@ -3919,35 +3462,21 @@
 	{$$ = new var_declarations_c(new constant_option_c(locloc(@2)), $3, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | VAR END_VAR
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "no variable declared in variable(s) declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "no variable declared in variable(s) declaration."); yynerrs++;}
 | VAR CONSTANT END_VAR
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "no variable declared in constant variable(s) declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@2), locf(@3), "no variable declared in constant variable(s) declaration."); yynerrs++;}
 | VAR error var_init_decl_list END_VAR
-	{$$ = NULL;
-	 print_err_msg(current_filename, locl(@1), locf(@3), "unexpected token after 'VAR' in variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@3), "unexpected token after 'VAR' in variable(s) declaration."); yyerrok;}
 | VAR CONSTANT error var_init_decl_list END_VAR
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "unexpected token after 'CONSTANT' in constant variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@3), locl(@3), "unexpected token after 'CONSTANT' in constant variable(s) declaration."); yyerrok;}
+| VAR var_init_decl_list error END_OF_INPUT
+	{$$ = NULL; print_err_msg(locf(@1), locl(@1), "unclosed variable(s) declaration."); yyerrok;}
+| VAR CONSTANT var_init_decl_list error END_OF_INPUT
+	{$$ = NULL; print_err_msg(locf(@1), locl(@2), "unclosed constant variable(s) declaration."); yyerrok;}
 | VAR error END_VAR
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unknown error in variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@2), locl(@2), "unknown error in variable(s) declaration."); yyerrok;}
 | VAR CONSTANT error END_VAR
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "unknown error in constant variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@3), locl(@3), "unknown error in constant variable(s) declaration."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -3957,20 +3486,13 @@
 	{$$ = new retentive_var_declarations_c($3, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | VAR RETAIN END_VAR
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "no variable declared in retentive variable(s) declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@2), locf(@3), "no variable declared in retentive variable(s) declaration."); yynerrs++;}
 | VAR RETAIN error var_init_decl_list END_VAR
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "unexpected token after 'RETAIN' in retentive variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@3), locl(@3), "unexpected token after 'RETAIN' in retentive variable(s) declaration."); yyerrok;}
+| VAR RETAIN var_init_decl_list error END_OF_INPUT
+	{$$ = NULL; print_err_msg(locf(@1), locl(@2), "unclosed retentive variable(s) declaration."); yyerrok;}
 | VAR RETAIN error END_VAR
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "unknown error in retentive variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@3), locl(@3), "unknown error in retentive variable(s) declaration."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -3986,35 +3508,25 @@
 	{$$ = new located_var_declarations_c(new non_retain_option_c(locloc(@2)), $3, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | VAR NON_RETAIN END_VAR
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "no variable declared in non-retentive located variable(s) declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@2), locf(@3), "no variable declared in non-retentive located variable(s) declaration."); yynerrs++;}
 | VAR error located_var_decl_list END_VAR
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unexpected token after 'VAR' in located variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@2), locl(@2), "unexpected token after 'VAR' in located variable(s) declaration."); yyerrok;}
 | VAR CONSTANT error located_var_decl_list END_VAR
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "unexpected token after 'CONSTANT' in constant located variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@3), locl(@3), "unexpected token after 'CONSTANT' in constant located variable(s) declaration."); yyerrok;}
 | VAR RETAIN error located_var_decl_list END_VAR
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "unexpected token after 'RETAIN' in retentive located variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@3), locl(@3), "unexpected token after 'RETAIN' in retentive located variable(s) declaration."); yyerrok;}
 | VAR NON_RETAIN error located_var_decl_list END_VAR
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "unexpected token after 'NON_RETAIN' in non-retentive located variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@3), locl(@3), "unexpected token after 'NON_RETAIN' in non-retentive located variable(s) declaration."); yyerrok;}
+| VAR located_var_decl_list error END_OF_INPUT
+	{$$ = NULL; print_err_msg(locf(@1), locl(@1), "unclosed located variable(s) declaration."); yyerrok;}
+| VAR CONSTANT located_var_decl_list error END_OF_INPUT
+	{$$ = NULL; print_err_msg(locf(@1), locl(@2), "unclosed constant located variable(s) declaration."); yyerrok;}
+| VAR RETAIN located_var_decl_list error END_OF_INPUT
+	{$$ = NULL; print_err_msg(locf(@1), locl(@2), "unclosed retentive located variable(s) declaration."); yyerrok;}
+| VAR NON_RETAIN located_var_decl_list error END_OF_INPUT
+	{$$ = NULL; print_err_msg(locf(@1), locl(@2), "unclosed non-retentive located variable(s) declaration."); yyerrok;}
 | VAR NON_RETAIN error END_VAR
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "unknown error in non retentive variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@3), locl(@3), "unknown error in non retentive variable(s) declaration."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -4027,30 +3539,15 @@
 	{$$ = $1; $$->add_element($2);}
 /* ERROR_CHECK_BEGIN */
 | error ';'
-	{$$ = new located_var_decl_list_c(locloc(@$));
-	 print_err_msg(current_filename, locf(@1), locl(@1), "invalid located variable declaration.");
-	 yyerrok;
-	}
+	{$$ = new located_var_decl_list_c(locloc(@$)); print_err_msg(locf(@1), locl(@1), "invalid located variable declaration."); yyerrok;}
 | located_var_decl error
-	{$$ = new located_var_decl_list_c(locloc(@$));
-	 print_err_msg(current_filename, locl(@1), locf(@2), "';' missing at end of located variable declaration.");
-	 yyerrok;
-	}
+	{$$ = new located_var_decl_list_c(locloc(@$)); print_err_msg(locl(@1), locf(@2), "';' missing at end of located variable declaration."); yyerrok;}
 | located_var_decl_list located_var_decl error
-	{$$ = $1;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "';' missing at end of located variable declaration.");
-	 yyerrok;
-	}
+	{$$ = $1; print_err_msg(locl(@2), locf(@3), "';' missing at end of located variable declaration."); yyerrok;}
 | located_var_decl_list error ';'
-	{$$ = $1;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid located variable declaration.");
-	 yyerrok;
-	}
+	{$$ = $1; print_err_msg(locf(@2), locl(@2), "invalid located variable declaration."); yyerrok;}
 | located_var_decl_list ';'
-	{$$ = $1;
-	 yynerrs++;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unexpected ';' after located variable declaration.");
-	}
+	{$$ = $1; print_err_msg(locf(@2), locl(@2), "unexpected ';' after located variable declaration."); yynerrs++;}
 /* ERROR_CHECK_END */
 ;
 
@@ -4064,23 +3561,19 @@
 	{$$ = new located_var_decl_c(NULL, $1, $3, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | variable_name location located_var_spec_init
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':' missing between located variable location and specification.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "':' missing between located variable location and specification."); yynerrs++;}
 | location located_var_spec_init
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':' missing between located variable location and specification.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "':' missing between located variable location and specification."); yynerrs++;}
 | variable_name location ':' error
 	{$$ = NULL;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "no specification defined in located variable declaration.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no specification defined in located variable declaration.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid specification in located variable declaration."); yyclearin;}
 	 yyerrok;
 	}
 | location ':' error
 	{$$ = NULL;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "no specification defined in located variable declaration.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no specification defined in located variable declaration.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid specification in located variable declaration."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -4096,35 +3589,21 @@
 	{$$ = new external_var_declarations_c(new constant_option_c(locloc(@2)), $3, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | VAR_EXTERNAL END_VAR
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "no variable declared in external variable(s) declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "no variable declared in external variable(s) declaration."); yynerrs++;}
 | VAR_EXTERNAL CONSTANT END_VAR
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "no variable declared in constant external variable(s) declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@2), locf(@3), "no variable declared in constant external variable(s) declaration."); yynerrs++;}
 | VAR_EXTERNAL error external_declaration_list END_VAR
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unexpected token after 'VAR_EXTERNAL' in external variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@2), locl(@2), "unexpected token after 'VAR_EXTERNAL' in external variable(s) declaration."); yyerrok;}
 | VAR_EXTERNAL CONSTANT error external_declaration_list END_VAR
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "unexpected token after 'CONSTANT' in constant external variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@3), locl(@3), "unexpected token after 'CONSTANT' in constant external variable(s) declaration."); yyerrok;}
+| VAR_EXTERNAL external_declaration_list error END_OF_INPUT
+	{$$ = NULL; print_err_msg(locf(@1), locl(@1), "unclosed external variable(s) declaration."); yyerrok;}
+| VAR_EXTERNAL CONSTANT external_declaration_list error END_OF_INPUT
+	{$$ = NULL; print_err_msg(locf(@1), locl(@2), "unclosed constant external variable(s) declaration."); yyerrok;}
 | VAR_EXTERNAL error END_VAR
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unknown error in external variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@2), locl(@2), "unknown error in external variable(s) declaration."); yyerrok;}
 | VAR_EXTERNAL CONSTANT error END_VAR
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "unknown error in constant external variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@3), locl(@3), "unknown error in constant external variable(s) declaration."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -4136,30 +3615,15 @@
 	{$$ = $1; $$->add_element($2);}
 /* ERROR_CHECK_BEGIN */
 | error ';'
-	{$$ = new external_declaration_list_c(locloc(@$));
-	 print_err_msg(current_filename, locf(@1), locl(@1), "invalid external variable declaration.");
-	 yyerrok;
-	}
+	{$$ = new external_declaration_list_c(locloc(@$)); print_err_msg(locf(@1), locl(@1), "invalid external variable declaration."); yyerrok;}
 | external_declaration error
-	{$$ = new external_declaration_list_c(locloc(@$));
-	 print_err_msg(current_filename, locl(@1), locf(@2), "';' missing at end of external variable declaration.");
-	 yyerrok;
-	}
+	{$$ = new external_declaration_list_c(locloc(@$)); print_err_msg(locl(@1), locf(@2), "';' missing at end of external variable declaration."); yyerrok;}
 | external_declaration_list external_declaration error
-	{$$ = $1;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "';' missing at end of external variable declaration.");
-	 yyerrok;
-	}
+	{$$ = $1; print_err_msg(locl(@2), locf(@3), "';' missing at end of external variable declaration."); yyerrok;}
 | external_declaration_list error ';'
-	{$$ = $1;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid external variable declaration.");
-	 yyerrok;
-	}
+	{$$ = $1; print_err_msg(locf(@2), locl(@2), "invalid external variable declaration."); yyerrok;}
 | external_declaration_list ';'
-	{$$ = $1;
-	 yynerrs++;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unexpected ';' after external variable declaration.");
-	}
+	{$$ = $1; print_err_msg(locf(@2), locl(@2), "unexpected ';' after external variable declaration."); yynerrs++;}
 /* ERROR_CHECK_END */
 ;
 
@@ -4191,43 +3655,21 @@
 	}
 /* ERROR_CHECK_BEGIN */
 | global_var_name simple_specification
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':' missing between external variable name and simple specification.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "':' missing between external variable name and simple specification."); yynerrs++;}
 | global_var_name subrange_specification
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':' missing between external variable name and subrange specification.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "':' missing between external variable name and subrange specification."); yynerrs++;}
 | global_var_name enumerated_specification
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':' missing between external variable name and enumerated specification.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "':' missing between external variable name and enumerated specification."); yynerrs++;}
 | global_var_name array_specification
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':' missing between external variable name and array specification.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "':' missing between external variable name and array specification."); yynerrs++;}
 | global_var_name prev_declared_structure_type_name
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':' missing between external variable name and structured specification.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "':' missing between external variable name and structured specification."); yynerrs++;}
 | global_var_name function_block_type_name
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':' missing between external variable name and function block type specification.");
-	}
-| global_var_name ':' identifier
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "unknown type name in external variable declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "':' missing between external variable name and function block type specification."); yynerrs++;}
 | global_var_name ':' error
 	{$$ = NULL;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "no specification defined in external variable declaration.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no specification defined in external variable declaration.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid specification in external variable declaration."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -4246,50 +3688,29 @@
 	{$$ = new global_var_declarations_c(new retain_option_c(locloc(@2)), $3, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | VAR_GLOBAL END_VAR
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "no variable declared in global variable(s) declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "no variable declared in global variable(s) declaration."); yynerrs++;}
 | VAR_GLOBAL CONSTANT END_VAR
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "no variable declared in constant global variable(s) declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@2), locf(@3), "no variable declared in constant global variable(s) declaration."); yynerrs++;}
 | VAR_GLOBAL RETAIN END_VAR
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "no variable declared in retentive global variable(s) declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@2), locf(@3), "no variable declared in retentive global variable(s) declaration."); yynerrs++;}
 | VAR_GLOBAL error global_var_decl_list END_VAR
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unexpected token after 'VAR_GLOBAL' in global variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@2), locl(@2), "unexpected token after 'VAR_GLOBAL' in global variable(s) declaration."); yyerrok;}
 | VAR_GLOBAL CONSTANT error global_var_decl_list END_VAR
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "unexpected token after 'CONSTANT' in constant global variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@3), locl(@3), "unexpected token after 'CONSTANT' in constant global variable(s) declaration."); yyerrok;}
 | VAR_GLOBAL RETAIN error global_var_decl_list END_VAR
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "unexpected token after 'RETAIN' in retentive global variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@3), locl(@3), "unexpected token after 'RETAIN' in retentive global variable(s) declaration."); yyerrok;}
+| VAR_GLOBAL global_var_decl_list error END_OF_INPUT
+  {$$ = NULL; print_err_msg(locf(@1), locl(@1), "unclosed global variable(s) declaration."); yyerrok;}
+| VAR_GLOBAL CONSTANT global_var_decl_list error END_OF_INPUT
+  {$$ = NULL; print_err_msg(locf(@1), locl(@2), "unclosed constant global variable(s) declaration."); yyerrok;}
+| VAR_GLOBAL RETAIN global_var_decl_list error END_OF_INPUT
+  {$$ = NULL; print_err_msg(locf(@1), locl(@2), "unclosed retentive global variable(s) declaration."); yyerrok;}
 | VAR_GLOBAL error END_VAR
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unknown error in global variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@2), locl(@2), "unknown error in global variable(s) declaration."); yyerrok;}
 | VAR_GLOBAL CONSTANT error END_VAR
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "unknown error in constant global variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@3), locl(@3), "unknown error in constant global variable(s) declaration."); yyerrok;}
 | VAR_GLOBAL RETAIN error END_VAR
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "unknown error in constant global variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@3), locl(@3), "unknown error in constant global variable(s) declaration."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -4302,30 +3723,15 @@
 	{$$ = $1; $$->add_element($2);}
 /* ERROR_CHECK_BEGIN */
 | error ';'
-	{$$ = new global_var_decl_list_c(locloc(@$));
-	 print_err_msg(current_filename, locf(@1), locl(@1), "invalid global variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = new global_var_decl_list_c(locloc(@$)); print_err_msg(locf(@1), locl(@1), "invalid global variable(s) declaration."); yyerrok;}
 | global_var_decl error
-	{$$ = new global_var_decl_list_c(locloc(@$));
-	 print_err_msg(current_filename, locl(@1), locf(@2), "';' missing at end of global variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = new global_var_decl_list_c(locloc(@$)); print_err_msg(locl(@1), locf(@2), "';' missing at end of global variable(s) declaration."); yyerrok;}
 | global_var_decl_list global_var_decl error
-	{$$ = $1;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "';' missing at end of global variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = $1; print_err_msg(locl(@1), locf(@2), "';' missing at end of global variable(s) declaration."); yyerrok;}
 | global_var_decl_list error ';'
-	{$$ = $1;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid global variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = $1; print_err_msg(locf(@2), locl(@2), "invalid global variable(s) declaration."); yyerrok;}
 | global_var_decl_list ';'
-	{$$ = $1;
-	 yynerrs++;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unexpected ';' after global variable(s) declaration.");
-	}
+	{$$ = $1; print_err_msg(locf(@2), locl(@2), "unexpected ';' after global variable(s) declaration."); yynerrs++;}
 /* ERROR_CHECK_END */
 ;
 
@@ -4341,28 +3747,15 @@
 	{$$ = new global_var_decl_c($1, $3, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | global_var_list located_var_spec_init
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':' missing between global variable list and type specification.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "':' missing between global variable list and type specification."); yynerrs++;}
 | global_var_name location located_var_spec_init
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':' missing between global variable specification and type specification.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "':' missing between global variable specification and type specification."); yynerrs++;}
 | global_var_spec function_block_type_name
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':' missing between global variable specification and function block type specification.");
-	}
-| global_var_spec ':' identifier
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "unknown variable type defined in global variable declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "':' missing between global variable specification and function block type specification."); yynerrs++;}
 | global_var_spec ':' error
 	{$$ = NULL;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "no specification defined in global variable declaration.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no specification defined in global variable declaration.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid specification in global variable declaration."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -4397,7 +3790,8 @@
 /* ERROR_CHECK_BEGIN */
 | AT error
 	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid location in location declaration.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@1), locf(@2), "no location defined in location declaration.");}
+	 else {print_err_msg(locf(@2), locl(@2), "invalid location in global location declaration."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -4416,13 +3810,11 @@
 	}
 /* ERROR_CHECK_BEGIN */
 | global_var_list global_var_name
-	{$$ = new global_var_list_c(locloc(@$));
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "',' missing in global variable list.");
-	}
+	{$$ = new global_var_list_c(locloc(@$)); print_err_msg(locl(@1), locf(@2), "',' missing in global variable list."); yynerrs++;}
 | global_var_list ',' error
 	{$$ = $1;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unexpected ',' in global variable declaration.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no variable name defined in global variable declaration.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid variable name in global variable declaration."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -4440,10 +3832,7 @@
 	{$$ = new single_byte_string_var_declaration_c($1, $3, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | var1_list single_byte_string_spec
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':' missing between variable list and string type specification.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "':' missing between variable list and string type specification."); yynerrs++;}
 /* ERROR_CHECK_END */
 ;
 
@@ -4493,43 +3882,21 @@
 	{$$ = new single_byte_string_spec_c($3, $6, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | STRING '[' error ']'
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid length value for limited string type specification.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@3), locl(@3), "invalid length value for limited string type specification."); yyerrok;}
 | STRING '[' error ']' ASSIGN single_byte_character_string
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid length value for limited string type specification.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@3), locl(@3), "invalid length value for limited string type specification."); yyerrok;}
 | STRING '[' ']'
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "missing length value for limited string type specification.");
-	}
+	{$$ = NULL; print_err_msg(locl(@2), locf(@3), "missing length value for limited string type specification."); yynerrs++;}
 | STRING '[' ']' ASSIGN single_byte_character_string
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "missing length value for limited string type specification.");
-	}
+	{$$ = NULL; print_err_msg(locl(@2), locf(@3), "missing length value for limited string type specification."); yynerrs++;}
 | STRING '[' integer error
-	{$$ = NULL;
-	 print_err_msg(current_filename, locl(@3), locf(@4), "expecting ']' after length definition for limited string type specification.");
-	 yyerrok;
-	}
-| STRING '[' integer error ASSIGN single_byte_character_string
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@4), locl(@4), "expecting ']' after length definition for limited string type specification.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locl(@3), locf(@4), "expecting ']' after length definition for limited string type specification."); yyerrok;}
 | STRING '[' integer ']' single_byte_character_string
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@4), locf(@5), "':=' missing before limited string type initialization.");
-	}
+	{$$ = NULL; print_err_msg(locl(@4), locf(@5), "':=' missing before limited string type initialization."); yynerrs++;}
 | STRING '[' integer ']' ASSIGN error
 	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@6), locl(@6), "invalid value for limited string type initialization.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@5), locf(@6), "no initial value defined in limited string type initialization.");}
+	 else {print_err_msg(locf(@6), locl(@6), "invalid initial value in limited string type initialization."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -4541,10 +3908,7 @@
 	{$$ = new double_byte_string_var_declaration_c($1, $3, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | var1_list double_byte_string_spec
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':' missing between variable list and double byte string type specification.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "':' missing between variable list and double byte string type specification."); yynerrs++;}
 /* ERROR_CHECK_END */
 ;
 
@@ -4562,43 +3926,21 @@
 	{$$ = new double_byte_string_spec_c($3, $6, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | WSTRING '[' error ']'
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid length value for limited double byte string type specification.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@3), locl(@3), "invalid length value for limited double byte string type specification."); yyerrok;}
 | WSTRING '[' error ']' ASSIGN single_byte_character_string
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid length value for limited double byte string type specification.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@3), locl(@3), "invalid length value for limited double byte string type specification."); yyerrok;}
 | WSTRING '[' ']'
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "missing length value for limited double byte string type specification.");
-	}
+	{$$ = NULL; print_err_msg(locl(@2), locf(@3), "missing length value for limited double byte string type specification."); yynerrs++;}
 | WSTRING '[' ']' ASSIGN single_byte_character_string
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "missing length value for limited double byte string type specification.");
-	}
+	{$$ = NULL; print_err_msg(locl(@2), locf(@3), "missing length value for limited double byte string type specification."); yynerrs++;}
 | WSTRING '[' integer error
-	{$$ = NULL;
-	 print_err_msg(current_filename, locl(@3), locf(@4), "expecting ']' after length definition for limited double byte string type specification.");
-	 yyerrok;
-	}
-| WSTRING '[' integer error ASSIGN single_byte_character_string
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@4), locl(@4), "expecting ']' after length definition for limited double byte string type specification.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locl(@3), locf(@4), "expecting ']' after length definition for limited double byte string type specification."); yyerrok;}
 | WSTRING '[' integer ']' single_byte_character_string
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@4), locf(@5), "':=' missing before limited double byte string type initialization.");
-	}
+	{$$ = NULL; print_err_msg(locl(@4), locf(@5), "':=' missing before limited double byte string type initialization."); yynerrs++;}
 | WSTRING '[' integer ']' ASSIGN error
 	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@6), locl(@6), "invalid value for limited double byte string type initialization.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@5), locf(@6), "no initial value defined double byte in limited string type initialization.");}
+	 else {print_err_msg(locf(@6), locl(@6), "invalid initial value in limited double byte string type initialization."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -4614,21 +3956,18 @@
 | VAR NON_RETAIN incompl_located_var_decl_list END_VAR
 	{$$ = new incompl_located_var_declarations_c(new non_retain_option_c(locloc(@2)), $3, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
+| VAR incompl_located_var_decl_list error END_OF_INPUT
+  {$$ = NULL; print_err_msg(locf(@1), locl(@1), "unclosed incomplete located variable(s) declaration."); yyerrok;}
+| VAR RETAIN incompl_located_var_decl_list error END_OF_INPUT
+  {$$ = NULL; print_err_msg(locf(@1), locl(@2), "unclosed incomplete retentive located variable(s) declaration."); yyerrok;}
+| VAR NON_RETAIN incompl_located_var_decl_list error END_OF_INPUT
+  {$$ = NULL; print_err_msg(locf(@1), locl(@2), "unclosed incomplete non-retentive located variable(s) declaration."); yyerrok;}
 | VAR error incompl_located_var_decl_list END_VAR
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unexpected token after 'VAR' in incomplete located variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@2), locl(@2), "unexpected token after 'VAR' in incomplete located variable(s) declaration."); yyerrok;}
 | VAR RETAIN error incompl_located_var_decl_list END_VAR
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "unexpected token after 'RETAIN' in retentive located variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@3), locl(@3), "unexpected token after 'RETAIN' in retentive located variable(s) declaration."); yyerrok;}
 | VAR NON_RETAIN error incompl_located_var_decl_list END_VAR
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "unexpected token after 'NON_RETAIN' in non-retentive located variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@3), locl(@3), "unexpected token after 'NON_RETAIN' in non-retentive located variable(s) declaration."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -4640,25 +3979,13 @@
 	{$$ = $1; $$->add_element($2);}
 /* ERROR_CHECK_BEGIN */
 | incompl_located_var_decl error
-	{$$ = new incompl_located_var_decl_list_c(locloc(@$));
-	 print_err_msg(current_filename, locl(@1), locf(@2), "';' missing at end of incomplete located variable declaration.");
-	 yyerrok;
-	}
+	{$$ = new incompl_located_var_decl_list_c(locloc(@$)); print_err_msg(locl(@1), locf(@2), "';' missing at end of incomplete located variable declaration."); yyerrok;}
 | incompl_located_var_decl_list incompl_located_var_decl error
-	{$$ = $1;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "';' missing at end of incomplete located variable declaration.");
-	 yyerrok;
-	}
+	{$$ = $1; print_err_msg(locl(@2), locf(@3), "';' missing at end of incomplete located variable declaration."); yyerrok;}
 | incompl_located_var_decl_list error ';'
-	{$$ = $1;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid incomplete located variable declaration.");
-	 yyerrok;
-	}
+	{$$ = $1; print_err_msg(locf(@2), locl(@2), "invalid incomplete located variable declaration."); yyerrok;}
 | incompl_located_var_decl_list ';'
-	{$$ = $1;
-	 yynerrs++;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unexpected ';' after incomplete located variable declaration.");
-	}
+	{$$ = $1; print_err_msg(locf(@2), locl(@2), "unexpected ';' after incomplete located variable declaration."); yynerrs++;}
 /* ERROR_CHECK_END */
 ;
 
@@ -4668,13 +3995,12 @@
 	{$$ = new incompl_located_var_decl_c($1, $2, $4, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | variable_name incompl_location var_spec
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':' missing between incomplete located variable and type specification.");
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "':' missing between incomplete located variable and type specification."); yynerrs++;
 	}
 | variable_name incompl_location ':' error
 	{$$ = NULL;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "no specification defined in incomplete located variable declaration.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no specification defined in incomplete located variable declaration.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid specification in incomplete located variable declaration."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -4736,15 +4062,9 @@
 	{$$ = $1; $$->add_element($2);}
 /* ERROR_CHECK_BEGIN */
 | var_init_decl_list var_init_decl error
-	{$$ = $1;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "';' missing at end of variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = $1; print_err_msg(locl(@2), locf(@3), "';' missing at end of variable(s) declaration."); yyerrok;}
 | var_init_decl_list error ';'
-	{$$ = $1;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = $1; print_err_msg(locf(@2), locl(@2), "invalid variable(s) declaration."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -4958,70 +4278,31 @@
 	}
 /* ERROR_CHECK_BEGIN */
 | function_name_declaration elementary_type_name io_OR_function_var_declarations_list function_body END_FUNCTION
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':' missing after function name in function declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "':' missing after function name in function declaration."); yynerrs++;}
 | function_name_declaration derived_type_name io_OR_function_var_declarations_list function_body END_FUNCTION
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':' missing after function name in function declaration.");
-	}
-| function_name_declaration error derived_type_name io_OR_function_var_declarations_list function_body END_FUNCTION
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "expecting ':' after function name in function declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "':' missing after function name in function declaration."); yynerrs++;}
 | function_name_declaration ':' io_OR_function_var_declarations_list function_body END_FUNCTION
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "no return type defined in function declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@2), locf(@3), "no return type defined in function declaration."); yynerrs++;}
 | function_name_declaration ':' error io_OR_function_var_declarations_list function_body END_FUNCTION
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid return type defined in function declaration.");
-	 yyerrok;
-	}
-| function_name_declaration ':' identifier io_OR_function_var_declarations_list function_body END_FUNCTION
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "unknown return type defined in function declaration.");
-	}
+	{$$ = NULL; print_err_msg(locf(@3), locl(@3), "invalid return type defined in function declaration."); yyerrok;}
 | function_name_declaration ':' elementary_type_name function_body END_FUNCTION
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@3), locf(@4), "no variable(s) declared in function declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@3), locf(@4), "no variable(s) declared in function declaration."); yynerrs++;}
 | function_name_declaration ':' derived_type_name function_body END_FUNCTION
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@3), locf(@4), "no variable(s) declared in function declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@3), locf(@4), "no variable(s) declared in function declaration."); yynerrs++;}
 | function_name_declaration ':' elementary_type_name io_OR_function_var_declarations_list END_FUNCTION
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@4), locf(@5), "no body defined in function declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@4), locf(@5), "no body defined in function declaration."); yynerrs++;}
 | function_name_declaration ':' derived_type_name io_OR_function_var_declarations_list END_FUNCTION
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@4), locf(@5), "no body defined in function declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@4), locf(@5), "no body defined in function declaration."); yynerrs++;}
 | function_name_declaration ':' elementary_type_name END_FUNCTION
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@3), locf(@4), "no variable(s) declared and body defined in function declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@3), locf(@4), "no variable(s) declared and body defined in function declaration."); yynerrs++;}
 | function_name_declaration ':' derived_type_name END_FUNCTION
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@3), locf(@4), "no variable(s) declared and body defined in function declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@3), locf(@4), "no variable(s) declared and body defined in function declaration."); yynerrs++;}
+| function_name_declaration ':' elementary_type_name io_OR_function_var_declarations_list function_body END_OF_INPUT
+	{$$ = NULL; print_err_msg(locf(@1), locf(@3), "unclosed function declaration."); yynerrs++;}
+| function_name_declaration ':' derived_type_name io_OR_function_var_declarations_list function_body END_OF_INPUT
+	{$$ = NULL; print_err_msg(locf(@1), locl(@3), "unclosed function declaration."); yynerrs++;}
 | function_name_declaration error END_FUNCTION
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unknown error in function declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@2), locl(@2), "unknown error in function declaration."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -5072,7 +4353,8 @@
 /* ERROR_CHECK_BEGIN */
 | FUNCTION error 
 	{$$ = NULL;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "no function name defined in function declaration.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@1), locf(@2), "no function name defined in function declaration.");}
+	 else {print_err_msg(locf(@2), locl(@2), "invalid function name in function declaration."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -5092,50 +4374,23 @@
 	{$$ = $1; $$->add_element($2);}
 /* ERROR_CHECK_BEGIN */
 | io_OR_function_var_declarations_list retentive_var_declarations
-	{$$ = $1;
-	 yynerrs++;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unexpected retentive variable(s) declaration in function declaration.");
-	}
+	{$$ = $1; print_err_msg(locf(@2), locl(@2), "unexpected retentive variable(s) declaration in function declaration."); yynerrs++;}
 | io_OR_function_var_declarations_list located_var_declarations
-	{$$ = $1;
-	 yynerrs++;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unexpected located variable(s) declaration in function declaration.");
-	}
+	{$$ = $1; print_err_msg(locf(@2), locl(@2), "unexpected located variable(s) declaration in function declaration."); yynerrs++;}
 | io_OR_function_var_declarations_list external_var_declarations
-	{$$ = $1;
-	 yynerrs++;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unexpected external variable(s) declaration in function declaration.");
-	}
+	{$$ = $1; print_err_msg(locf(@2), locl(@2), "unexpected external variable(s) declaration in function declaration."); yynerrs++;}
 | io_OR_function_var_declarations_list global_var_declarations
-	{$$ = $1;
-	 yynerrs++;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unexpected global variable(s) declaration in function declaration.");
-	}
+	{$$ = $1; print_err_msg(locf(@2), locl(@2), "unexpected global variable(s) declaration in function declaration."); yynerrs++;}
 | io_OR_function_var_declarations_list incompl_located_var_declarations
-	{$$ = $1;
-	 yynerrs++;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unexpected incomplete located variable(s) declaration in function declaration.");
-	}
+	{$$ = $1; print_err_msg(locf(@2), locl(@2), "unexpected incomplete located variable(s) declaration in function declaration."); yynerrs++;}
 | io_OR_function_var_declarations_list temp_var_decls
-	{$$ = $1;
-	 yynerrs++;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unexpected temporary located variable(s) declaration in function declaration.");
-	}
+	{$$ = $1; print_err_msg(locf(@2), locl(@2), "unexpected temporary located variable(s) declaration in function declaration."); yynerrs++;}
 | io_OR_function_var_declarations_list non_retentive_var_decls
-	{$$ = $1;
-	 yynerrs++;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unexpected non-retentive variable(s) declaration in function declaration.");
-	}
+	{$$ = $1; print_err_msg(locf(@2), locl(@2), "unexpected non-retentive variable(s) declaration in function declaration."); yynerrs++;}
 /*| io_OR_function_var_declarations_list access_declarations
-	{$$ = $1;
-	 yynerrs++;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unexpected access variable(s) declaration in function declaration.");
-	}*/
+	{$$ = $1; print_err_msg(locf(@2), locl(@2), "unexpected access variable(s) declaration in function declaration."); yynerrs++;}*/
 | io_OR_function_var_declarations_list instance_specific_initializations
-	{$$ = $1;
-	 yynerrs++;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unexpected instance specific initialization(s) in function declaration.");
-	}
+	{$$ = $1; print_err_msg(locf(@2), locl(@2), "unexpected instance specific initialization(s) in function declaration."); yynerrs++;}
 /* ERROR_CHECK_END */
 ;
 
@@ -5153,16 +4408,14 @@
 | VAR var2_init_decl_list END_VAR
 	{$$ = new function_var_decls_c(NULL, $2, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
-| VAR error var_init_decl_list END_VAR
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unexpected token after 'VAR' in function variable(s) declaration.");
-	 yyerrok;
-	}
-| VAR CONSTANT error var_init_decl_list END_VAR
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "unexpected token after 'CONSTANT' in constant function variable(s) declaration.");
-	 yyerrok;
-	}
+| VAR error var2_init_decl_list END_VAR
+	{$$ = NULL; print_err_msg(locf(@2), locl(@2), "unexpected token after 'VAR' in function variable(s) declaration."); yyerrok;}
+| VAR CONSTANT error var2_init_decl_list END_VAR
+	{$$ = NULL; print_err_msg(locf(@3), locl(@3), "unexpected token after 'CONSTANT' in constant function variable(s) declaration."); yyerrok;}
+| VAR var2_init_decl_list error END_OF_INPUT
+	{$$ = NULL; print_err_msg(locf(@1), locl(@1), "unclosed function variable(s) declaration."); yyerrok;}
+| VAR CONSTANT var2_init_decl_list error END_OF_INPUT
+	{$$ = NULL; print_err_msg(locf(@1), locl(@2), "unclosed constant function variable(s) declaration."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -5174,25 +4427,13 @@
 	{$$ = $1; $$->add_element($2);}
 /* ERROR_CHECK_BEGIN */
 | var2_init_decl error
-	{$$ = new var2_init_decl_list_c(locloc(@$));
-	 print_err_msg(current_filename, locl(@1), locf(@2), "';' missing at end of function variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = new var2_init_decl_list_c(locloc(@$)); print_err_msg(locl(@1), locf(@2), "';' missing at end of function variable(s) declaration."); yyerrok;}
 | var2_init_decl_list var2_init_decl error
-	{$$ = $1;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "';' missing at end of function variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = $1; print_err_msg(locl(@2), locf(@3), "';' missing at end of function variable(s) declaration."); yyerrok;}
 | var2_init_decl_list error ';'
-	{$$ = $1;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid function variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = $1; print_err_msg(locf(@2), locl(@2), "invalid function variable(s) declaration."); yyerrok;}
 | var2_init_decl_list ';'
-	{$$ = $1;
-	 yynerrs++;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unexpected ';' after function variable(s) declaration.");
-	}
+	{$$ = $1; print_err_msg(locf(@2), locl(@2), "unexpected ';' after function variable(s) declaration."); yynerrs++;}
 /* ERROR_CHECK_END */
 ;
 
@@ -5243,35 +4484,19 @@
 	}
 /* ERROR_CHECK_BEGIN */
 | FUNCTION_BLOCK io_OR_other_var_declarations_list function_block_body END_FUNCTION_BLOCK
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "no function block name defined in function block declaration.");
-	}
+  {$$ = NULL; print_err_msg(locl(@1), locf(@2), "no function block name defined in function block declaration."); yynerrs++;}
 | FUNCTION_BLOCK error io_OR_other_var_declarations_list function_block_body END_FUNCTION_BLOCK
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid function block name in function block declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@2), locl(@2), "invalid function block name in function block declaration."); yyerrok;}
 | FUNCTION_BLOCK derived_function_block_name function_block_body END_FUNCTION_BLOCK
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "no variable(s) declared in function declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@2), locf(@3), "no variable(s) declared in function declaration."); yynerrs++;}
 | FUNCTION_BLOCK derived_function_block_name io_OR_other_var_declarations_list END_FUNCTION_BLOCK
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@3), locf(@4), "no body defined in function block declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@3), locf(@4), "no body defined in function block declaration."); yynerrs++;}
 | FUNCTION_BLOCK derived_function_block_name END_FUNCTION_BLOCK
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "no variable(s) declared and body defined in function block declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@2), locf(@3), "no variable(s) declared and body defined in function block declaration."); yynerrs++;}
+| FUNCTION_BLOCK derived_function_block_name io_OR_other_var_declarations_list function_block_body END_OF_INPUT
+	{$$ = NULL; print_err_msg(locf(@1), locl(@2), "no variable(s) declared and body defined in function block declaration."); yynerrs++;}	
 | FUNCTION_BLOCK error END_FUNCTION_BLOCK
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unknown error in function block declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@2), locl(@2), "unknown error in function block declaration."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -5293,25 +4518,13 @@
 	{$$ = $1; $$->add_element($2);}
 /* ERROR_CHECK_BEGIN */
 | io_OR_other_var_declarations_list located_var_declarations
-	{$$ = $1;
-	 yynerrs++;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unexpected located variable(s) declaration in function block declaration.");
-	}
+	{$$ = $1; print_err_msg(locf(@2), locl(@2), "unexpected located variable(s) declaration in function block declaration."); yynerrs++;}
 | io_OR_other_var_declarations_list global_var_declarations
-	{$$ = $1;
-	 yynerrs++;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unexpected global variable(s) declaration in function block declaration.");
-	}
+	{$$ = $1; print_err_msg(locf(@2), locl(@2), "unexpected global variable(s) declaration in function block declaration."); yynerrs++;}
 /*| io_OR_other_var_declarations_list access_declarations
-	{$$ = $1;
-	 yynerrs++;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unexpected access variable(s) declaration in function block declaration.");
-	}*/
+	{$$ = $1; print_err_msg(locf(@2), locl(@2), "unexpected access variable(s) declaration in function block declaration."); yynerrs++;}*/
 | io_OR_other_var_declarations_list instance_specific_initializations
-	{$$ = $1;
-	 yynerrs++;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unexpected instance specific initialization(s) in function block declaration.");
-	}
+	{$$ = $1; print_err_msg(locf(@2), locl(@2), "unexpected instance specific initialization(s) in function block declaration."); yynerrs++;}
 /* ERROR_CHECK_END */
 ;
 
@@ -5346,15 +4559,11 @@
 	{$$ = new temp_var_decls_c($2, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | VAR_TEMP END_VAR
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "no variable declared in temporary variable(s) declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "no variable declared in temporary variable(s) declaration."); yynerrs++;}
+| VAR_TEMP temp_var_decls_list error END_OF_INPUT
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "unclosed temporary variable(s) declaration."); yyerrok;}
 | VAR_TEMP error temp_var_decls_list END_VAR
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unexpected token after 'VAR_TEMP' in function variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@2), locl(@2), "unexpected token after 'VAR_TEMP' in function variable(s) declaration."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -5367,30 +4576,15 @@
 	{$$ = $1; $$->add_element($2);}
 /* ERROR_CHECK_BEGIN */
 | error ';'
-	{$$ = new temp_var_decls_list_c(locloc(@$));
-	 print_err_msg(current_filename, locf(@1), locl(@1), "invalid temporary variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = new temp_var_decls_list_c(locloc(@$)); print_err_msg(locf(@1), locl(@1), "invalid temporary variable(s) declaration."); yyerrok;}
 | temp_var_decl error
-	{$$ = new temp_var_decls_list_c(locloc(@$));
-	 print_err_msg(current_filename, locl(@1), locf(@2), "';' missing at end of temporary variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = new temp_var_decls_list_c(locloc(@$)); print_err_msg(locl(@1), locf(@2), "';' missing at end of temporary variable(s) declaration."); yyerrok;}
 | temp_var_decls_list temp_var_decl error
-	{$$ = $1;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "';' missing at end of temporary variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = $1; print_err_msg(locl(@2), locf(@3), "';' missing at end of temporary variable(s) declaration."); yyerrok;}
 | temp_var_decls_list error ';'
-	{$$ = $1;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid temporary variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = $1; print_err_msg(locf(@2), locl(@2), "invalid temporary variable(s) declaration."); yyerrok;}
 | temp_var_decls_list ';'
-	{$$ = $1;
-	 yynerrs++;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unexpected ';' after temporary variable(s) declaration.");
-	}
+	{$$ = $1; print_err_msg(locf(@2), locl(@2), "unexpected ';' after temporary variable(s) declaration."); yynerrs++;}
 /* ERROR_CHECK_END */
 ;
 
@@ -5399,11 +4593,10 @@
   VAR NON_RETAIN var_init_decl_list END_VAR
 	{$$ = new non_retentive_var_decls_c($3, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
+| VAR NON_RETAIN var_init_decl_list error END_OF_INPUT
+	{$$ = NULL; print_err_msg(locf(@3), locl(@3), "unclosed non-retentive temporary variable(s) declaration."); yyerrok;}
 | VAR NON_RETAIN error var_init_decl_list END_VAR
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "unexpected token after 'NON_RETAIN' in non-retentive temporary variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@3), locl(@3), "unexpected token after 'NON_RETAIN' in non-retentive temporary variable(s) declaration."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -5442,35 +4635,19 @@
 	}
 /* ERROR_CHECK_BEGIN */
 | PROGRAM program_var_declarations_list function_block_body END_PROGRAM
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "no program name defined in program declaration.");
-	}
+  {$$ = NULL; print_err_msg(locl(@1), locf(@2), "no program name defined in program declaration.");}
 | PROGRAM error program_var_declarations_list function_block_body END_PROGRAM
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid program name in program declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@2), locl(@2), "invalid program name in program declaration."); yyerrok;}
 | PROGRAM program_type_name function_block_body END_PROGRAM
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "no variable(s) declared in program declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@2), locf(@3), "no variable(s) declared in program declaration."); yynerrs++;}
 | PROGRAM program_type_name program_var_declarations_list END_PROGRAM
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@3), locf(@4), "no body defined in program declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@3), locf(@4), "no body defined in program declaration."); yynerrs++;}
 | PROGRAM program_type_name END_PROGRAM
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "no variable(s) declared and body defined in program declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@2), locf(@3), "no variable(s) declared and body defined in program declaration."); yynerrs++;}
+| PROGRAM program_type_name program_var_declarations_list function_block_body END_OF_INPUT
+	{$$ = NULL; print_err_msg(locf(@1), locl(@2), "unclosed program declaration."); yynerrs++;}
 | PROGRAM error END_PROGRAM
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unknown error in program declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@2), locl(@2), "unknown error in program declaration."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -5498,19 +4675,11 @@
 */
 /* ERROR_CHECK_BEGIN */
 | program_var_declarations_list global_var_declarations
-	{$$ = $1;
-	 yynerrs++;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unexpected global variable(s) declaration in function block declaration.");
-	}
+	{$$ = $1; print_err_msg(locf(@2), locl(@2), "unexpected global variable(s) declaration in function block declaration."); yynerrs++;}
 /*| program_var_declarations_list access_declarations
-	{$$ = $1;
-	 yynerrs++;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unexpected access variable(s) declaration in function block declaration.");
-	}*/
+	{$$ = $1; print_err_msg(locf(@2), locl(@2), "unexpected access variable(s) declaration in function block declaration."); yynerrs++;}*/
 | program_var_declarations_list instance_specific_initializations
-	{$$ = $1;
-	 yynerrs++;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unexpected instance specific initialization(s) in function block declaration.");
+	{$$ = $1; print_err_msg(locf(@2), locl(@2), "unexpected instance specific initialization(s) in function block declaration."); yynerrs++;
 	}
 /* ERROR_CHECK_END */
 ;
@@ -5562,10 +4731,7 @@
 	{$$ = $1; $$->add_element($2);}
 /* ERROR_CHECK_BEGIN */
 | sfc_network error 
-	{$$ = NULL;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "unexpected token after SFC network in sequencial function chart.");
-	 yyerrok;
-	}
+	{$$ = $1; print_err_msg(locl(@1), locf(@2), "unexpected token after SFC network in sequencial function chart."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -5575,35 +4741,17 @@
 	{$$ = new initial_step_c($2, $4, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | INITIAL_STEP ':' action_association_list END_STEP
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locf(@1), locl(@2), "no step name defined in initial step declaration.");
-	}
+  {$$ = NULL; print_err_msg(locf(@1), locl(@2), "no step name defined in initial step declaration."); yynerrs++;}
 | INITIAL_STEP error ':' action_association_list END_STEP
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid step name defined in initial step declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@2), locl(@2), "invalid step name defined in initial step declaration."); yyerrok;}
 | INITIAL_STEP step_name action_association_list END_STEP
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "':' missing after step name in initial step declaration.");
-	}
-| INITIAL_STEP step_name error action_association_list END_STEP
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "expecting ':' after step name in initial step declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locl(@2), locf(@3), "':' missing after step name in initial step declaration."); yynerrs++;}
 | INITIAL_STEP step_name ':' error END_STEP
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@4), locl(@4), "invalid action association list in initial step declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@4), locl(@4), "invalid action association list in initial step declaration."); yyerrok;}
+| INITIAL_STEP step_name ':' action_association_list END_OF_INPUT
+	{$$ = NULL; print_err_msg(locf(@1), locl(@3), "unclosed initial step declaration."); yynerrs++;}
 | INITIAL_STEP error END_STEP
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unknown error in initial step declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@2), locl(@2), "unknown error in initial step declaration."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -5613,35 +4761,17 @@
 	{$$ = new step_c($2, $4, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | STEP ':' action_association_list END_STEP
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "no step name defined in step declaration.");
-	}
+  {$$ = NULL; print_err_msg(locl(@1), locf(@2), "no step name defined in step declaration."); yynerrs++;}
 | STEP error ':' action_association_list END_STEP
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid step name defined in step declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@2), locl(@2), "invalid step name defined in step declaration."); yyerrok;}
 | STEP step_name action_association_list END_STEP
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "':' missing after step name in step declaration.");
-	}
-| STEP step_name error action_association_list END_STEP
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "expecting ':' after step name in step declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locl(@2), locf(@3), "':' missing after step name in step declaration."); yynerrs++;}
 | STEP step_name ':' error END_STEP
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@4), locl(@4), "invalid action association list in step declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@4), locl(@4), "invalid action association list in step declaration."); yyerrok;}
+| STEP step_name ':' action_association_list END_OF_INPUT
+	{$$ = NULL; print_err_msg(locf(@1), locl(@3), "invalid action association list in step declaration."); yynerrs++;}
 | STEP error END_STEP
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unknown error in step declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@2), locl(@2), "unknown error in step declaration."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -5656,15 +4786,9 @@
 	{$$ = $1; $$->add_element($2);}
 /* ERROR_CHECK_BEGIN */
 | action_association_list action_association error
-	{$$ = $1;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "';' missing at end of action association declaration.");
-	 yyerrok;
-	}
+	{$$ = $1; print_err_msg(locl(@2), locf(@3), "';' missing at end of action association declaration."); yyerrok;}
 | action_association_list ';'
-	{$$ = $1;
-	 yynerrs++;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unexpected ';' after action association declaration.");
-	}
+	{$$ = $1; print_err_msg(locf(@2), locl(@2), "unexpected ';' after action association declaration."); yynerrs++;}
 /* ERROR_CHECK_END */
 ;
 
@@ -5676,11 +4800,8 @@
   action_name '(' {cmd_goto_sfc_qualifier_state()} action_qualifier {cmd_pop_state()} indicator_name_list ')'
 	{$$ = new action_association_c($1, $4, $6, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
-/*| action_name '(' error indicator_name_list ')'
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid qualifier defined in action association.");
-	 yyerrok;
-	}*/
+/*| action_name '(' error ')'
+  {$$ = NULL; print_err_msg(locf(@3), locl(@3), "invalid qualifier defined in action association."); yyerrok;}*/
 /* ERROR_CHECK_END */
 ;
 
@@ -5692,13 +4813,11 @@
 	{$$ = $1; $$->add_element($3);}
 /* ERROR_CHECK_BEGIN */
 | indicator_name_list indicator_name
-	{$$ = $1;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "',' missing at end of action association declaration.");
-	}
+	{$$ = $1; print_err_msg(locl(@1), locf(@2), "',' missing at end of action association declaration."); yynerrs++;}
 | indicator_name_list ',' error
 	{$$ = $1;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unexpected token after ',' in indicator list.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no indicator defined in indicator list.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid indicator in indicator list."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -5716,13 +4835,11 @@
 	{$$ = new action_qualifier_c($1, $3, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | timed_qualifier action_time
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "',' missing between timed qualifier and action time in action qualifier.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "',' missing between timed qualifier and action time in action qualifier."); yynerrs++;}
 | timed_qualifier ',' error
 	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unexpected token after ',' in action qualifier.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no action time defined in action qualifier.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid action time in action qualifier."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -5761,15 +4878,9 @@
 	{$$ = new steps_c(NULL, $2, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | '(' step_name_list error
-	{$$ = NULL;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "expecting ')' at the end of step list in transition declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locl(@2), locf(@3), "expecting ')' at the end of step list in transition declaration."); yyerrok;}
 | '(' error ')'
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid step list in transition declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@2), locl(@2), "invalid step list in transition declaration."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -5780,13 +4891,11 @@
 	{$$ = $1; $$->add_element($3);}
 /* ERROR_CHECK_BEGIN */
 | step_name_list step_name
-	{$$ = $1;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "',' missing in step list.");
-	}
+	{$$ = $1; print_err_msg(locl(@1), locf(@2), "',' missing in step list."); yynerrs++;}
 | step_name_list ',' error
 	{$$ = $1;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unexpected ',' in step list.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no step name defined in step list.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid step name in step list."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -5811,90 +4920,39 @@
 	{$$ = new transition_c($2, $3, $5, $7, $9, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | TRANSITION error transition_priority FROM steps TO steps {cmd_goto_body_state();} transition_condition END_TRANSITION
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid transition name defined in transition declaration.");
-	 yyerrok;
-	} 
+	{$$ = NULL; print_err_msg(locf(@2), locl(@2), "invalid transition name defined in transition declaration."); yyerrok;}
 | TRANSITION transition_name error FROM steps TO steps {cmd_goto_body_state();} transition_condition END_TRANSITION
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid transition priority defined in transition declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@3), locl(@3), "invalid transition priority defined in transition declaration."); yyerrok;}
 | TRANSITION transition_priority FROM TO steps {cmd_goto_body_state();} transition_condition END_TRANSITION
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@3), locf(@4), "no origin step(s) defined in transition declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@3), locf(@4), "no origin step(s) defined in transition declaration."); yynerrs++;}
 | TRANSITION transition_name transition_priority FROM TO steps {cmd_goto_body_state();} transition_condition END_TRANSITION
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@4), locf(@5), "no origin step(s) defined in transition declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@4), locf(@5), "no origin step(s) defined in transition declaration."); yynerrs++;}
 | TRANSITION transition_priority FROM error TO steps {cmd_goto_body_state();} transition_condition END_TRANSITION
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@4), locl(@4), "invalid origin step(s) defined in transition declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@4), locl(@4), "invalid origin step(s) defined in transition declaration."); yyerrok;}
 | TRANSITION transition_name transition_priority FROM error TO steps {cmd_goto_body_state();} transition_condition END_TRANSITION
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@5), locl(@5), "invalid origin step(s) defined in transition declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@5), locl(@5), "invalid origin step(s) defined in transition declaration."); yyerrok;}
 | TRANSITION transition_priority FROM steps steps {cmd_goto_body_state();} transition_condition END_TRANSITION
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@4), locf(@5), "'TO' missing between origin step(s) and destination step(s) in transition declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@4), locf(@5), "'TO' missing between origin step(s) and destination step(s) in transition declaration."); yynerrs++;}
 | TRANSITION transition_name transition_priority FROM steps steps {cmd_goto_body_state();} transition_condition END_TRANSITION
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@5), locf(@6), "'TO' missing between origin step(s) and destination step(s) in transition declaration.");
-	}
-| TRANSITION transition_priority FROM steps error steps {cmd_goto_body_state();} transition_condition END_TRANSITION
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@5), locl(@5), "expecting 'TO' between origin step(s) and destination step(s) in transition declaration.");
-	 yyerrok;
-	}
-| TRANSITION transition_name transition_priority FROM steps error steps {cmd_goto_body_state();} transition_condition END_TRANSITION
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@6), locl(@6), "expecting 'TO' between origin step(s) and destination step(s) in transition declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locl(@5), locf(@6), "'TO' missing between origin step(s) and destination step(s) in transition declaration."); yynerrs++;}
 | TRANSITION transition_priority FROM steps TO {cmd_goto_body_state();} transition_condition END_TRANSITION
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@5), locf(@7), "no destination step(s) defined in transition declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@5), locf(@7), "no destination step(s) defined in transition declaration."); yynerrs++;}
 | TRANSITION transition_name transition_priority FROM steps TO {cmd_goto_body_state();} transition_condition END_TRANSITION
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@6), locf(@8), "no destination step(s) defined in transition declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@6), locf(@8), "no destination step(s) defined in transition declaration."); yynerrs++;}
 | TRANSITION transition_priority FROM steps TO error {cmd_goto_body_state();} transition_condition END_TRANSITION
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@6), locl(@6), "invalid destination step(s) defined in transition declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@6), locl(@6), "invalid destination step(s) defined in transition declaration."); yyerrok;}
 | TRANSITION transition_name transition_priority FROM steps TO error {cmd_goto_body_state();} transition_condition END_TRANSITION
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@7), locl(@7), "invalid destination step(s) defined in transition declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@7), locl(@7), "invalid destination step(s) defined in transition declaration."); yyerrok;}
 | TRANSITION transition_priority {cmd_goto_body_state();} transition_condition END_TRANSITION
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@2), locf(@4), "no origin and destination step(s) defined in transition declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@2), locf(@4), "no origin and destination step(s) defined in transition declaration."); yynerrs++;}
 | TRANSITION transition_name transition_priority {cmd_goto_body_state();} transition_condition END_TRANSITION
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@3), locf(@5), "no origin and destination step(s) defined in transition declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@3), locf(@5), "no origin and destination step(s) defined in transition declaration."); yynerrs++;}
+/*| TRANSITION transition_priority FROM steps TO steps {cmd_goto_body_state();} transition_condition error END_OF_INPUT
+  {$$ = NULL; print_err_msg(locf(@1), locl(@6), "unclosed transition declaration."); yyerrok;}
+| TRANSITION transition_name transition_priority FROM steps TO steps {cmd_goto_body_state();} transition_condition error END_OF_INPUT
+  {$$ = NULL; print_err_msg(locf(@1), locl(@7), "unclosed transition declaration."); yyerrok;}*/
 | TRANSITION error END_TRANSITION
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unknown error in transition declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@2), locl(@2), "unknown error in transition declaration."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -5905,16 +4963,10 @@
 	{$$ = $6;}
 /* ERROR_CHECK_BEGIN */
 | '(' ASSIGN integer ')'
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "'PRIORITY' missing between '(' and ':=' in transition declaration with priority.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "'PRIORITY' missing between '(' and ':=' in transition declaration with priority."); yynerrs++;}
 | '(' error ASSIGN integer ')'
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "expecting 'PRIORITY' between '(' and ':=' in transition declaration with priority.");
-	 yyerrok;
-	}
-//* ERROR_CHECK_END */
+	{$$ = NULL; print_err_msg(locf(@2), locl(@2), "expecting 'PRIORITY' between '(' and ':=' in transition declaration with priority."); yyerrok;}
+/* ERROR_CHECK_END */
 ;
 
 
@@ -5925,30 +4977,19 @@
 	{$$ = new transition_condition_c(NULL, $2, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | eol_list simple_instr_list
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':' missing before IL condition in transition declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "':' missing before IL condition in transition declaration."); yynerrs++;}
 | ':' eol_list error
 	{$$ = NULL;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "no instructions defined in IL condition of transition declaration.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no instructions defined in IL condition of transition declaration.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid instructions in IL condition of transition declaration."); yyclearin;}
 	 yyerrok;
 	}
 | ASSIGN ';'
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "no expression defined in ST condition of transition declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "no expression defined in ST condition of transition declaration."); yynerrs++;}
 | ASSIGN error ';'
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid expression defined in ST condition of transition declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@2), locl(@2), "invalid expression defined in ST condition of transition declaration."); yyerrok;}
 | ASSIGN expression error
-	{$$ = NULL;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "expecting ';' after expression defined in ST condition of transition declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locl(@2), locf(@3), "expecting ';' after expression defined in ST condition of transition declaration."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -5960,30 +5001,17 @@
 	{$$ = new action_c($2, $5, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | ACTION ':' {cmd_goto_body_state();} function_block_body END_ACTION
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "no action name defined in action declaration.");
-	}
+  {$$ = NULL; print_err_msg(locl(@1), locf(@2), "no action name defined in action declaration."); yynerrs++;}
 | ACTION error ':' {cmd_goto_body_state();} function_block_body END_ACTION
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid action name defined in action declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@2), locl(@2), "invalid action name defined in action declaration."); yyerrok;}
 | ACTION action_name {cmd_goto_body_state();} function_block_body END_ACTION
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@2), locf(@4), "':' missing after action name in action declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@2), locf(@4), "':' missing after action name in action declaration."); yynerrs++;}
 | ACTION action_name ':' END_ACTION
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@3), locf(@4), "no body defined in action declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@3), locf(@4), "no body defined in action declaration."); yynerrs++;}
+/*| ACTION action_name ':' {cmd_goto_body_state();} function_block_body END_OF_INPUT
+	{$$ = NULL; print_err_msg(locf(@1), locl(@3), "unclosed action declaration."); yyerrok;}*/
 | ACTION error END_ACTION
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unknown error in action declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@2), locl(@2), "unknown error in action declaration."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -6082,20 +5110,14 @@
    optional_access_declarations
    optional_instance_specific_initializations
   END_CONFIGURATION
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "no configuration name defined in configuration declaration.");
-	}
+  {$$ = NULL; print_err_msg(locl(@1), locf(@2), "no configuration name defined in configuration declaration."); yynerrs++;}
 | CONFIGURATION
    optional_global_var_declarations
    resource_declaration_list
    optional_access_declarations
    optional_instance_specific_initializations
   END_CONFIGURATION
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "no configuration name defined in configuration declaration.");
-	}
+  {$$ = NULL; print_err_msg(locl(@1), locf(@2), "no configuration name defined in configuration declaration."); yynerrs++;}
 | CONFIGURATION error
    optional_global_var_declarations
    single_resource_declaration
@@ -6103,44 +5125,44 @@
    optional_access_declarations
    optional_instance_specific_initializations
   END_CONFIGURATION
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid configuration name defined in configuration declaration.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@2), locl(@2), "invalid configuration name defined in configuration declaration."); yyerrok;}
 | CONFIGURATION error
    optional_global_var_declarations
    resource_declaration_list
    optional_access_declarations
    optional_instance_specific_initializations
   END_CONFIGURATION
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid configuration name defined in configuration declaration.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@2), locl(@2), "invalid configuration name defined in configuration declaration."); yyerrok;}
 | CONFIGURATION configuration_name
    optional_global_var_declarations
    optional_access_declarations
    optional_instance_specific_initializations
   END_CONFIGURATION
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@3), locf(@4), "no resource(s) defined in configuration declaration.");
-	}
+  {$$ = NULL; print_err_msg(locl(@3), locf(@4), "no resource(s) defined in configuration declaration."); yynerrs++;}
 | CONFIGURATION configuration_name
    optional_global_var_declarations
    error
    optional_access_declarations
    optional_instance_specific_initializations
   END_CONFIGURATION
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@4), locl(@4), "invalid resource(s) defined in configuration declaration.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@4), locl(@4), "invalid resource(s) defined in configuration declaration."); yyerrok;}
+/*| CONFIGURATION configuration_name
+   optional_global_var_declarations
+   single_resource_declaration
+   {variable_name_symtable.pop();}
+   optional_access_declarations
+   optional_instance_specific_initializations
+  END_OF_INPUT
+  {$$ = NULL; print_err_msg(locf(@1), locl(@2), "unclosed configuration declaration."); yyerrok;}*/
+| CONFIGURATION configuration_name
+   optional_global_var_declarations
+   resource_declaration_list
+   optional_access_declarations
+   optional_instance_specific_initializations
+  END_OF_INPUT
+  {$$ = NULL; print_err_msg(locf(@1), locl(@2), "unclosed configuration declaration."); yyerrok;}
 | CONFIGURATION error END_CONFIGURATION
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unknown error in configuration declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@2), locl(@2), "unknown error in configuration declaration."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -6177,10 +5199,7 @@
 	{$$ = $1; $$->add_element($2);}
 /* ERROR_CHECK_BEGIN */
 | resource_declaration_list error
-	{$$ = $1;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unexpected token after resource declaration.");
-	 yyerrok;
-	}
+	{$$ = $1; print_err_msg(locf(@2), locl(@2), "unexpected token after resource declaration."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -6199,15 +5218,14 @@
    optional_global_var_declarations
    single_resource_declaration
   END_RESOURCE
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@3), "no resource name defined in resource declaration.");
-	}
+  {$$ = NULL; print_err_msg(locl(@1), locf(@3), "no resource name defined in resource declaration."); yynerrs++;}
+/*|	RESOURCE {variable_name_symtable.push();} resource_name ON resource_type_name
+   optional_global_var_declarations
+   single_resource_declaration
+  END_OF_INPUT
+	{$$ = NULL; print_err_msg(locf(@1), locl(@5), "unclosed resource declaration."); yyerrok;}*/
 | RESOURCE error END_RESOURCE
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unknown error in resource declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@2), locl(@2), "unknown error in resource declaration."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -6226,15 +5244,9 @@
 	{$$ = $1; $$->add_element($2);}
 /* ERROR_CHECK_BEGIN */
 | task_configuration_list task_configuration error
-  {$$ = $1;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "';' missing at the end of task configuration in resource declaration.");
-	 yyerrok;
-	}
+  {$$ = $1; print_err_msg(locl(@1), locf(@2), "';' missing at the end of task configuration in resource declaration."); yyerrok;}
 | task_configuration_list ';'
-  {$$ = $1;
-	 yynerrs++;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unexpected ';' after task configuration in resource declaration.");
-	}
+  {$$ = $1; print_err_msg(locf(@2), locl(@2), "unexpected ';' after task configuration in resource declaration."); yynerrs++;}
 /* ERROR_CHECK_END */
 ;
 
@@ -6247,25 +5259,13 @@
 	{$$ = $1; $$->add_element($2);}
 /* ERROR_CHECK_BEGIN */
 | program_configuration error
-  {$$ = new program_configuration_list_c(locloc(@$));
-	 print_err_msg(current_filename, locl(@1), locf(@2), "';' missing at the end of program configuration in resource declaration.");
-	 yyerrok;
-	}
+  {$$ = new program_configuration_list_c(locloc(@$)); print_err_msg(locl(@1), locf(@2), "';' missing at the end of program configuration in resource declaration."); yyerrok;}
 | program_configuration_list program_configuration error
-  {$$ = $1;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "';' missing at the end of program configuration in resource declaration.");
-	 yyerrok;
-	}
+  {$$ = $1; print_err_msg(locl(@2), locf(@3), "';' missing at the end of program configuration in resource declaration."); yyerrok;}
 | program_configuration_list error ';'
-  {$$ = $1;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid program configuration in resource declaration.");
-	 yyerrok;
-	}
+  {$$ = $1; print_err_msg(locf(@2), locl(@2), "invalid program configuration in resource declaration."); yyerrok;}
 | program_configuration_list ';'
-  {$$ = $1;
-	 yynerrs++;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unexpected ';' after program configuration in resource declaration.");
-	}
+  {$$ = $1; print_err_msg(locf(@2), locl(@2), "unexpected ';' after program configuration in resource declaration."); yynerrs++;}
 /* ERROR_CHECK_END */
 ;
 
@@ -6278,20 +5278,13 @@
 	{$$ = NULL;}
 // ERROR_CHECK_BEGIN //
 | VAR_ACCESS END_VAR
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "no variable declared in access variable(s) declaration.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "no variable declared in access variable(s) declaration."); yynerrs++;}
 | VAR_ACCESS error access_declaration_list END_VAR
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unexpected token after 'VAR_ACCESS' in access variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@2), locl(@2), "unexpected token after 'VAR_ACCESS' in access variable(s) declaration."); yyerrok;}
+| VAR_ACCESS access_declaration_list error END_VAR
+	{$$ = NULL; print_err_msg(locf(@1), locl(@1), "unclosed access variable(s) declaration."); yyerrok;}
 | VAR_ACCESS error END_VAR
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unknown error in access variable(s) declaration.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@2), locl(@2), "unknown error in access variable(s) declaration."); yyerrok;}
 // ERROR_CHECK_END //
 ;
 
@@ -6302,29 +5295,16 @@
 // ERROR_CHECK_BEGIN //
 | error ';'
   {$$ = // create a new list //;
-	 print_err_msg(current_filename, locf(@1), locl(@1), "invalid access variable declaration.");
-	 yyerrok;
-	}
+	 print_err_msg(locf(@1), locl(@1), "invalid access variable declaration."); yyerrok;}
 | access_declaration error
   {$$ = // create a new list //;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "';' missing at the end of access variable declaration.");
-	 yyerrok;
-	}
+	 print_err_msg(locl(@1), locf(@2), "';' missing at the end of access variable declaration."); yyerrok;}
 | access_declaration_list access_declaration error
-  {$$ = $1;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "';' missing at the end of access variable declaration.");
-	 yyerrok;
-	}
+  {$$ = $1; print_err_msg(locl(@2), locf(@3), "';' missing at the end of access variable declaration."); yyerrok;}
 | access_declaration_list error ';'
-  {$$ = $1;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid access variable declaration.");
-	 yyerrok;
-	}
+  {$$ = $1; print_err_msg(locf(@2), locl(@2), "invalid access variable declaration."); yyerrok;}
 | access_declaration_list ';'
-  {$$ = $1;
-	 yynerrs++;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unexpected ';' after access variable declaration.");
-	}
+  {$$ = $1; print_err_msg(locf(@2), locl(@2), "unexpected ';' after access variable declaration."); yynerrs++;}
 // ERROR_CHECK_END //
 ;
 
@@ -6419,18 +5399,13 @@
 	{$$ = new task_configuration_c($2, $3, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | TASK task_initialization
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "no task name defined in task declaration.");
-	}
+  {$$ = NULL; print_err_msg(locl(@1), locf(@2), "no task name defined in task declaration."); yynerrs++;}
 | TASK error task_initialization
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid task name defined in task declaration.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@2), locl(@2), "invalid task name defined in task declaration."); yyerrok;}
 | TASK task_name error
   {$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid task initialization in task declaration.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no task initialization defined in task declaration.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid task initialization in task declaration."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -6461,25 +5436,11 @@
 	{$$ = $4;}
 /* ERROR_CHECK_BEGIN */
 | SINGLE {cmd_pop_state();} data_source ',' {cmd_goto_task_init_state();}
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@3), "':=' missing after 'SINGLE' in task initialization.");
-	}
-| SINGLE error {cmd_pop_state();} data_source ',' {cmd_goto_task_init_state();}
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "expecting ':=' after 'SINGLE' in task initialization.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locl(@1), locf(@3), "':=' missing after 'SINGLE' in task initialization."); yynerrs++;}
 | SINGLE ASSIGN {cmd_pop_state();} ',' {cmd_goto_task_init_state();}
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@2), locf(@4), "no data source defined in 'SINGLE' statement of task initialization.");
-	}
+  {$$ = NULL; print_err_msg(locl(@2), locf(@4), "no data source defined in 'SINGLE' statement of task initialization."); yynerrs++;}
 | SINGLE ASSIGN {cmd_pop_state();} error ',' {cmd_goto_task_init_state();}
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@4), locl(@4), "invalid data source defined in 'SINGLE' statement of task initialization.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@4), locl(@4), "invalid data source defined in 'SINGLE' statement of task initialization."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -6492,25 +5453,11 @@
 	{$$ = $4;}
 /* ERROR_CHECK_BEGIN */
 | INTERVAL {cmd_pop_state();} data_source ',' {cmd_goto_task_init_state();}
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@3), "':=' missing after 'INTERVAL' in task initialization.");
-	}
-| INTERVAL error {cmd_pop_state();} data_source ',' {cmd_goto_task_init_state();}
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "expecting ':=' after 'INTERVAL' in task initialization.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locl(@1), locf(@3), "':=' missing after 'INTERVAL' in task initialization.");}
 | INTERVAL ASSIGN {cmd_pop_state();} ',' {cmd_goto_task_init_state();}
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@2), locf(@4), "no data source defined in 'INTERVAL' statement of task initialization.");
-	}
+  {$$ = NULL; print_err_msg(locl(@2), locf(@4), "no data source defined in 'INTERVAL' statement of task initialization."); yynerrs++;}
 | INTERVAL ASSIGN {cmd_pop_state();} error ',' {cmd_goto_task_init_state();}
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@4), locl(@4), "invalid data source defined in 'INTERVAL' statement of task initialization.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@4), locl(@4), "invalid data source defined in 'INTERVAL' statement of task initialization."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -6522,18 +5469,11 @@
 	{$$ = $4;}
 /* ERROR_CHECK_BEGIN */
 | PRIORITY {cmd_pop_state();} integer
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@3), "':=' missing after 'PRIORITY' in task initialization.");
-	}
-| PRIORITY error {cmd_pop_state();} integer 
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "expecting ':=' after 'PRIORITY' in task initialization.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locl(@1), locf(@3), "':=' missing after 'PRIORITY' in task initialization."); yynerrs++;}
 | PRIORITY ASSIGN {cmd_pop_state();} error
   {$$ = NULL;
-	 print_err_msg(current_filename, locl(@2), locf(@4), "no priority number defined in 'PRIORITY' statement of task initialization.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@4), "no priority number defined in 'PRIORITY' statement of task initialization.");}
+	 else {print_err_msg(locf(@4), locl(@4), "invalid priority number in 'PRIORITY' statement of task initialization."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -6564,110 +5504,41 @@
 	}
 /* ERROR_CHECK_BEGIN */
 | PROGRAM program_name optional_task_name ':' identifier optional_prog_conf_elements
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locf(@5), locl(@5), "unknown program type name after ':' in program configuration.");
-	}
+  {$$ = NULL; print_err_msg(locf(@5), locl(@5), "invalid program type name after ':' in program configuration."); yynerrs++;}
 | PROGRAM RETAIN program_name optional_task_name ':' identifier optional_prog_conf_elements
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locf(@6), locl(@6), "unknown program type name after ':' in program configuration.");
-	}
+  {$$ = NULL; print_err_msg(locf(@6), locl(@6), "invalid program type name after ':' in program configuration."); yynerrs++;}
 | PROGRAM NON_RETAIN program_name optional_task_name ':' identifier optional_prog_conf_elements
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locf(@6), locl(@6), "unknown program type name after ':' in program configuration.");
-	}
+  {$$ = NULL; print_err_msg(locf(@6), locl(@6), "invalid program type name after ':' in program configuration."); yynerrs++;}
 | PROGRAM error program_name optional_task_name ':' prev_declared_program_type_name optional_prog_conf_elements
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unexpected token after 'PROGRAM' in program configuration.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@2), locl(@2), "unexpected token after 'PROGRAM' in program configuration."); yyerrok;}
 | PROGRAM RETAIN error program_name optional_task_name ':' prev_declared_program_type_name optional_prog_conf_elements
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "unexpected token after 'RETAIN' in retentive program configuration.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@3), locl(@3), "unexpected token after 'RETAIN' in retentive program configuration."); yyerrok;}
 | PROGRAM NON_RETAIN error program_name optional_task_name ':' prev_declared_program_type_name optional_prog_conf_elements
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "unexpected token after 'NON_RETAIN' in non-retentive program configuration.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@3), locl(@3), "unexpected token after 'NON_RETAIN' in non-retentive program configuration."); yyerrok;}
 | PROGRAM optional_task_name ':' prev_declared_program_type_name optional_prog_conf_elements
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "no program name defined in program configuration.");
-	}
+  {$$ = NULL; print_err_msg(locl(@1), locf(@2), "no program name defined in program configuration."); yynerrs++;}
 | PROGRAM RETAIN optional_task_name ':' prev_declared_program_type_name optional_prog_conf_elements
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "no program name defined in retentive program configuration.");
-	}
+  {$$ = NULL; print_err_msg(locl(@2), locf(@3), "no program name defined in retentive program configuration."); yynerrs++;}
 | PROGRAM NON_RETAIN optional_task_name ':' prev_declared_program_type_name optional_prog_conf_elements
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "no program name defined in non-retentive program configuration.");
-	}
+  {$$ = NULL; print_err_msg(locl(@2), locf(@3), "no program name defined in non-retentive program configuration."); yynerrs++;}
 | PROGRAM error optional_task_name ':' prev_declared_program_type_name optional_prog_conf_elements
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "no program name defined in program configuration.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@2), locl(@2), "invalid program name defined in program configuration."); yyerrok;}
 | PROGRAM RETAIN error optional_task_name ':' prev_declared_program_type_name optional_prog_conf_elements
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "no program name defined in retentive program configuration.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@3), locl(@3), "invalid program name defined in retentive program configuration."); yyerrok;}
 | PROGRAM NON_RETAIN error optional_task_name ':' prev_declared_program_type_name optional_prog_conf_elements
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "no program name defined in non-retentive program configuration.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@3), locl(@3), "invalid program name defined in non-retentive program configuration."); yyerrok;}
 | PROGRAM program_name optional_task_name prev_declared_program_type_name optional_prog_conf_elements
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@3), locf(@4), "':' missing after program name or optional task name in program configuration.");
-	}
+  {$$ = NULL; print_err_msg(locl(@3), locf(@4), "':' missing after program name or optional task name in program configuration."); yynerrs++;}
 | PROGRAM RETAIN program_name optional_task_name prev_declared_program_type_name optional_prog_conf_elements
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@4), locf(@5), "':' missing after program name or optional task name in program configuration.");
-	}
+  {$$ = NULL; print_err_msg(locl(@4), locf(@5), "':' missing after program name or optional task name in retentive program configuration."); yynerrs++;}
 | PROGRAM NON_RETAIN program_name optional_task_name prev_declared_program_type_name optional_prog_conf_elements
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@4), locf(@5), "':' missing after program name or optional task name in program configuration.");
-	}
-| PROGRAM program_name optional_task_name error prev_declared_program_type_name optional_prog_conf_elements
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@4), locl(@4), "expecting ':' after program name or optional task name in program configuration.");
-	 yyerrok;
-	}
-| PROGRAM RETAIN program_name optional_task_name error prev_declared_program_type_name optional_prog_conf_elements
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@5), locl(@5), "expecting ':' after program name or optional task name in program configuration.");
-	 yyerrok;
-	}
-| PROGRAM NON_RETAIN program_name optional_task_name error prev_declared_program_type_name optional_prog_conf_elements
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@5), locl(@5), "expecting ':' after program name or optional task name in program configuration.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locl(@4), locf(@5), "':' missing after program name or optional task name in non-retentive program configuration."); yynerrs++;}
 | PROGRAM program_name optional_task_name ':' optional_prog_conf_elements
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@4), locf(@5), "no program type defined in program configuration.");
-	}
+  {$$ = NULL; print_err_msg(locl(@4), locf(@5), "no program type defined in program configuration."); yynerrs++;}
 | PROGRAM RETAIN program_name optional_task_name ':' optional_prog_conf_elements
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@5), locf(@6), "no program type defined in program configuration.");
-	}
+  {$$ = NULL; print_err_msg(locl(@5), locf(@6), "no program type defined in retentive program configuration."); yynerrs++;}
 | PROGRAM NON_RETAIN program_name optional_task_name ':' optional_prog_conf_elements
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@5), locf(@6), "no program type defined in program configuration.");
-  }
+  {$$ = NULL; print_err_msg(locl(@5), locf(@6), "no program type defined in non-retentive program configuration."); yynerrs++;}
 /* ERROR_CHECK_END */
 ;
 
@@ -6680,7 +5551,8 @@
 /* ERROR_CHECK_BEGIN */
 | WITH error
   {$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid tack name in optional task name of program configuration.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@1), locf(@2), "no task name defined in optional task name of program configuration.");}
+	 else {print_err_msg(locf(@2), locl(@2), "invalid task name in optional task name of program configuration."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -6694,15 +5566,9 @@
 	{$$ = $2;}
 /* ERROR_CHECK_BEGIN */
 | '(' error ')'
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid program configuration elements in program configuration.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@2), locl(@2), "invalid program configuration elements in program configuration."); yyerrok;}
 | '(' prog_conf_elements error
-  {$$ = NULL;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "')' missing at the end of program configuration elements in program configuration.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locl(@2), locf(@3), "')' missing at the end of program configuration elements in program configuration."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -6714,13 +5580,11 @@
 	{$$ = $1; $$->add_element($3);}
 /* ERROR_CHECK_BEGIN */
 | prog_conf_elements prog_conf_element
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "',' missing in program configuration elements list.");
-	}
+  {$$ = $1; print_err_msg(locl(@1), locf(@2), "',' missing in program configuration elements list."); yynerrs++;}
 | prog_conf_elements ',' error
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid value for program configuration element in program configuration list.");
+  {$$ = $1;
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no value defined for program configuration element in program configuration list.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid value for program configuration element in program configuration list."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -6744,7 +5608,8 @@
 /* ERROR_CHECK_BEGIN */
 | any_identifier WITH error
   {$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid task name in function block configuration.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no task name defined in function block configuration.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid task name in function block configuration."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -6788,33 +5653,21 @@
 	{$$ = new prog_cnxn_sendto_c($1, $3, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | any_symbolic_variable constant
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':=' missing between parameter and value in program configuration element.");
-	}
+  {$$ = NULL; print_err_msg(locl(@1), locf(@2), "':=' missing between parameter and value in program configuration element."); yynerrs++;}
 | any_symbolic_variable enumerated_value
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':=' missing between parameter and value in program configuration element.");
-	}
+  {$$ = NULL; print_err_msg(locl(@1), locf(@2), "':=' missing between parameter and value in program configuration element."); yynerrs++;}
 | any_symbolic_variable data_sink
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':=' or '=>' missing between parameter and variable in program configuration element.");
-	}
-| any_symbolic_variable error prog_data_source
-  {$$ = NULL;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "expecting ':=' or '=>' after parameter in program configuration element.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locl(@1), locf(@2), "':=' or '=>' missing between parameter and variable in program configuration element."); yynerrs++;}
 | any_symbolic_variable ASSIGN error
   {$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid value or variable in program configuration assignment element.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no value or variable defined in program configuration assignment element.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid value or variable in program configuration assignment element."); yyclearin;}
 	 yyerrok;
 	}
 | any_symbolic_variable SENDTO error
   {$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid variable in program configuration sendto element.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no variable defined in program configuration sendto element.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid variable in program configuration sendto element."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -6837,20 +5690,13 @@
 	{$$ = new instance_specific_initializations_c($2, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | VAR_CONFIG END_VAR
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "no variable declared in configuration variable(s) initialization.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "no variable declared in configuration variable(s) initialization."); yynerrs++;}
 | VAR_CONFIG error instance_specific_init_list END_VAR
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unexpected token after 'VAR_CONFIG' in configuration variable(s) initialization.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@2), locl(@2), "unexpected token after 'VAR_CONFIG' in configuration variable(s) initialization."); yyerrok;}
+| VAR_CONFIG instance_specific_init_list error END_OF_INPUT
+	{$$ = NULL; print_err_msg(locf(@1), locl(@1), "unclosed configuration variable(s) initialization."); yyerrok;}
 | VAR_CONFIG error END_VAR
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unknown error in configuration variable(s) initialization.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@2), locl(@2), "unknown error in configuration variable(s) initialization."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -6862,30 +5708,15 @@
 	{$$ = $1; $$->add_element($2);}
 /* ERROR_CHECK_BEGIN */
 | error ';'
-  {$$ = new instance_specific_init_list_c(locloc(@$));
-	 print_err_msg(current_filename, locf(@1), locl(@1), "invalid configuration variable initialization.");
-	 yyerrok;
-	}
+  {$$ = new instance_specific_init_list_c(locloc(@$)); print_err_msg(locf(@1), locl(@1), "invalid configuration variable initialization."); yyerrok;}
 | instance_specific_init error
-  {$$ = new instance_specific_init_list_c(locloc(@$));
-	 print_err_msg(current_filename, locl(@1), locf(@2), "';' missing at the end of configuration variable initialization.");
-	 yyerrok;
-	}
+  {$$ = new instance_specific_init_list_c(locloc(@$)); print_err_msg(locl(@1), locf(@2), "';' missing at the end of configuration variable initialization."); yyerrok;}
 | instance_specific_init_list instance_specific_init error
-  {$$ = $1;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "';' missing at the end of configuration variable initialization.");
-	 yyerrok;
-	}
+  {$$ = $1; print_err_msg(locl(@2), locf(@3), "';' missing at the end of configuration variable initialization."); yyerrok;}
 | instance_specific_init_list error ';'
-  {$$ = $1;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid configuration variable initialization.");
-	 yyerrok;
-	}
+  {$$ = $1; print_err_msg(locf(@2), locl(@2), "invalid configuration variable initialization."); yyerrok;}
 | instance_specific_init_list ';'
-  {$$ = $1;
-	 yynerrs++;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unexpected ';' after configuration variable initialization.");
-	}
+  {$$ = $1; print_err_msg(locf(@2), locl(@2), "unexpected ';' after configuration variable initialization."); yynerrs++;}
 /* ERROR_CHECK_END */
 ;
 
@@ -6918,13 +5749,11 @@
 	{$$ = new fb_initialization_c($1, $3, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | function_block_type_name structure_initialization
+  {$$ = NULL; print_err_msg(locl(@1), locf(@2), "':=' missing between function block name and initialization in function block initialization."); yynerrs++;}
+| function_block_type_name ASSIGN error
   {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':=' missing between function block name and initialization in function block initialization.");
-	}
-| function_block_type_name error structure_initialization
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "expecting ':=' after function block name in function block initialization.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no initial value defined in function block initialization.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid initial value in function block initialization."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -6954,10 +5783,7 @@
 	{$$ = $1; $$->add_element($2);}
 /* ERROR_CHECK_BEGIN */
 | instruction_list error
-  {$$ = $1;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid IL instruction.");
-	 yyerrok;
-	}
+  {$$ = $1; print_err_msg(locf(@2), locl(@2), "invalid IL instruction."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -6970,40 +5796,17 @@
 	{$$ = new il_instruction_c($1, $3, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | error eol_list
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@1), locl(@1), "invalid IL instruction.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@1), locl(@1), "invalid IL instruction."); yyerrok;}
 | il_incomplete_instruction error
-	{$$ = NULL;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "EOL missing at the end of IL instruction.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "EOL missing at the end of IL instruction."); yyerrok;}
 | error ':' il_incomplete_instruction eol_list
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@1), locl(@1), "invalid label in IL instruction.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@1), locl(@1), "invalid label in IL instruction."); yyerrok;}
 | label il_incomplete_instruction eol_list
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':' missing after label in IL instruction.");
-	}
-| label error il_incomplete_instruction eol_list
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "expecting ':' after label in IL instruction.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "':' missing after label in IL instruction."); yynerrs++;}
 | label ':' error eol_list
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid IL instruction.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@3), locl(@3), "invalid IL instruction."); yyerrok;}
 | label ':' il_incomplete_instruction error
-	{$$ = NULL;
-	 print_err_msg(current_filename, locl(@3), locf(@4), "EOL missing at the end of IL instruction.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locl(@3), locf(@4), "EOL missing at the end of IL instruction."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -7122,40 +5925,19 @@
 	{$$ = new il_expression_c($1, NULL, $2, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | il_expr_operator_noclash '(' eol_list error
-  {$$ = NULL;
-	 print_err_msg(current_filename, locl(@3), locf(@4), "')' missing at the end of IL expression.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locl(@3), locf(@4), "')' missing at the end of IL expression."); yyerrok;}
 | il_expr_operator_noclash '(' il_operand eol_list error
-  {$$ = NULL;
-	 print_err_msg(current_filename, locl(@4), locf(@5), "')' missing at the end of IL expression.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locl(@4), locf(@5), "')' missing at the end of IL expression."); yyerrok;}
 | il_expr_operator_noclash '(' eol_list simple_instr_list error
-  {$$ = NULL;
-	 print_err_msg(current_filename, locl(@4), locf(@5), "')' missing at the end of IL expression.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locl(@4), locf(@5), "')' missing at the end of IL expression."); yyerrok;}
 | il_expr_operator_noclash '(' il_operand eol_list simple_instr_list error
-  {$$ = NULL;
-	 print_err_msg(current_filename, locl(@5), locf(@6), "')' missing at the end of IL expression.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locl(@5), locf(@6), "')' missing at the end of IL expression."); yyerrok;}
 | il_expr_operator_clash '(' il_operand eol_list error
-  {$$ = NULL;
-	 print_err_msg(current_filename, locl(@4), locf(@5), "')' missing at the end of IL expression.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locl(@4), locf(@5), "')' missing at the end of IL expression."); yyerrok;}
 | il_expr_operator_clash '(' il_operand eol_list simple_instr_list error
-  {$$ = NULL;
-	 print_err_msg(current_filename, locl(@5), locf(@6), "')' missing at the end of IL expression.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locl(@5), locf(@6), "')' missing at the end of IL expression."); yyerrok;}
 | il_expr_operator_clash_eol_list simple_instr_list error
-  {$$ = NULL;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "')' missing at the end of IL expression.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locl(@2), locf(@3), "')' missing at the end of IL expression."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -7165,10 +5947,7 @@
 	{$$ = new il_jump_operation_c($1, $2, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | il_jump_operator error
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid label defined in IL jump operation.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@2), locl(@2), "invalid label defined in IL jump operation."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -7188,74 +5967,36 @@
 /* ERROR_CHECK_BEGIN */
 | il_call_operator error
   {$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid function block name defined in IL function block call.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@1), locf(@2), "no function block name defined in IL function block call.");}
+	 else {print_err_msg(locf(@2), locl(@2), "invalid function block name in IL function block call."); yyclearin;}
 	 yyerrok;
 	}
 | il_call_operator '(' ')'
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "no function block name defined in IL function block call.");
-	}
+  {$$ = NULL; print_err_msg(locl(@1), locf(@2), "no function block name defined in IL function block call."); yynerrs++;}
 | il_call_operator '(' eol_list ')'
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "no function block name defined in IL function block call.");
-	}
+  {$$ = NULL; print_err_msg(locl(@1), locf(@2), "no function block name defined in IL function block call."); yynerrs++;}
 | il_call_operator '(' il_operand_list ')'
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "no function block name defined in IL function block call.");
-	}
+  {$$ = NULL; print_err_msg(locl(@1), locf(@2), "no function block name defined in IL function block call."); yynerrs++;}
 | il_call_operator '(' eol_list il_param_list ')'
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "no function block name defined in IL function block call.");
-	}
+  {$$ = NULL; print_err_msg(locl(@1), locf(@2), "no function block name defined in IL function block call."); yynerrs++;}
 | il_call_operator error '(' ')'
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid function block name defined in IL function block call.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@2), locl(@2), "invalid function block name defined in IL function block call."); yyerrok;}
 | il_call_operator error '(' eol_list ')'
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid function block name defined in IL function block call.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@2), locl(@2), "invalid function block name defined in IL function block call."); yyerrok;}
 | il_call_operator error '(' il_operand_list ')'
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid function block name defined in IL function block call.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@2), locl(@2), "invalid function block name defined in IL function block call."); yyerrok;}
 | il_call_operator error '(' eol_list il_param_list ')'
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid function block name defined in IL function block call.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@2), locl(@2), "invalid function block name defined in IL function block call."); yyerrok;}
 | il_call_operator prev_declared_fb_name ')'
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "'(' missing after function block name defined in IL function block call.");
-	}
+  {$$ = NULL; print_err_msg(locl(@2), locf(@3), "'(' missing after function block name defined in IL function block call."); yynerrs++;}
 | il_call_operator prev_declared_fb_name il_operand_list ')'
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "'(' missing after function block name defined in IL function block call.");
-	}
+  {$$ = NULL; print_err_msg(locl(@2), locf(@3), "'(' missing after function block name defined in IL function block call."); yynerrs++;}
 | il_call_operator prev_declared_fb_name '(' error
-  {$$ = NULL;
-	 print_err_msg(current_filename, locl(@3), locf(@4), "')' missing at the end of IL function block call.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locl(@3), locf(@4), "')' missing at the end of IL function block call."); yyerrok;}
 | il_call_operator prev_declared_fb_name '(' eol_list error
-  {$$ = NULL;
-	 print_err_msg(current_filename, locl(@4), locf(@5), "')' missing at the end of IL function block call.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locl(@4), locf(@5), "')' missing at the end of IL function block call."); yyerrok;}
 | il_call_operator prev_declared_fb_name '(' il_operand_list error
-  {$$ = NULL;
-	 print_err_msg(current_filename, locl(@4), locf(@5), "')' missing at the end of IL function block call.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locl(@4), locf(@5), "')' missing at the end of IL function block call."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -7325,20 +6066,11 @@
 	{$$ = new il_formal_funct_call_c(il_operator_c_2_identifier_c($1), $2, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | function_name_no_clashes '(' eol_list error ')'
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@4), locl(@4), "invalid parameter list defined in IL formal function call.");
-	 yyerrok;
-	} 
+  {$$ = NULL; print_err_msg(locf(@4), locl(@4), "invalid parameter list defined in IL formal function call."); yyerrok;} 
 | function_name_simpleop_clashes '(' eol_list error ')'
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@4), locl(@4), "invalid parameter list defined in IL formal function call.");
-	 yyerrok;
-	} 
+  {$$ = NULL; print_err_msg(locf(@4), locl(@4), "invalid parameter list defined in IL formal function call."); yyerrok;} 
 | il_expr_operator_clash_eol_list error ')'
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid parameter list defined in IL formal function call.");
-	 yyerrok;
-	} 
+  {$$ = NULL; print_err_msg(locf(@2), locl(@2), "invalid parameter list defined in IL formal function call."); yyerrok;} 
 /* ERROR_CHECK_END */
 ;
 
@@ -7348,10 +6080,7 @@
 	{$$ = $1;}
 /* ERROR_CHECK_BEGIN */
 | il_expr_operator_clash '(' error
-  {$$ = NULL;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "EOL missing after '(' in IL instruction.");
-	 yyerrok;
-	}
+  {$$ = $1; print_err_msg(locl(@2), locf(@3), "EOL missing after '(' in IL instruction."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -7378,18 +6107,11 @@
 	{$$ = $1; $$->add_element($3);}
 /* ERROR_CHECK_BEGIN */
 | il_operand_list2 il_operand
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "',' missing in IL operand list.");
-	}
-| il_formal_funct_call error il_operand
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "expecting ',' in IL operand list.");
-	 yyerrok;
-	}
-| il_formal_funct_call ',' error
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid operand in IL operand list.");
+  {$$ = $1; print_err_msg(locl(@1), locf(@2), "',' missing in IL operand list."); yynerrs++;}
+| il_operand ',' error
+  {$$ = new il_operand_list_c(locloc(@$));
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no operand defined in IL operand list.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid operand name in IL operand list."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -7410,15 +6132,9 @@
 | il_formal_funct_call eol_list
 /* ERROR_CHECK_BEGIN */
 | il_expression error
-  {$$ = NULL;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "EOL missing after expression IL instruction.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locl(@1), locf(@2), "EOL missing after expression IL instruction."); yyerrok;}
 | il_formal_funct_call error
-  {$$ = NULL;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "EOL missing after formal function call IL instruction.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locl(@1), locf(@2), "EOL missing after formal function call IL instruction."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -7444,20 +6160,11 @@
 	{$$ = new il_param_list_c(locloc(@$)); $$->add_element($1);}
 /* ERROR_CHECK_BEGIN */
 | il_param_instruction_list error
-  {$$ = $1;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid parameter assignment in parameter assignment list.");
-	 yyerrok;
-	}
+  {$$ = $1; print_err_msg(locf(@2), locl(@2), "invalid parameter assignment in parameter assignment list."); yyerrok;}
 | il_param_last_instruction il_param_last_instruction
-  {$$ = new il_param_list_c(locloc(@$));
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "',' missing at the end of parameter assignment in parameter assignment list.");
-	}
+  {$$ = new il_param_list_c(locloc(@$)); print_err_msg(locl(@1), locf(@2), "',' missing at the end of parameter assignment in parameter assignment list."); yynerrs++;}
 | il_param_instruction_list il_param_last_instruction il_param_last_instruction
-  {$$ = $1;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "',' missing at the end of parameter assignment in parameter assignment list.");
-	}
+  {$$ = $1; print_err_msg(locl(@2), locf(@3), "',' missing at the end of parameter assignment in parameter assignment list."); yynerrs++;}
 /* ERROR_CHECK_END */
 ;
 
@@ -7470,15 +6177,9 @@
 	{$$ = $1; $$->add_element($2);}
 /* ERROR_CHECK_BEGIN */
 | il_param_last_instruction il_param_instruction
-  {$$ = new il_param_list_c(locloc(@$));
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "',' missing at the end of parameter assignment in parameter assignment list.");
-	}
+  {$$ = new il_param_list_c(locloc(@$)); print_err_msg(locl(@1), locf(@2), "',' missing at the end of parameter assignment in parameter assignment list."); yynerrs++;}
 | il_param_instruction_list il_param_last_instruction il_param_instruction
-  {$$ = $1;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "',' missing at the end of parameter assignment in parameter assignment list.");
-	}
+  {$$ = $1; print_err_msg(locl(@2), locf(@3), "',' missing at the end of parameter assignment in parameter assignment list."); yynerrs++;}
 /* ERROR_CHECK_END */
 ;
 
@@ -7488,15 +6189,9 @@
 | il_param_out_assignment ',' eol_list
 /* ERROR_CHECK_BEGIN */
 | il_param_assignment ',' error
-  {$$ = NULL;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "EOL missing at the end of parameter assignment in parameter assignment list.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locl(@2), locf(@3), "EOL missing at the end of parameter assignment in parameter assignment list."); yyerrok;}
 | il_param_out_assignment ',' error
-  {$$ = NULL;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "EOL missing at the end of parameter out assignment in parameter assignment list.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locl(@2), locf(@3), "EOL missing at the end of parameter out assignment in parameter assignment list."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -7506,15 +6201,9 @@
 | il_param_out_assignment eol_list
 /* ERROR_CHECK_BEGIN */
 | il_param_assignment error
-  {$$ = NULL;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "EOL missing at the end of last parameter assignment in parameter assignment list.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locl(@1), locf(@2), "EOL missing at the end of last parameter assignment in parameter assignment list."); yyerrok;}
 | il_param_out_assignment error
-  {$$ = NULL;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "EOL missing at the end of last parameter out assignment in parameter assignment list.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locl(@1), locf(@2), "EOL missing at the end of last parameter out assignment in parameter assignment list."); yyerrok;}
 /* ERROR_CHECK_END */
 
 ;
@@ -7527,35 +6216,21 @@
 	{$$ = new il_param_assignment_c($1, NULL, $4, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | error il_operand
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@1), locl(@1), "invalid operator in parameter assignment.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@1), locl(@1), "invalid operator in parameter assignment."); yyerrok;}
 | error '(' eol_list simple_instr_list ')'
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@1), locl(@1), "invalid operator in parameter assignment.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@1), locl(@1), "invalid operator in parameter assignment."); yyerrok;}
 | il_assign_operator error
   {$$ = NULL;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "invalid operand defined in parameter assignment.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@1), locf(@2), "no operand defined in parameter assignment.");}
+	 else {print_err_msg(locf(@2), locl(@2), "invalid operand in parameter assignment."); yyclearin;}
 	 yyerrok;
 	}
 | il_assign_operator '(' eol_list ')'
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@3), locf(@4), "no instruction list defined in parameter assignment.");
-	}
+  {$$ = NULL; print_err_msg(locl(@3), locf(@4), "no instruction list defined in parameter assignment."); yynerrs++;}
 | il_assign_operator '(' eol_list error ')'
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@4), locl(@4), "invalid instruction list defined in parameter assignment.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@4), locl(@4), "invalid instruction list defined in parameter assignment."); yyerrok;}
 | il_assign_operator '(' eol_list simple_instr_list error
-  {$$ = NULL;
-	 print_err_msg(current_filename, locl(@4), locf(@5), "')' missing at the end of instruction list defined in parameter assignment.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locl(@4), locf(@5), "')' missing at the end of instruction list defined in parameter assignment."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -7566,7 +6241,8 @@
 /* ERROR_CHECK_BEGIN */
 | il_assign_out_operator error
   {$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid variable defined in parameter out assignment.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@1), locf(@2), "no variable defined in IL operand list.");}
+	 else {print_err_msg(locf(@2), locl(@2), "invalid variable in IL operand list."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -7712,10 +6388,7 @@
   any_identifier ASSIGN
 /* ERROR_CHECK_BEGIN */
 | error ASSIGN
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@1), locl(@1), "invalid parameter defined in parameter assignment.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@1), locl(@1), "invalid parameter defined in parameter assignment."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -7730,20 +6403,11 @@
 	{$$ = new il_assign_out_operator_c(new not_paramassign_c(locloc(@1)), $2, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | error SENDTO
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@1), locl(@1), "invalid parameter defined in parameter out assignment.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@1), locl(@1), "invalid parameter defined in parameter out assignment."); yyerrok;}
 | NOT SENDTO
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "no parameter defined in parameter out assignment.");
-	}
+  {$$ = NULL; print_err_msg(locl(@1), locf(@2), "no parameter defined in parameter out assignment."); yynerrs++;}
 | NOT error SENDTO
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid parameter defined in parameter out assignment.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@2), locl(@2), "invalid parameter defined in parameter out assignment."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -7779,7 +6443,8 @@
 /* ERROR_CHECK_BEGIN */
 | expression OR error
   {$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid expression after 'OR' in ST expression.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no expression defined after 'OR' in ST expression.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid expression after 'OR' in ST expression."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -7792,7 +6457,8 @@
 /* ERROR_CHECK_BEGIN */
 | xor_expression XOR error
   {$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid expression after 'XOR' in ST expression.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no expression defined after 'XOR' in ST expression.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid expression after 'XOR' in ST expression."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -7809,24 +6475,27 @@
  *       AND2!
  *       This means that the first rule with '&' is actually not required,
  *       but we leave it in nevertheless just in case we later decide
- *       to remove theh AND2 token...
+ *       to remove the AND2 token...
  */
 | and_expression AND2 comparison
 	{$$ = new and_expression_c($1, $3, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | and_expression '&' error
   {$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid expression after '&' in ST expression.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no expression defined after '&' in ST expression.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid expression after '&' in ST expression."); yyclearin;}
 	 yyerrok;
 	}
 | and_expression AND error
   {$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid expression after 'AND' in ST expression.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no expression defined after 'AND' in ST expression.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid expression after 'AND' in ST expression."); yyclearin;}
 	 yyerrok;
 	}
 | and_expression AND2 error
   {$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid expression after '&' in ST expression.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no expression defined after '&' in ST expression.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid expression after '&' in ST expression."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -7841,12 +6510,14 @@
 /* ERROR_CHECK_BEGIN */
 | comparison '=' error
   {$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid expression after '=' in ST expression.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no expression defined after '=' in ST expression.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid expression after '=' in ST expression."); yyclearin;}
 	 yyerrok;
 	}
 | comparison OPER_NE error
   {$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid expression after '<>' in ST expression.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no expression defined after '<>' in ST expression.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid expression after '<>' in ST expression."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -7865,22 +6536,26 @@
 /* ERROR_CHECK_BEGIN */
 | equ_expression '<' error
   {$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid expression after '<' in ST expression.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no expression defined after '<' in ST expression.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid expression after '<' in ST expression."); yyclearin;}
 	 yyerrok;
 	}
 | equ_expression '>' error
   {$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid expression after '>' in ST expression.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no expression defined after '>' in ST expression.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid expression after '>' in ST expression."); yyclearin;}
 	 yyerrok;
 	}
 | equ_expression OPER_LE error
   {$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid expression after '<=' in ST expression.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no expression defined after '<=' in ST expression.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid expression after '<=' in ST expression."); yyclearin;}
 	 yyerrok;
 	}
 | equ_expression OPER_GE error
   {$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid expression after '>=' in ST expression.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no expression defined after '>=' in ST expression.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid expression after '>=' in ST expression."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -7899,12 +6574,14 @@
 /* ERROR_CHECK_BEGIN */
 | add_expression '+' error
   {$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid expression after '+' in ST expression.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no expression defined after '+' in ST expression.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid expression after '+' in ST expression."); yyclearin;}
 	 yyerrok;
 	}
 | add_expression '-' error
   {$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid expression after '-' in ST expression.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no expression defined after '-' in ST expression.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid expression after '-' in ST expression."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -7925,17 +6602,20 @@
 /* ERROR_CHECK_BEGIN */
 | term '*' error
   {$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid expression after '*' in ST expression.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no expression defined after '*' in ST expression.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid expression after '*' in ST expression."); yyclearin;}
 	 yyerrok;
 	}
 | term '/' error
   {$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid expression after '/' in ST expression.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no expression defined after '/' in ST expression.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid expression after '/' in ST expression."); yyclearin;}
 	 yyerrok;
 	}
 | term MOD error
   {$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid expression after 'MOD' in ST expression.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no expression defined after 'MOD' in ST expression.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid expression after 'MOD' in ST expression."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -7952,7 +6632,8 @@
 /* ERROR_CHECK_BEGIN */
 | power_expression OPER_EXP error
   {$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid expression after '**' in ST expression.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no expression defined after '**' in ST expression.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid expression after '**' in ST expression."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -7968,12 +6649,14 @@
 /* ERROR_CHECK_BEGIN */
 | '-' error
   {$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid expression after '-' in ST expression.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@1), locf(@2), "no expression defined after '-' in ST expression.");}
+	 else {print_err_msg(locf(@2), locl(@2), "invalid expression after '-' in ST expression."); yyclearin;}
 	 yyerrok;
 	}
 | NOT error
   {$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid expression after 'NOT' in ST expression.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@1), locf(@2), "no expression defined after 'NOT' in ST expression.");}
+	 else {print_err_msg(locf(@2), locl(@2), "invalid expression after 'NOT' in ST expression."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -8018,10 +6701,7 @@
 |  function_invocation
 /* ERROR_CHECK_BEGIN */
 | '(' expression error
-  {$$ = NULL;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "')' missing at the end of expression in ST expression.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locl(@2), locf(@3), "')' missing at the end of expression in ST expression."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -8060,40 +6740,15 @@
 	{$$ = new function_invocation_c($1, $3, locloc(@$));}
 /* ERROR_CHECK_BEGIN */ 
 | function_name_no_NOT_clashes param_assignment_formal_list ')'
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "'(' missing after function name in ST expression.");
-	}
-| function_name_no_NOT_clashes error param_assignment_formal_list ')'
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "expecting '(' after function name in ST expression.");
-	 yyerrok;
-	}
-| function_name_no_NOT_clashes error param_assignment_nonformal_list ')'
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "expecting '(' after function name in ST expression.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locl(@1), locf(@2), "'(' missing after function name in ST expression."); yynerrs++;}
 | function_name_no_NOT_clashes '(' ')'
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "no parameter defined in function invocation of ST expression.");
-	}
+  {$$ = NULL; print_err_msg(locl(@2), locf(@3), "no parameter defined in function invocation of ST expression."); yynerrs++;}
 | function_name_no_NOT_clashes '(' error ')'
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid parameter(s) defined in function invocation of ST expression.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@3), locl(@3), "invalid parameter(s) defined in function invocation of ST expression."); yyerrok;}
 | function_name_no_NOT_clashes '(' param_assignment_formal_list error
-  {$$ = NULL;
-	 print_err_msg(current_filename, locl(@3), locf(@4), "')' missing at the end of function invocation in ST expression.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locl(@3), locf(@4), "')' missing at the end of function invocation in ST expression."); yyerrok;}
 | function_name_no_NOT_clashes '(' param_assignment_nonformal_list error
-  {$$ = NULL;
-	 print_err_msg(current_filename, locl(@3), locf(@4), "')' missing at the end of function invocation in ST expression.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locl(@3), locf(@4), "')' missing at the end of function invocation in ST expression."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -8112,25 +6767,13 @@
 	{$$ = $1; $$->add_element($2);}
 /* ERROR_CHECK_BEGIN */
 | statement error
-	{$$ = new statement_list_c(locloc(@$));
-	 print_err_msg(current_filename, locl(@1), locf(@2), "';' missing at the end of statement in ST statement.");
-	 yyerrok;
-	}
+	{$$ = new statement_list_c(locloc(@$)); print_err_msg(locl(@1), locf(@2), "';' missing at the end of statement in ST statement."); yyerrok;}
 | statement_list statement error
-	{$$ = $1;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "';' missing at the end of statement in ST statement.");
-	 yyerrok;
-	}
+	{$$ = $1; print_err_msg(locl(@2), locf(@3), "';' missing at the end of statement in ST statement."); yyerrok;}
 | statement_list error ';'
-	{$$ = $1;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid statement in ST statement.");
-	 yyerrok;
-	}
+	{$$ = $1; print_err_msg(locf(@2), locl(@2), "invalid statement in ST statement."); yyerrok;}
 | statement_list ';'
-	{$$ = $1;
-	 yynerrs++;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unexpected ';' after statement in ST statement.");
-	}
+	{$$ = $1; print_err_msg(locf(@2), locl(@2), "unexpected ';' after statement in ST statement."); yynerrs++;}
 /* ERROR_CHECK_END */
 ;
 
@@ -8150,9 +6793,12 @@
   variable ASSIGN expression
 	{$$ = new assignment_statement_c($1, $3, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
+| error ASSIGN expression
+  {$$ = NULL; print_err_msg(locf(@1), locl(@1), "invalid variable before ':=' in ST assignment statement."); yyerrok;}
 | variable ASSIGN error
 	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid expression after ':=' in ST assignment statement.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no expression defined after ':=' in ST assignment statement.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid expression after ':=' in ST assignment statement."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -8185,50 +6831,17 @@
 	{$$ = new fb_invocation_c($1, $3, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | prev_declared_fb_name ')'
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "'(' missing after function block name in ST statement.");
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "'(' missing after function block name in ST statement."); yynerrs++;}
 | prev_declared_fb_name param_assignment_formal_list ')'
-	{$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "'(' missing after function block name in ST statement.");
-	}
-| prev_declared_fb_name error ')'
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "expecting '(' after function block name in ST statement.");
-	 yyerrok;
-	}
-| prev_declared_fb_name error param_assignment_formal_list ')'
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "expecting '(' after function block name in ST statement.");
-	 yyerrok;
-	}
-| prev_declared_fb_name error param_assignment_nonformal_list ')'
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "expecting '(' after function block name in ST statement.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locl(@1), locf(@2), "'(' missing after function block name in ST statement."); yynerrs++;}
 | prev_declared_fb_name '(' error ')'
-	{$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid parameter list in function block invocation in ST statement.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locf(@3), locl(@3), "invalid parameter list in function block invocation in ST statement."); yyerrok;}
 | prev_declared_fb_name '(' error
-	{$$ = NULL;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "')' missing after parameter list of function block invocation in ST statement.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locl(@2), locf(@3), "')' missing after parameter list of function block invocation in ST statement."); yyerrok;}
 | prev_declared_fb_name '(' param_assignment_formal_list error
-	{$$ = NULL;
-	 print_err_msg(current_filename, locl(@3), locf(@4), "')' missing after parameter list of function block invocation in ST statement.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locl(@3), locf(@4), "')' missing after parameter list of function block invocation in ST statement."); yyerrok;}
 | prev_declared_fb_name '(' param_assignment_nonformal_list error
-	{$$ = NULL;
-	 print_err_msg(current_filename, locl(@3), locf(@4), "')' missing after parameter list of function block invocation in ST statement.");
-	 yyerrok;
-	}
+	{$$ = NULL; print_err_msg(locl(@3), locf(@4), "')' missing after parameter list of function block invocation in ST statement."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -8243,14 +6856,10 @@
 | param_assignment_formal_list ',' param_assignment_formal
 	{$$ = $1; $$->add_element($3);}
 /* ERROR_CHECK_BEGIN */
-| param_assignment_formal_list error param_assignment_formal
-  {$$ = $1;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "expecting ',' in ST parameter assignment list.");
-	 yyerrok;
-	}
 | param_assignment_formal_list ',' error
   {$$ = $1;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid parameter assignment in ST parameter assignment list.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no parameter assignment defined in ST parameter assignment list.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid parameter assignment in ST parameter assignment list."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -8268,7 +6877,8 @@
 /* ERROR_CHECK_BEGIN */
 | param_assignment_nonformal_list ',' error
   {$$ = $1;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid parameter assignment in ST parameter assignment list.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no parameter assignment defined in ST parameter assignment list.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid parameter assignment in ST parameter assignment list."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -8321,27 +6931,24 @@
 /* ERROR_CHECK_BEGIN */
 | any_identifier ASSIGN error
   {$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid expression in ST formal parameter assignment.");
-	 yyerrok;
-	} 
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no expression defined in ST formal parameter assignment.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid expression in ST formal parameter assignment."); yyclearin;}
+	 yyerrok;
+	}
 | sendto_identifier SENDTO error
   {$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid expression in ST formal parameter out assignment.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no expression defined in ST formal parameter out assignment.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid expression in ST formal parameter out assignment."); yyclearin;}
 	 yyerrok;
 	}
 | NOT SENDTO variable
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "no parameter name defined in ST formal parameter out negated assignment.");
-	}
+  {$$ = NULL; print_err_msg(locl(@1), locf(@2), "no parameter name defined in ST formal parameter out negated assignment."); yynerrs++;}
 | NOT error SENDTO variable
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid parameter name defined in ST formal parameter out negated assignment.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@2), locl(@2), "invalid parameter name defined in ST formal parameter out negated assignment."); yyerrok;}
 | NOT sendto_identifier SENDTO error
   {$$ = NULL;
-	 print_err_msg(current_filename, locf(@4), locl(@4), "invalid expression in ST formal parameter out negated assignment.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@3), locf(@4), "no expression defined in ST formal parameter out negated assignment.");}
+	 else {print_err_msg(locf(@4), locl(@4), "invalid expression in ST formal parameter out negated assignment."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -8367,60 +6974,33 @@
 	{$$ = new if_statement_c($2, $4, $5, $7, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | IF THEN statement_list elseif_statement_list END_IF
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "no test expression defined in ST 'IF' statement.");
-	}
+  {$$ = NULL; print_err_msg(locl(@1), locf(@2), "no test expression defined in ST 'IF' statement."); yynerrs++;}
 | IF THEN statement_list elseif_statement_list ELSE statement_list END_IF
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "no test expression defined in ST 'IF' statement.");
-	}
+  {$$ = NULL; print_err_msg(locl(@1), locf(@2), "no test expression defined in ST 'IF' statement."); yynerrs++;}
 | IF error THEN statement_list elseif_statement_list END_IF
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid test expression defined for ST 'IF' statement.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@2), locl(@2), "invalid test expression defined for ST 'IF' statement."); yyerrok;}
 | IF error THEN statement_list elseif_statement_list ELSE statement_list END_IF
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid test expression defined for ST 'IF' statement.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@2), locl(@2), "invalid test expression defined for ST 'IF' statement."); yyerrok;}
 | IF expression error statement_list elseif_statement_list END_IF
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "expecting 'THEN' after test expression in ST 'IF' statement.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@3), locl(@3), "expecting 'THEN' after test expression in ST 'IF' statement."); yyerrok;}
 | IF expression error statement_list elseif_statement_list ELSE statement_list END_IF
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "expecting 'THEN' after test expression in ST 'IF' statement.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@3), locl(@3), "expecting 'THEN' after test expression in ST 'IF' statement."); yyerrok;}
 | IF expression THEN elseif_statement_list END_IF
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@3), locf(@4), "no statement defined after 'THEN' in ST 'IF' statement.");
-	}
+  {$$ = NULL; print_err_msg(locl(@3), locf(@4), "no statement defined after 'THEN' in ST 'IF' statement."); yynerrs++;}
 | IF expression THEN elseif_statement_list ELSE statement_list END_IF
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@3), locf(@4), "no statement defined after 'THEN' in ST 'IF' statement.");
-	}
+  {$$ = NULL; print_err_msg(locl(@3), locf(@4), "no statement defined after 'THEN' in ST 'IF' statement."); yynerrs++;}
 | IF expression THEN statement_list elseif_statement_list ELSE END_IF
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@6), locf(@7), "no statement defined after 'ELSE' in ST 'IF' statement.");
-	}
+  {$$ = NULL; print_err_msg(locl(@6), locf(@7), "no statement defined after 'ELSE' in ST 'IF' statement."); yynerrs++;}
 | IF expression THEN statement_list elseif_statement_list ELSE error END_IF
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@7), locl(@7), "invalid statement defined after 'ELSE' in ST 'IF' statement.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@7), locl(@7), "invalid statement defined after 'ELSE' in ST 'IF' statement."); yynerrs++; yyerrok;}
+| IF expression error END_OF_INPUT
+  {$$ = NULL; print_err_msg(locf(@1), locl(@2), "unclosed 'IF' statement in ST."); yyerrok;}
+| IF expression THEN statement_list elseif_statement_list END_OF_INPUT
+  {$$ = NULL; print_err_msg(locf(@1), locl(@3), "unclosed 'IF' statement in ST."); yynerrs++;}
+| IF expression THEN statement_list elseif_statement_list ELSE statement_list END_OF_INPUT
+  {$$ = NULL; print_err_msg(locf(@1), locl(@3), "unclosed 'IF' statement in ST."); yynerrs++;}
 | IF error END_IF
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unknown error in ST 'IF' statement.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@2), locl(@2), "unknown error in ST 'IF' statement."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -8438,25 +7018,13 @@
 	{$$ = new elseif_statement_c($2, $4, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | ELSIF THEN statement_list
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "no test expression defined for 'ELSEIF' statement in ST 'IF' statement.");
-	}
+  {$$ = NULL; print_err_msg(locl(@1), locf(@2), "no test expression defined for 'ELSEIF' statement in ST 'IF' statement."); yynerrs++;}
 | ELSIF error THEN statement_list
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid test expression defined for 'ELSEIF' statement in ST 'IF' statement.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@2), locl(@2), "invalid test expression defined for 'ELSEIF' statement in ST 'IF' statement."); yyerrok;}
 | ELSIF expression error statement_list
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "expecting 'THEN' after test expression in 'ELSEIF' statement of ST 'IF' statement.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@3), locl(@3), "expecting 'THEN' after test expression in 'ELSEIF' statement of ST 'IF' statement."); yyerrok;}
 | ELSIF expression THEN error
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@4), locl(@4), "invalid statement list in 'ELSEIF' statement of ST 'IF' statement.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@4), locl(@4), "invalid statement list in 'ELSEIF' statement of ST 'IF' statement."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -8468,70 +7036,37 @@
 	{$$ = new case_statement_c($2, $4, $6, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | CASE OF case_element_list END_CASE
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "no test expression defined in ST 'CASE' statement.");
-	}
+  {$$ = NULL; print_err_msg(locl(@1), locf(@2), "no test expression defined in ST 'CASE' statement."); yynerrs++;}
 | CASE OF case_element_list ELSE statement_list END_CASE
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "no test expression defined in ST 'CASE' statement.");
-	}
+  {$$ = NULL; print_err_msg(locl(@1), locf(@2), "no test expression defined in ST 'CASE' statement."); yynerrs++;}
 | CASE error OF case_element_list END_CASE
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid test expression defined for ST 'CASE' statement.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@2), locl(@2), "invalid test expression defined for ST 'CASE' statement."); yyerrok;}
 | CASE error OF case_element_list ELSE statement_list END_CASE
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid test expression defined for ST 'CASE' statement.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@2), locl(@2), "invalid test expression defined for ST 'CASE' statement."); yyerrok;}
 | CASE expression error case_element_list END_CASE
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "expecting 'OF' after test expression in ST 'CASE' statement.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@3), locl(@3), "expecting 'OF' after test expression in ST 'CASE' statement."); yyerrok;}
 | CASE expression error case_element_list ELSE statement_list END_CASE
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "expecting 'OF' after test expression in ST 'CASE' statement.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@3), locl(@3), "expecting 'OF' after test expression in ST 'CASE' statement."); yyerrok;}
 | CASE expression OF END_CASE
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@3), locf(@4), "no case element(s) defined after 'OF' in ST 'CASE' statement.");
-	}
+  {$$ = NULL; print_err_msg(locl(@3), locf(@4), "no case element(s) defined after 'OF' in ST 'CASE' statement."); yynerrs++;}
 | CASE expression OF ELSE statement_list END_CASE
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@3), locf(@4), "no case element(s) defined after 'OF' in ST 'CASE' statement.");
-	}
+  {$$ = NULL; print_err_msg(locl(@3), locf(@4), "no case element(s) defined after 'OF' in ST 'CASE' statement."); yynerrs++;}
 | CASE expression OF error END_CASE
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@4), locl(@4), "invalid case element(s) defined after 'OF' in ST 'CASE' statement.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@4), locl(@4), "invalid case element(s) defined after 'OF' in ST 'CASE' statement."); yyerrok;}
 | CASE expression OF error ELSE statement_list END_CASE
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@4), locl(@4), "invalid case element(s) defined after 'OF' in ST 'CASE' statement.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@4), locl(@4), "invalid case element(s) defined after 'OF' in ST 'CASE' statement."); yyerrok;}
 | CASE expression OF case_element_list ELSE END_CASE
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@5), locf(@6), "no statement defined after 'ELSE' in ST 'CASE' statement.");
-	}
+  {$$ = NULL; print_err_msg(locl(@5), locf(@6), "no statement defined after 'ELSE' in ST 'CASE' statement."); yynerrs++;}
 | CASE expression OF case_element_list ELSE error END_CASE
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@6), locl(@6), "invalid statement defined after 'ELSE' in ST 'CASE' statement.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@6), locl(@6), "invalid statement defined after 'ELSE' in ST 'CASE' statement."); yyerrok;}
+| CASE expression error END_OF_INPUT
+  {$$ = NULL; print_err_msg(locf(@1), locl(@2), "unclosed 'CASE' statement in ST."); yyerrok;}
+| CASE expression OF case_element_list END_OF_INPUT
+  {$$ = NULL; print_err_msg(locf(@1), locl(@3), "unclosed 'CASE' statement in ST."); yynerrs++;}
+| CASE expression OF case_element_list ELSE statement_list END_OF_INPUT
+  {$$ = NULL; print_err_msg(locf(@1), locl(@3), "unclosed 'CASE' statement in ST."); yynerrs++;}
 | CASE error END_CASE
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unknown error in ST 'CASE' statement.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@2), locl(@2), "unknown error in ST 'CASE' statement."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -8550,15 +7085,9 @@
 	{$$ = new case_element_c($1, $3, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | case_list statement_list
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "':' missing after case list in ST 'CASE' statement.");
-	}
+  {$$ = NULL; print_err_msg(locl(@1), locf(@2), "':' missing after case list in ST 'CASE' statement."); yynerrs++;}
 | case_list ':' error
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid statement in case element of ST 'CASE' statement.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@3), locl(@3), "invalid statement in case element of ST 'CASE' statement."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -8571,7 +7100,8 @@
 /* ERROR_CHECK_BEGIN */
 | case_list ',' error
   {$$ = $1;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "invalid case in case list of ST parameter assignment list.");
+	 if (is_current_syntax_token()) {print_err_msg(locl(@2), locf(@3), "no case defined in case list of ST parameter assignment list.");}
+	 else {print_err_msg(locf(@3), locl(@3), "invalid case in case list of ST parameter assignment list."); yyclearin;}
 	 yyerrok;
 	}
 /* ERROR_CHECK_END */
@@ -8606,115 +7136,59 @@
 	{$$ = new for_statement_c($2, $4, $6, NULL, $8, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | FOR ASSIGN expression TO expression BY expression DO statement_list END_FOR
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "no control variable defined in ST 'FOR' statement.");
-	}
+  {$$ = NULL; print_err_msg(locl(@1), locf(@2), "no control variable defined in ST 'FOR' statement."); yynerrs++;}
 | FOR ASSIGN expression TO expression DO statement_list END_FOR
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "no control variable defined in ST 'FOR' statement.");
-	}
+  {$$ = NULL; print_err_msg(locl(@1), locf(@2), "no control variable defined in ST 'FOR' statement."); yynerrs++;}
 | FOR error ASSIGN expression TO expression BY expression DO statement_list END_FOR
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid control variable defined for ST 'FOR' statement.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@2), locl(@2), "invalid control variable defined for ST 'FOR' statement."); yyerrok;}
 | FOR error ASSIGN expression TO expression DO statement_list END_FOR
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid control variable defined for ST 'FOR' statement.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@2), locl(@2), "invalid control variable defined for ST 'FOR' statement."); yyerrok;}
 | FOR control_variable expression TO expression BY expression DO statement_list END_FOR
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "':=' missing between control variable and start expression in ST 'FOR' statement.");
-	}
+  {$$ = NULL; print_err_msg(locl(@2), locf(@3), "':=' missing between control variable and start expression in ST 'FOR' statement."); yynerrs++;}
 | FOR control_variable expression TO expression DO statement_list END_FOR
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@2), locf(@3), "':=' missing between control variable and start expression in ST 'FOR' statement.");
-	}
+  {$$ = NULL; print_err_msg(locl(@2), locf(@3), "':=' missing between control variable and start expression in ST 'FOR' statement."); yynerrs++;}
 | FOR control_variable error expression TO expression BY expression DO statement_list END_FOR
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "expecting ':=' between control variable and start expression in ST 'FOR' statement.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@3), locl(@3), "expecting ':=' between control variable and start expression in ST 'FOR' statement."); yyerrok;}
 | FOR control_variable error expression TO expression DO statement_list END_FOR
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "expecting ':=' between control variable and start expression in ST 'FOR' statement.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@3), locl(@3), "expecting ':=' between control variable and start expression in ST 'FOR' statement."); yyerrok;}
 | FOR control_variable ASSIGN TO expression BY expression DO statement_list END_FOR
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@3), locf(@4), "no start expression defined in ST 'FOR' statement.");
-	}
+  {$$ = NULL; print_err_msg(locl(@3), locf(@4), "no start expression defined in ST 'FOR' statement."); yynerrs++;}
 | FOR control_variable ASSIGN TO expression DO statement_list END_FOR
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@3), locf(@4), "no start expression defined in ST 'FOR' statement.");
-	}
+  {$$ = NULL; print_err_msg(locl(@3), locf(@4), "no start expression defined in ST 'FOR' statement."); yynerrs++;}
 | FOR control_variable ASSIGN error TO expression BY expression DO statement_list END_FOR
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@4), locl(@4), "invalid start expression defined in ST 'FOR' statement.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@4), locl(@4), "invalid start expression defined in ST 'FOR' statement."); yyerrok;}
 | FOR control_variable ASSIGN error TO expression DO statement_list END_FOR
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@4), locl(@4), "invalid start expression in ST 'FOR' statement.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@4), locl(@4), "invalid start expression in ST 'FOR' statement."); yyerrok;}
 | FOR control_variable ASSIGN expression error expression BY expression DO statement_list END_FOR
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@5), locl(@5), "expecting 'TO' between start expression and end expression in ST 'FOR' statement.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@5), locl(@5), "expecting 'TO' between start expression and end expression in ST 'FOR' statement."); yyerrok;}
 | FOR control_variable ASSIGN expression error expression DO statement_list END_FOR
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@5), locl(@5), "expecting 'TO' between start expression and end expression in ST 'FOR' statement.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@5), locl(@5), "expecting 'TO' between start expression and end expression in ST 'FOR' statement."); yyerrok;}
 | FOR control_variable ASSIGN expression TO expression error expression DO statement_list END_FOR
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@7), locl(@7), "expecting 'BY' between end expression and step expression in ST 'FOR' statement.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@7), locl(@7), "expecting 'BY' between end expression and step expression in ST 'FOR' statement."); yyerrok;}
 | FOR control_variable ASSIGN expression TO expression BY expression error statement_list END_FOR
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@9), locl(@9), "expecting 'DO' after step expression in ST 'FOR' statement.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@9), locl(@9), "expecting 'DO' after step expression in ST 'FOR' statement."); yyerrok;}
 | FOR control_variable ASSIGN expression TO expression error statement_list END_FOR
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@7), locl(@7), "expecting 'DO' after end expression in ST 'FOR' statement.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@7), locl(@7), "expecting 'DO' after end expression in ST 'FOR' statement."); yyerrok;}
 | FOR control_variable ASSIGN expression TO expression BY expression DO END_FOR
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@9), locf(@10), "no statement(s) defined after 'DO' in ST 'FOR' statement.");
-	}
+  {$$ = NULL; print_err_msg(locl(@9), locf(@10), "no statement(s) defined after 'DO' in ST 'FOR' statement."); yynerrs++;}
 | FOR control_variable ASSIGN expression TO expression DO END_FOR
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@7), locf(@8), "no statement(s) defined after 'DO' in ST 'FOR' statement.");
-	}
+  {$$ = NULL; print_err_msg(locl(@7), locf(@8), "no statement(s) defined after 'DO' in ST 'FOR' statement."); yynerrs++;}
 | FOR control_variable ASSIGN expression TO expression BY expression DO error END_FOR
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@10), locl(@10), "invalid statement(s) defined after 'DO' in ST 'FOR' statement.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@10), locl(@10), "invalid statement(s) defined after 'DO' in ST 'FOR' statement."); yyerrok;}
 | FOR control_variable ASSIGN expression TO expression DO error END_FOR
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@8), locl(@8), "invalid statement(s) defined after 'DO' in ST 'FOR' statement.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@8), locl(@8), "invalid statement(s) defined after 'DO' in ST 'FOR' statement."); yyerrok;}
+| FOR control_variable error END_OF_INPUT
+  {$$ = NULL; print_err_msg(locf(@1), locl(@1), "unclosed 'FOR' statement in ST."); yyerrok;}
+| FOR control_variable ASSIGN expression error END_OF_INPUT
+  {$$ = NULL; print_err_msg(locf(@1), locl(@1), "unclosed 'FOR' statement in ST."); yyerrok;}
+| FOR control_variable ASSIGN expression TO expression DO statement_list END_OF_INPUT
+  {$$ = NULL; print_err_msg(locf(@1), locl(@1), "unclosed 'FOR' statement in ST."); yynerrs++;}
+| FOR control_variable ASSIGN expression TO expression BY expression error END_OF_INPUT
+  {$$ = NULL; print_err_msg(locf(@1), locl(@1), "unclosed 'FOR' statement in ST."); yyerrok;}
+| FOR control_variable ASSIGN expression TO expression BY expression DO statement_list END_OF_INPUT
+  {$$ = NULL; print_err_msg(locf(@1), locl(@1), "unclosed 'FOR' statement in ST."); yynerrs++;}
 | FOR error END_FOR
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unknown error in ST 'FOR' statement.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@2), locl(@2), "unknown error in ST 'FOR' statement."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -8748,35 +7222,21 @@
 	{$$ = new while_statement_c($2, $4, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | WHILE DO statement_list END_WHILE
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "no test expression defined in ST 'WHILE' statement.");
-	}
+  {$$ = NULL; print_err_msg(locl(@1), locf(@2), "no test expression defined in ST 'WHILE' statement."); yynerrs++;}
 | WHILE error DO statement_list END_WHILE
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid test expression defined for ST 'WHILE' statement.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@2), locl(@2), "invalid test expression defined for ST 'WHILE' statement."); yyerrok;}
 | WHILE expression error statement_list END_WHILE
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@3), locl(@3), "expecting 'DO' after test expression in ST 'WHILE' statement.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@3), locl(@3), "expecting 'DO' after test expression in ST 'WHILE' statement."); yyerrok;}
 | WHILE expression DO END_WHILE
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@3), locf(@4), "no statement(s) defined after 'DO' in ST 'WHILE' statement.");
-	}
+  {$$ = NULL; print_err_msg(locl(@3), locf(@4), "no statement(s) defined after 'DO' in ST 'WHILE' statement."); yynerrs++;}
 | WHILE expression DO error END_WHILE
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@4), locl(@4), "invalid statement(s) defined after 'DO' in ST 'WHILE' statement.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@4), locl(@4), "invalid statement(s) defined after 'DO' in ST 'WHILE' statement."); yyerrok;}
+| WHILE expression error END_OF_INPUT
+  {$$ = NULL; print_err_msg(locf(@1), locl(@1), "unclosed 'WHILE' statement in ST."); yyerrok;}
+| WHILE expression DO statement_list END_OF_INPUT
+  {$$ = NULL; print_err_msg(locf(@1), locl(@1), "unclosed 'WHILE' statement in ST."); yynerrs++;}
 | WHILE error END_WHILE
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unknown error in ST 'WHILE' statement.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@2), locl(@2), "unknown error in ST 'WHILE' statement."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -8786,30 +7246,19 @@
 	{$$ = new repeat_statement_c($2, $4, locloc(@$));}
 /* ERROR_CHECK_BEGIN */
 | REPEAT UNTIL expression END_REPEAT
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@1), locf(@2), "no statement(s) defined after 'REPEAT' in ST 'REPEAT' statement.");
-	}
+  {$$ = NULL; print_err_msg(locl(@1), locf(@2), "no statement(s) defined after 'REPEAT' in ST 'REPEAT' statement."); yynerrs++;}
 | REPEAT error UNTIL expression END_REPEAT
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "invalid statement(s) defined after 'REPEAT' for ST 'REPEAT' statement.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@2), locl(@2), "invalid statement(s) defined after 'REPEAT' for ST 'REPEAT' statement."); yyerrok;}
 | REPEAT statement_list UNTIL END_REPEAT
-  {$$ = NULL;
-	 yynerrs++;
-	 print_err_msg(current_filename, locl(@3), locf(@4), "no test expression defined after 'UNTIL' in ST 'REPEAT' statement.");
-	}
+  {$$ = NULL; print_err_msg(locl(@3), locf(@4), "no test expression defined after 'UNTIL' in ST 'REPEAT' statement.");}
 | REPEAT statement_list UNTIL error END_REPEAT
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@4), locl(@4), "invalid test expression defined after 'UNTIL' in ST 'REPEAT' statement.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@4), locl(@4), "invalid test expression defined after 'UNTIL' in ST 'REPEAT' statement."); yyerrok;}
+| REPEAT statement_list END_OF_INPUT
+  {$$ = NULL; print_err_msg(locf(@1), locl(@1), "unclosed 'REPEAT' statement in ST."); yynerrs++;}
+| REPEAT statement_list UNTIL expression error END_OF_INPUT
+  {$$ = NULL; print_err_msg(locf(@1), locl(@1), "unclosed 'REPEAT' statement in ST."); yyerrok;}
 | REPEAT error END_REPEAT
-  {$$ = NULL;
-	 print_err_msg(current_filename, locf(@2), locl(@2), "unknown error in ST 'REPEAT' statement.");
-	 yyerrok;
-	}
+  {$$ = NULL; print_err_msg(locf(@2), locl(@2), "unknown error in ST 'REPEAT' statement."); yyerrok;}
 /* ERROR_CHECK_END */
 ;
 
@@ -8831,7 +7280,7 @@
 /* variables defined in code generated by flex... */
 extern FILE *yyin;
 extern int yylineno;
-
+extern tracking_t* current_tracking;
 
 
 /* A global flag used to tell the parser if overloaded funtions should be allowed.
@@ -8862,17 +7311,50 @@
 /*  print_include_stack(); */
 }
 
-
-void print_err_msg(const char *filename,
-                   int first_line,
+bool full_error;
+
+bool is_current_syntax_token() {
+	switch (yychar) {
+  	case ';':
+  	case ',':
+  	case ')':
+  	case ']':
+  	case '+':
+  	case '*':
+  	case '-':
+  	case '/':
+  	case '<':
+  	case '>':
+  	case '=':
+  	case '&':
+  	case OR:
+  	case XOR:
+  	case AND:
+  	case AND2:
+  	case OPER_NE:
+  	case OPER_LE:
+  	case OPER_GE:
+  	case MOD:
+  	case OPER_EXP:
+  	case NOT:
+  		return true;
+ 		default:
+ 			return false;
+ 	}
+}
+
+void print_err_msg(int first_line,
                    int first_column,
                    int last_line,
                    int last_column,
                    const char *additional_error_msg) {
-  fprintf(stderr, "%s:%d: error : %s\n", filename, first_line, additional_error_msg);
+  if (full_error)
+  	fprintf(stderr, "%s:%d-%d..%d-%d: error : %s\n", current_filename, first_line, first_column, last_line, last_column, additional_error_msg);
+  else
+  	fprintf(stderr, "%s:%d: error : %s\n", current_filename, first_line, additional_error_msg);
   //fprintf(stderr, "error %d: %s\n", yynerrs /* a global variable */, additional_error_msg);
   print_include_stack();
-  //fprintf(stderr, "%s(%d-%d): %s\n", filename, first_line, last_line, current_error_msg);
+  //fprintf(stderr, "%s(%d-%d): %s\n", current_filename, first_line, last_line, current_error_msg);
 }
 
 
@@ -8995,10 +7477,12 @@
 
 extern const char *INCLUDE_DIRECTORIES[];
 
-int stage1_2__(const char *filename, const char *includedir, symbol_c **tree_root_ref) {
+int stage1_2__(const char *filename, const char *includedir, symbol_c **tree_root_ref, bool full) {
   FILE *in_file = NULL, *lib_file = NULL;
   char *libfilename = NULL;
-
+	
+	full_error = full;
+	
   if((in_file = fopen(filename, "r")) == NULL) {
     char *errmsg = strdup2("Error opening main file ", filename);
     perror(errmsg);
@@ -9029,9 +7513,9 @@
 
   /* first parse the standard library file... */
   yyin = lib_file;
-  yylineno = 1;
   allow_function_overloading = true;
   current_filename = libfilename;
+  current_tracking = GetNewTracking(yyin);
   if (yyparse() != 0)
       ERROR;
 
@@ -9061,14 +7545,14 @@
 
   /* now parse the input file... */
   yyin = in_file;
-  yylineno = 1;
   allow_function_overloading = false;
   current_filename = filename;
+  current_tracking = GetNewTracking(yyin);
   {int res;
     if ((res = yyparse()) != 0) {
-      fprintf (stderr, "\nInternal error while parsing file - yyparse() returned %d. Bailing out!\n", res);
-      ERROR;
-    }
+      fprintf (stderr, "\nParsing failed because of too many consecutive syntax errors. Bailing out!\n");
+  		exit(EXIT_FAILURE);
+  	}
   }
 
   if (yynerrs > 0) {
--- a/stage1_2/stage1_2.cc	Mon Aug 04 15:14:25 2008 +0200
+++ b/stage1_2/stage1_2.cc	Tue Aug 12 16:14:12 2008 +0200
@@ -178,27 +178,76 @@
   return strcat(strcat(strcpy(res, a), b), c);  /* safe, actually */
 }
 
-
-
-
-
-
-/***********************************************************************/
-/***********************************************************************/
-/***********************************************************************/
-/***********************************************************************/
-/***********************************************************************/
-/***********************************************************************/
-/***********************************************************************/
-/***********************************************************************/
-/***********************************************************************/
-/***********************************************************************/
-
-
-int stage1_2__(const char *filename, const char *includedir, symbol_c **tree_root_ref);
-
-
-int stage1_2(const char *filename, const char *includedir, symbol_c **tree_root_ref) {
-  return stage1_2__(filename, includedir, tree_root_ref);
-}
-
+/*************************/
+/* Tracking Functions... */
+/*************************/
+
+extern tracking_t* current_tracking;
+
+/*--------------------------------------------------------------------
+ * GetNextChar
+ * 
+ * reads a character from input for flex
+ *------------------------------------------------------------------*/
+int GetNextChar(char *b, int maxBuffer) {
+  char *p;
+  
+  if (  current_tracking->eof  )
+    return 0;
+  
+  while (  current_tracking->currentChar >= current_tracking->lineLength  ) {
+    current_tracking->currentChar = 0;
+    current_tracking->currentTokenStart = 1;
+    current_tracking->eof = false;
+    
+    p = fgets(current_tracking->buffer, MAX_BUFFER_LENGTH, current_tracking->in_file);
+    if (  p == NULL  ) {
+      if (  ferror(current_tracking->in_file)  )
+        return 0;
+      current_tracking->eof = true;
+      return 0;
+    }
+    
+    current_tracking->lineNumber++;
+    current_tracking->lineLength = strlen(current_tracking->buffer);
+  }
+  
+  b[0] = current_tracking->buffer[current_tracking->currentChar];
+  if (b[0] == ' ' || b[0] == '\t')
+    current_tracking->currentTokenStart++;
+  current_tracking->currentChar++;
+
+  return b[0]==0?0:1;
+}
+
+tracking_t* GetNewTracking(FILE* in_file) {
+  tracking_t* new_env = new tracking_t;
+  new_env->eof = 0;
+  new_env->lineNumber = 0;
+  new_env->currentChar = 0;
+  new_env->lineLength = 0;
+  new_env->currentTokenStart = 0;
+  new_env->buffer = (char*)malloc(MAX_BUFFER_LENGTH);
+  new_env->in_file = in_file;
+  return new_env;
+}
+
+/***********************************************************************/
+/***********************************************************************/
+/***********************************************************************/
+/***********************************************************************/
+/***********************************************************************/
+/***********************************************************************/
+/***********************************************************************/
+/***********************************************************************/
+/***********************************************************************/
+/***********************************************************************/
+
+
+int stage1_2__(const char *filename, const char *includedir, symbol_c **tree_root_ref, bool full);
+
+
+int stage1_2(const char *filename, const char *includedir, symbol_c **tree_root_ref, bool full) {
+  return stage1_2__(filename, includedir, tree_root_ref, full);
+}
+
--- a/stage1_2/stage1_2_priv.hh	Mon Aug 04 15:14:25 2008 +0200
+++ b/stage1_2/stage1_2_priv.hh	Tue Aug 12 16:14:12 2008 +0200
@@ -67,7 +67,6 @@
 void print_include_stack(void);
 
 
-
 /**************************************/
 /* The name of the file being parsed. */
 /**************************************/
@@ -81,7 +80,20 @@
  */
 extern const char *current_filename;
 
+#define MAX_BUFFER_LENGTH 1000
 
+typedef struct {
+    int eof;
+    int lineNumber;
+    int currentChar;
+    int lineLength;
+    int currentTokenStart;
+    char* buffer;
+    FILE *in_file;
+  } tracking_t;
+
+int GetNextChar(char *b, int maxBuffer);
+tracking_t* GetNewTracking(FILE* in_file);
 
 /****************************************************/
 /* Controlling the entry to the body_state in flex. */