]> git.pld-linux.org Git - packages/baci.git/commitdiff
- patch from author to current version, many fixes. auto/ac/baci-1_0_20051026-1
authorundefine <undefine@pld-linux.org>
Wed, 26 Oct 2005 22:30:42 +0000 (22:30 +0000)
committercvs2git <feedback@pld-linux.org>
Sun, 24 Jun 2012 12:13:13 +0000 (12:13 +0000)
Changed files:
    baci-20051026.patch -> 1.1

baci-20051026.patch [new file with mode: 0644]

diff --git a/baci-20051026.patch b/baci-20051026.patch
new file mode 100644 (file)
index 0000000..ed8c696
--- /dev/null
@@ -0,0 +1,6234 @@
+diff -ur bacisrc/ccomp/baccutil.c bacisrc.ok/ccomp/baccutil.c
+--- bacisrc/ccomp/baccutil.c   2004-04-15 13:31:24.000000000 +0200
++++ bacisrc.ok/ccomp/baccutil.c        2005-10-26 22:11:03.000000000 +0200
+@@ -13,6 +13,7 @@
+ #include "../include/computil.h"
+ #include "../include/pcode.h"
+ #include "../include/incfiles.h"
++#include "../include/writetab.h"
+ extern   int fprintf(FILE*,const char*,...);
+@@ -165,9 +166,13 @@
+    /* when name of main pgm is seen in parsing, it's next stid */
+ } /* global_init */ 
++
+ /*
+  *
+  *  $Log$
++ *  Revision 2.6  2004/07/21 19:16:54  bynum
++ *  add writetab.h include
++ *
+  *  Revision 2.5  2003/06/25 17:09:46  bynum
+  *  change to Moti Ben-Ari's filename suffix convention
+  *
+diff -ur bacisrc/ccomp/bac.l bacisrc.ok/ccomp/bac.l
+--- bacisrc/ccomp/bac.l        2004-04-15 13:31:23.000000000 +0200
++++ bacisrc.ok/ccomp/bac.l     2005-10-26 22:11:03.000000000 +0200
+@@ -342,7 +342,7 @@
+          }
+       } while (reading);
+    }
+-   return ((esc < 256) ? esc : 0x20);
++   return esc;
+ }
+@@ -409,6 +409,9 @@
+ /*
+  *
+  *  $Log$
++ *  Revision 2.15  2005/10/26 20:03:23  bynum
++ *  remove extraneous test in get_escape
++ *
+  *  Revision 2.14  2004/04/13 15:39:50  bynum
+  *  add \r case to get rid of errors when reading MS-DOS/WIN source files
+  *
+diff -ur bacisrc/ccomp/bac.y bacisrc.ok/ccomp/bac.y
+--- bacisrc/ccomp/bac.y        2004-04-15 13:31:23.000000000 +0200
++++ bacisrc.ok/ccomp/bac.y     2005-10-26 22:11:03.000000000 +0200
+@@ -49,6 +49,7 @@
+ BUFFER   pbuf;   /* string buffer for parsing */
+ /* constants for passing synthesized information back up the parse tree */
+ int   dx,level=0;
++int maxlevel = 0;
+ /* for passing type of constant back to constant productions */
+ TYPES consttype;
+ /* for passing back information to productions using 'type' prod */
+@@ -103,7 +104,6 @@
+ int   in_func_decl;     /* 1 if declaring a function, 0 otherwise */
+ int   void_function;    /* 1 if function has VOID return type, 0 otherwise */
+-int   func_tab;         /* tab index of function being declared */
+ #define MAXBREAK  200   
+    /* max # breaks in a nest of loop and switch stmts */
+@@ -360,6 +360,7 @@
+             prt = last_tab;
+             enter_block(&last_btab,&level,last_tab);
+             btab[last_btab].lastpar = last_tab; /* no parms */
++            if (maxlevel < level) maxlevel = level;
+             main_declared = 1;
+             $$ = prt;
+             btab[0].lastpar = prt;  /* save main's tabix for the interp */
+@@ -385,6 +386,7 @@
+             if (main_declared)
+                yyerror("main() proc must be last");
+             if (void_function) {
++               if (curr_ret >= 0) process_returns();
+                if (tab[$1].mon) emit(EXITMON);
+                emit(EXIT_PROC);
+             }
+@@ -464,9 +466,9 @@
+                vis_level = real_level = level;
+             }
+             $$ = prt = enter(lastident(),function,real_level,vis_level);
+-            func_tab = prt;
+             if (in_mon_decl) tab[prt].mon = mtab[mon] - last_predeclared;
+             enter_block(&last_btab,&level,prt);
++            if (maxlevel < level) maxlevel = level;
+             curr_parm_offset = btab[display[level]].vsize;
+             delta_vsize = curr_parm_offset - btab[display[level]].psize;
+             tab[$$].adr = (extern_decl ?  -1 : lc);
+@@ -511,8 +513,9 @@
+             elem_ref = 0;
+             elem_size = 1;  /* a pointer */
+             elem_typ  = strings;
+-            elem_tix = -1;
++            elem_tix = -1; /* not in symbol table */
+             by_value = 0;  /* pass-by-reference */
++            $$ = -1;       /* not in symbol table */
+          }
+       ;
+       
+@@ -536,6 +539,7 @@
+                yyerror("Monitors can only be declared at the global level");
+             enter_block(&last_btab,&level,last_tab);
+             btab[last_btab].lastpar = last_tab;  /* no parms */
++            if (maxlevel < level) maxlevel = level;
+          }
+       ; 
+@@ -868,7 +872,9 @@
+       ;
+ for_expr_list  :  expr
++         { free_expr($1); }
+       |  for_expr_list  ','  expr
++         { free_expr($3); }
+       ;
+ stmt  :  selection_stmt
+@@ -1014,10 +1020,10 @@
+                /* the current case of the enclosing switch block is one */
+                /* less than the first case of this block                */
+             curr_case = switch_block[switch_level].first_case - 1;
++            free_expr(switch_block[switch_level].expr_index);
+             switch_level--;
+             process_breaks();
+             leave_break_block(&break_level,&curr_break,&curr_cont);
+-            free_expr($1);
+          }
+       ;
+@@ -1297,23 +1303,31 @@
+ return_stmt  :  the_return  opt_expr  ';'
+          {  
+             if (void_function) {
+-               if ($2 < 0)
+-                  emit(EXIT_PROC); 
++               if ($2 < 0) {
++                  if (++curr_ret == MAXRETURN)
++                     cfatal(
++   "No more thn %d 'return' statements can appear in a function",MAXRETURN);
++                  else
++                     return_loc[curr_ret] = lc;    /* mark the JUMP loc */
++                  emit(JUMP);
++               }
+                else
+                   yyerror("Cannot return a value from a 'void' function");
+             }
+-            if ($2 >= 0) 
+-               gen_exprval($2); 
+-            else  /* no expression to push */
+-               emit1(PUSH_LIT,0); 
+-            emit(STORE); 
+-            if (++curr_ret == MAXRETURN)
+-               cfatal(
++            else {   // non void function
++               if ($2 >= 0) 
++                  gen_exprval($2); 
++               else  /* no expression to push */
++                  emit1(PUSH_LIT,0); 
++               emit(STORE); 
++               if (++curr_ret == MAXRETURN)
++                  cfatal(
+    "No more thn %d 'return' statements can appear in a function",MAXRETURN);
+-            else
+-               return_loc[curr_ret] = lc;    /* mark the JUMP loc */
+-            emit(JUMP);   /* jump to fcn exit*/ 
+-         } 
++               else
++                  return_loc[curr_ret] = lc;    /* mark the JUMP loc */
++               emit(JUMP);   /* jump to fcn exit*/ 
++            } 
++         }
+          ; 
+          
+ the_return  :  RETURN 
+@@ -1321,7 +1335,7 @@
+             if (!in_func_decl)
+                yyerror("'return' is inappropriate outside a function");
+             else if (!void_function)
+-                  emit2(LOAD_ADDR,tab[func_tab].lev+1,0);
++                  emit2(LOAD_ADDR,tab[prt].lev+1,0);
+          }
+       ;
+@@ -1369,6 +1383,7 @@
+                emit1(READ,expr[$3].typ);
+             } else   /* array element */
+                emit1(READ,expr[$3].typ);
++            free_expr($3);
+          }
+       ;
+@@ -1377,6 +1392,7 @@
+ opt_expr  :  /* empty */
+          { $$ = -1; }
+       |  expr
++         { free_expr($1); }
+       ;
+ expr_stmt  :  expr  ';'
+@@ -1410,6 +1426,7 @@
+             else
+                yyerror("Type mismatch in assignment");
+             $$ = $2;
++            expr[$$].tix = $1;
+             assign_cnt--;
+          }
+       |  array_var_becomes  expr
+@@ -1420,7 +1437,7 @@
+                    (expr[$1].typ == conds))
+                   yyerror("Cannot assign to 'semaphore' or 'condition'");
+                else if (expr[$1].typ == arrays)
+-                  emit1(COPY_BLOCK,atab[tab[$1].ref].size);
++                  emit1(COPY_BLOCK,atab[expr[$1].ref].size);
+                else  /* standard types */
+                   if (assign_cnt > 1)  /* multiple assignments */
+                      emit(STORE_KEEP);
+@@ -1429,6 +1446,7 @@
+             }
+             else
+                yyerror("Type mismatch in assignment");
++            free_expr($2);
+             expr[$1].isval = 1;
+             $$ = $1;
+             assign_cnt--;
+@@ -1439,9 +1457,6 @@
+          {
+             assign_cnt++;
+             if ((tab[$1].obj == variable)||(tab[$1].obj == ext_variable)) {
+-               if ((tab[$1].typ == sems)||(tab[$1].typ == bsems))
+-                  yyerror("Must use `initialsem' to initialize a 'semaphore'");
+-               else
+                   emit_push_addr(tab[$1]);
+             }
+             else
+@@ -1758,7 +1773,7 @@
+                else{  /* legal func call */
+                   pfstack[toppfs].tix = last_pf; 
+                   pfstack[toppfs].pct = parmct = 0;
+-                  first_stringerr = first_parmcterr = 1;
++                  first_parmcterr = 1;
+                   if (tab[$1].lev != -1){ /* regular proc call */
+                      if ((tab[$1].mon)&&(tab[prt].mon)&&
+                          (tab[$1].mon != tab[prt].mon))
+@@ -1811,6 +1826,7 @@
+ right_stringparm  :  ','  expr  ')'
+          {
++            $$ = $2;
+             if (expr[$2].typ != strings) {
+                yyerror("right parameter is not of type 'string'");
+                last_eltyp = notyp;
+@@ -2174,6 +2190,9 @@
+ /*
+  *
+  *  $Log$
++ *  Revision 2.26  2004/07/21 19:17:28  bynum
++ *  correct minor errors discovered in writing the Java version of bacc
++ *
+  *  Revision 2.25  2004/04/13 18:18:40  bynum
+  *  revise grammar to handle C-style expressions
+  *
+diff -ur bacisrc/ccomp/gram.c bacisrc.ok/ccomp/gram.c
+--- bacisrc/ccomp/gram.c       2004-04-15 13:31:23.000000000 +0200
++++ bacisrc.ok/ccomp/gram.c    2005-10-26 22:11:03.000000000 +0200
+@@ -1,61 +1,169 @@
+-/* A Bison parser, made from bac.y
+-   by GNU bison 1.35.  */
++/* A Bison parser, made by GNU Bison 1.875.  */
+-#define YYBISON 1  /* Identify Bison output.  */
++/* Skeleton parser for Yacc-like parsing with Bison,
++   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software Foundation, Inc.
+-# define      UNSIGNED_INT    257
+-# define      STRING  258
+-# define      RAWSTRING       259
+-# define      STRINGCONCAT    260
+-# define      STRINGCOMPARE   261
+-# define      STRINGCOPY      262
+-# define      STRINGLENGTH    263
+-# define      IDENTIFIER      264
+-# define      CHARCON 265
+-# define      INCLUDE 266
+-# define      FNSTRING        267
+-# define      NE      268
+-# define      LE      269
+-# define      GE      270
+-# define      EQ      271
+-# define      OR      272
+-# define      AND     273
+-# define      PLPL    274
+-# define      MIMI    275
+-# define      IF      276
+-# define      ELSE    277
+-# define      SWITCH  278
+-# define      CASE    279
+-# define      DEFAULT 280
+-# define      WHILE   281
+-# define      DO      282
+-# define      FOR     283
+-# define      CBEGIN  284
+-# define      CONST   285
+-# define      TYPEDEF 286
+-# define      VOID    287
+-# define      INT     288
+-# define      CHAR    289
+-# define      CONTINUE        290
+-# define      BREAK   291
+-# define      RETURN  292
+-# define      COUT    293
+-# define      LTLT    294
+-# define      ENDL    295
+-# define      CIN     296
+-# define      GTGT    297
+-# define      MAIN    298
+-# define      MONITOR 299
+-# define      INIT    300
+-# define      ATOMIC  301
+-# define      SEND    302
+-# define      RECEIVE 303
+-# define      BROADCAST       304
+-# define      EXTERN  305
+-# define      SSCANF  306
+-# define      SPRINTF 307
+-# define      LOWER_THAN_ELSE 308
++   This program is free software; you can redistribute it and/or modify
++   it under the terms of the GNU General Public License as published by
++   the Free Software Foundation; either version 2, or (at your option)
++   any later version.
++
++   This program is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++   GNU General Public License for more details.
++
++   You should have received a copy of the GNU General Public License
++   along with this program; if not, write to the Free Software
++   Foundation, Inc., 59 Temple Place - Suite 330,
++   Boston, MA 02111-1307, USA.  */
++
++/* As a special exception, when this file is copied by Bison into a
++   Bison output file, you may use that output file without restriction.
++   This special exception was added by the Free Software Foundation
++   in version 1.24 of Bison.  */
++
++/* Written by Richard Stallman by simplifying the original so called
++   ``semantic'' parser.  */
++
++/* All symbols defined below should begin with yy or YY, to avoid
++   infringing on user name space.  This should be done even for local
++   variables, as they might otherwise be expanded by user macros.
++   There are some unavoidable exceptions within include files to
++   define necessary library symbols; they are noted "INFRINGES ON
++   USER NAME SPACE" below.  */
++
++/* Identify Bison output.  */
++#define YYBISON 1
++
++/* Skeleton name.  */
++#define YYSKELETON_NAME "yacc.c"
++
++/* Pure parsers.  */
++#define YYPURE 0
++
++/* Using locations.  */
++#define YYLSP_NEEDED 0
++
++
++
++/* Tokens.  */
++#ifndef YYTOKENTYPE
++# define YYTOKENTYPE
++   /* Put the tokens into the symbol table, so that GDB and other debuggers
++      know about them.  */
++   enum yytokentype {
++     UNSIGNED_INT = 258,
++     STRING = 259,
++     RAWSTRING = 260,
++     STRINGCONCAT = 261,
++     STRINGCOMPARE = 262,
++     STRINGCOPY = 263,
++     STRINGLENGTH = 264,
++     IDENTIFIER = 265,
++     CHARCON = 266,
++     INCLUDE = 267,
++     FNSTRING = 268,
++     NE = 269,
++     LE = 270,
++     GE = 271,
++     EQ = 272,
++     OR = 273,
++     AND = 274,
++     PLPL = 275,
++     MIMI = 276,
++     IF = 277,
++     ELSE = 278,
++     SWITCH = 279,
++     CASE = 280,
++     DEFAULT = 281,
++     WHILE = 282,
++     DO = 283,
++     FOR = 284,
++     CBEGIN = 285,
++     CONST = 286,
++     TYPEDEF = 287,
++     VOID = 288,
++     INT = 289,
++     CHAR = 290,
++     CONTINUE = 291,
++     BREAK = 292,
++     RETURN = 293,
++     COUT = 294,
++     LTLT = 295,
++     ENDL = 296,
++     CIN = 297,
++     GTGT = 298,
++     MAIN = 299,
++     MONITOR = 300,
++     INIT = 301,
++     ATOMIC = 302,
++     SEND = 303,
++     RECEIVE = 304,
++     BROADCAST = 305,
++     EXTERN = 306,
++     SSCANF = 307,
++     SPRINTF = 308,
++     LOWER_THAN_ELSE = 309
++   };
++#endif
++#define UNSIGNED_INT 258
++#define STRING 259
++#define RAWSTRING 260
++#define STRINGCONCAT 261
++#define STRINGCOMPARE 262
++#define STRINGCOPY 263
++#define STRINGLENGTH 264
++#define IDENTIFIER 265
++#define CHARCON 266
++#define INCLUDE 267
++#define FNSTRING 268
++#define NE 269
++#define LE 270
++#define GE 271
++#define EQ 272
++#define OR 273
++#define AND 274
++#define PLPL 275
++#define MIMI 276
++#define IF 277
++#define ELSE 278
++#define SWITCH 279
++#define CASE 280
++#define DEFAULT 281
++#define WHILE 282
++#define DO 283
++#define FOR 284
++#define CBEGIN 285
++#define CONST 286
++#define TYPEDEF 287
++#define VOID 288
++#define INT 289
++#define CHAR 290
++#define CONTINUE 291
++#define BREAK 292
++#define RETURN 293
++#define COUT 294
++#define LTLT 295
++#define ENDL 296
++#define CIN 297
++#define GTGT 298
++#define MAIN 299
++#define MONITOR 300
++#define INIT 301
++#define ATOMIC 302
++#define SEND 303
++#define RECEIVE 304
++#define BROADCAST 305
++#define EXTERN 306
++#define SSCANF 307
++#define SPRINTF 308
++#define LOWER_THAN_ELSE 309
++
++
++
++/* Copy the first part of user declarations.  */
+ #line 1 "bac.y"
+        /* yacc grammar for BenAri Concurrent C */
+@@ -108,6 +216,7 @@
+ BUFFER   pbuf;   /* string buffer for parsing */
+ /* constants for passing synthesized information back up the parse tree */
+ int   dx,level=0;
++int maxlevel = 0;
+ /* for passing type of constant back to constant productions */
+ TYPES consttype;
+ /* for passing back information to productions using 'type' prod */
+@@ -162,7 +271,6 @@
+ int   in_func_decl;     /* 1 if declaring a function, 0 otherwise */
+ int   void_function;    /* 1 if function has VOID return type, 0 otherwise */
+-int   func_tab;         /* tab index of function being declared */
+ #define MAXBREAK  200   
+    /* max # breaks in a nest of loop and switch stmts */
+@@ -293,25 +401,153 @@
+ emit2(((x).normal ? LOAD_ADDR : LOAD_VALUE), (x).lev, (x).adr))
+-#ifndef YYSTYPE
+-# define YYSTYPE int
+-# define YYSTYPE_IS_TRIVIAL 1
+-#endif
++
++
++/* Enabling traces.  */
+ #ifndef YYDEBUG
+ # define YYDEBUG 1
+ #endif
++/* Enabling verbose error messages.  */
++#ifdef YYERROR_VERBOSE
++# undef YYERROR_VERBOSE
++# define YYERROR_VERBOSE 1
++#else
++# define YYERROR_VERBOSE 0
++#endif
++
++#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
++typedef int YYSTYPE;
++# define yystype YYSTYPE /* obsolescent; will be withdrawn */
++# define YYSTYPE_IS_DECLARED 1
++# define YYSTYPE_IS_TRIVIAL 1
++#endif
++
++
++
++/* Copy the second part of user declarations.  */
++
++
++/* Line 214 of yacc.c.  */
++#line 432 "y.tab.c"
++
++#if ! defined (yyoverflow) || YYERROR_VERBOSE
++
++/* The parser invokes alloca or malloc; define the necessary symbols.  */
++
++# if YYSTACK_USE_ALLOCA
++#  define YYSTACK_ALLOC alloca
++# else
++#  ifndef YYSTACK_USE_ALLOCA
++#   if defined (alloca) || defined (_ALLOCA_H)
++#    define YYSTACK_ALLOC alloca
++#   else
++#    ifdef __GNUC__
++#     define YYSTACK_ALLOC __builtin_alloca
++#    endif
++#   endif
++#  endif
++# endif
++
++# ifdef YYSTACK_ALLOC
++   /* Pacify GCC's `empty if-body' warning. */
++#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
++# else
++#  if defined (__STDC__) || defined (__cplusplus)
++#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
++#   define YYSIZE_T size_t
++#  endif
++#  define YYSTACK_ALLOC malloc
++#  define YYSTACK_FREE free
++# endif
++#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
++
++
++#if (! defined (yyoverflow) \
++     && (! defined (__cplusplus) \
++       || (YYSTYPE_IS_TRIVIAL)))
++
++/* A type that is properly aligned for any stack member.  */
++union yyalloc
++{
++  short yyss;
++  YYSTYPE yyvs;
++  };
++/* The size of the maximum gap between one aligned stack and the next.  */
++# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
++
++/* The size of an array large to enough to hold all stacks, each with
++   N elements.  */
++# define YYSTACK_BYTES(N) \
++     ((N) * (sizeof (short) + sizeof (YYSTYPE))                               \
++      + YYSTACK_GAP_MAXIMUM)
+-#define       YYFINAL         437
+-#define       YYFLAG          -32768
+-#define       YYNTBASE        75
++/* Copy COUNT objects from FROM to TO.  The source and destination do
++   not overlap.  */
++# ifndef YYCOPY
++#  if 1 < __GNUC__
++#   define YYCOPY(To, From, Count) \
++      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
++#  else
++#   define YYCOPY(To, From, Count)            \
++      do                                      \
++      {                                       \
++        register YYSIZE_T yyi;                \
++        for (yyi = 0; yyi < (Count); yyi++)   \
++          (To)[yyi] = (From)[yyi];            \
++      }                                       \
++      while (0)
++#  endif
++# endif
+-/* YYTRANSLATE(YYLEX) -- Bison token number corresponding to YYLEX. */
+-#define YYTRANSLATE(x) ((unsigned)(x) <= 308 ? yytranslate[x] : 218)
++/* Relocate STACK from its old location to the new one.  The
++   local variables YYSIZE and YYSTACKSIZE give the old and new number of
++   elements in the stack, and YYPTR gives the new location of the
++   stack.  Advance YYPTR to a properly aligned location for the next
++   stack.  */
++# define YYSTACK_RELOCATE(Stack)                                      \
++    do                                                                        \
++      {                                                                       \
++      YYSIZE_T yynewbytes;                                            \
++      YYCOPY (&yyptr->Stack, Stack, yysize);                          \
++      Stack = &yyptr->Stack;                                          \
++      yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
++      yyptr += yynewbytes / sizeof (*yyptr);                          \
++      }                                                                       \
++    while (0)
+-/* YYTRANSLATE[YYLEX] -- Bison token number corresponding to YYLEX. */
+-static const char yytranslate[] =
++#endif
++
++#if defined (__STDC__) || defined (__cplusplus)
++   typedef signed char yysigned_char;
++#else
++   typedef short yysigned_char;
++#endif
++
++/* YYFINAL -- State number of the termination state. */
++#define YYFINAL  3
++/* YYLAST -- Last index in YYTABLE.  */
++#define YYLAST   1059
++
++/* YYNTOKENS -- Number of terminals. */
++#define YYNTOKENS  75
++/* YYNNTS -- Number of nonterminals. */
++#define YYNNTS  144
++/* YYNRULES -- Number of rules. */
++#define YYNRULES  261
++/* YYNRULES -- Number of states. */
++#define YYNSTATES  437
++
++/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
++#define YYUNDEFTOK  2
++#define YYMAXUTOK   309
++
++#define YYTRANSLATE(YYX)                                              \
++  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
++
++/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
++static const unsigned char yytranslate[] =
+ {
+        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+@@ -338,166 +574,166 @@
+        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+-       2,     2,     2,     2,     2,     2,     1,     3,     4,     5,
+-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+-      46,    47,    48,    49,    50,    51,    52,    53,    54
++       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
++       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
++      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
++      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
++      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
++      45,    46,    47,    48,    49,    50,    51,    52,    53,    54
+ };
+ #if YYDEBUG
+-static const short yyprhs[] =
+-{
+-       0,     0,     4,     7,     8,    10,    13,    15,    17,    19,
+-      21,    23,    25,    27,    30,    33,    34,    37,    42,    43,
+-      45,    47,    52,    56,    59,    62,    64,    67,    69,    71,
+-      74,    78,    82,    84,    88,    89,    91,    93,    95,    99,
+-     102,   104,   107,   109,   114,   117,   120,   122,   125,   127,
+-     129,   131,   132,   137,   139,   144,   147,   151,   153,   156,
+-     158,   160,   164,   166,   168,   173,   175,   177,   181,   183,
+-     187,   189,   192,   194,   197,   201,   206,   211,   213,   220,
+-     222,   225,   228,   230,   232,   234,   236,   238,   240,   242,
+-     244,   248,   250,   253,   256,   259,   261,   264,   267,   270,
+-     271,   273,   275,   279,   281,   283,   285,   287,   289,   291,
+-     293,   295,   297,   299,   301,   303,   305,   307,   309,   316,
+-     319,   322,   325,   330,   336,   338,   342,   345,   350,   356,
+-     361,   363,   365,   370,   372,   375,   379,   381,   384,   389,
+-     390,   391,   392,   395,   398,   403,   407,   414,   421,   423,
+-     427,   429,   430,   432,   436,   440,   443,   444,   446,   448,
+-     449,   451,   453,   456,   459,   463,   465,   469,   472,   476,
+-     478,   480,   482,   487,   489,   490,   492,   495,   497,   499,
+-     502,   505,   508,   511,   513,   517,   519,   521,   525,   527,
+-     529,   533,   535,   537,   539,   541,   543,   545,   547,   549,
+-     552,   555,   559,   561,   563,   565,   567,   571,   573,   575,
+-     577,   579,   581,   583,   585,   589,   592,   594,   597,   600,
+-     603,   606,   608,   610,   612,   614,   617,   619,   621,   623,
+-     626,   630,   634,   636,   638,   640,   642,   644,   646,   648,
+-     652,   656,   660,   662,   666,   670,   673,   677,   681,   686,
+-     692,   694,   698,   702,   708,   711,   713,   718,   722,   727,
+-     729
++/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
++   YYRHS.  */
++static const unsigned short yyprhs[] =
++{
++       0,     0,     3,     7,    10,    11,    13,    16,    18,    20,
++      22,    24,    26,    28,    30,    33,    36,    37,    40,    45,
++      46,    48,    50,    55,    59,    62,    65,    67,    70,    72,
++      74,    77,    81,    85,    87,    91,    92,    94,    96,    98,
++     102,   105,   107,   110,   112,   117,   120,   123,   125,   128,
++     130,   132,   134,   135,   140,   142,   147,   150,   154,   156,
++     159,   161,   163,   167,   169,   171,   176,   178,   180,   184,
++     186,   190,   192,   195,   197,   200,   204,   209,   214,   216,
++     223,   225,   228,   231,   233,   235,   237,   239,   241,   243,
++     245,   247,   251,   253,   256,   259,   262,   264,   267,   270,
++     273,   274,   276,   278,   282,   284,   286,   288,   290,   292,
++     294,   296,   298,   300,   302,   304,   306,   308,   310,   312,
++     319,   322,   325,   328,   333,   339,   341,   345,   348,   353,
++     359,   364,   366,   368,   373,   375,   378,   382,   384,   387,
++     392,   393,   394,   395,   398,   401,   406,   410,   417,   424,
++     426,   430,   432,   433,   435,   439,   443,   446,   447,   449,
++     451,   452,   454,   456,   459,   462,   466,   468,   472,   475,
++     479,   481,   483,   485,   490,   492,   493,   495,   498,   500,
++     502,   505,   508,   511,   514,   516,   520,   522,   524,   528,
++     530,   532,   536,   538,   540,   542,   544,   546,   548,   550,
++     552,   555,   558,   562,   564,   566,   568,   570,   574,   576,
++     578,   580,   582,   584,   586,   588,   592,   595,   597,   600,
++     603,   606,   609,   611,   613,   615,   617,   620,   622,   624,
++     626,   629,   633,   637,   639,   641,   643,   645,   647,   649,
++     651,   655,   659,   663,   665,   669,   673,   676,   680,   684,
++     689,   695,   697,   701,   705,   711,   714,   716,   721,   725,
++     730,   732
+ };
++
++/* YYRHS -- A `-1'-separated list of the rules' RHS. */
+ static const short yyrhs[] =
+ {
+-      76,    77,    81,     0,    76,    81,     0,     0,    78,     0,
+-      77,    78,     0,    79,     0,    85,     0,    96,     0,   114,
+-       0,   116,     0,   107,     0,   120,     0,    80,    13,     0,
+-      55,    12,     0,     0,    82,    84,     0,    83,    44,    56,
+-      57,     0,     0,    34,     0,    33,     0,    58,   105,   126,
+-      59,     0,    58,   126,    59,     0,    58,    59,     0,    86,
+-      84,     0,    87,     0,    47,    87,     0,    88,     0,    89,
+-       0,    90,    91,     0,    33,    90,    91,     0,   108,    90,
+-      91,     0,    10,     0,    56,    92,    57,     0,     0,    33,
+-       0,    93,     0,    94,     0,    93,    60,    94,     0,    95,
+-     217,     0,   108,     0,   108,    61,     0,     4,     0,    97,
+-      58,    98,    59,     0,    45,   217,     0,    99,   101,     0,
+-     100,     0,    99,   100,     0,    85,     0,   116,     0,   107,
+-       0,     0,   102,    58,   126,    59,     0,    46,     0,    97,
+-      58,   104,    59,     0,    86,    62,     0,   104,    86,    62,
+-       0,   106,     0,   105,   106,     0,   107,     0,   120,     0,
+-     108,   109,    62,     0,    34,     0,    35,     0,     4,    63,
+-     118,    64,     0,   216,     0,   110,     0,   109,    60,   110,
+-       0,   217,     0,   217,    65,   117,     0,   111,     0,   217,
+-     112,     0,   113,     0,   112,   113,     0,    63,   118,    64,
+-       0,   115,   108,   217,    62,     0,   115,   108,   111,    62,
+-       0,    32,     0,    31,   108,   217,    65,   117,    62,     0,
+-     118,     0,    66,   118,     0,    67,   118,     0,    11,     0,
+-     119,     0,   216,     0,     3,     0,   121,     0,   123,     0,
+-     124,     0,   125,     0,   122,    86,    62,     0,    51,     0,
+-     122,   107,     0,   122,   111,     0,   122,   103,     0,   129,
+-       0,   126,   129,     0,     1,    62,     0,     1,    59,     0,
+-       0,   128,     0,   175,     0,   128,    60,   175,     0,   137,
+-       0,    84,     0,   150,     0,   151,     0,   174,     0,   164,
+-       0,   165,     0,   166,     0,   168,     0,   171,     0,   172,
+-       0,   130,     0,   131,     0,   133,     0,   134,     0,    48,
+-     132,    60,   175,    57,    62,     0,    56,   203,     0,    56,
+-     175,     0,    50,   207,     0,   135,    60,   136,    57,     0,
+-      53,    56,   175,    60,   203,     0,   175,     0,   136,    60,
+-     175,     0,   138,   139,     0,   138,   139,   140,   129,     0,
+-     141,    58,   142,   148,    59,     0,    22,    56,   175,    57,
+-       0,   129,     0,    23,     0,    24,    56,   175,    57,     0,
+-     143,     0,   142,   143,     0,   144,   147,   126,     0,   145,
+-       0,   144,   145,     0,    25,   146,   175,    68,     0,     0,
+-       0,     0,   149,   126,     0,    26,    68,     0,   163,    58,
+-     126,    59,     0,   152,   153,   129,     0,   154,   155,   129,
+-     156,   157,    62,     0,   158,   160,   161,   162,    57,   129,
+-       0,    27,     0,    56,   175,    57,     0,    28,     0,     0,
+-      27,     0,    56,   175,    57,     0,   159,   127,    62,     0,
+-      29,    56,     0,     0,   175,     0,    62,     0,     0,   128,
+-       0,    30,     0,    36,    62,     0,    37,    62,     0,   167,
+-     173,    62,     0,    38,     0,    39,   169,    62,     0,    40,
+-     170,     0,   169,    40,   170,     0,   175,     0,    41,     0,
+-       5,     0,    42,    43,   175,    62,     0,    62,     0,     0,
+-     175,     0,   175,    62,     0,   179,     0,   176,     0,   177,
+-     175,     0,   178,   175,     0,   216,    65,     0,   212,    65,
+-       0,   181,     0,   180,    18,   181,     0,   179,     0,   183,
+-       0,   182,    19,   183,     0,   181,     0,   186,     0,   184,
+-     185,   186,     0,   186,     0,    17,     0,    69,     0,    70,
+-       0,    15,     0,    16,     0,    14,     0,   189,     0,    67,
+-     189,     0,    66,   189,     0,   187,   188,   189,     0,   186,
+-       0,    67,     0,    66,     0,   192,     0,   190,   191,   192,
+-       0,   189,     0,    71,     0,    72,     0,    73,     0,   193,
+-       0,   119,     0,    11,     0,    56,   175,    57,     0,    74,
+-     192,     0,   194,     0,   194,    20,     0,    20,   194,     0,
+-     194,    21,     0,    21,   194,     0,   195,     0,   212,     0,
+-     215,     0,   216,     0,   196,   197,     0,   200,     0,   211,
+-       0,   216,     0,    56,    57,     0,    56,   198,    57,     0,
+-     198,    60,   199,     0,   199,     0,   175,     0,   201,     0,
+-     204,     0,   205,     0,   206,     0,   208,     0,     6,   132,
+-     202,     0,    60,   175,    57,     0,    60,   203,    57,     0,
+-       5,     0,     8,   132,   202,     0,     7,   132,   202,     0,
+-       9,   207,     0,    56,   175,    57,     0,    56,     5,    57,
+-       0,   209,    60,   210,    57,     0,    52,    56,   175,    60,
+-     203,     0,   175,     0,   210,    60,   175,     0,    49,   132,
+-      57,     0,    49,   132,    60,   175,    57,     0,   213,   214,
+-       0,   216,     0,   214,    63,   175,    64,     0,    63,   175,
+-      64,     0,    34,    56,   175,    57,     0,    10,     0,    10,
+-       0
++      76,     0,    -1,    77,    78,    82,    -1,    77,    82,    -1,
++      -1,    79,    -1,    78,    79,    -1,    80,    -1,    86,    -1,
++      97,    -1,   115,    -1,   117,    -1,   108,    -1,   121,    -1,
++      81,    13,    -1,    55,    12,    -1,    -1,    83,    85,    -1,
++      84,    44,    56,    57,    -1,    -1,    34,    -1,    33,    -1,
++      58,   106,   127,    59,    -1,    58,   127,    59,    -1,    58,
++      59,    -1,    87,    85,    -1,    88,    -1,    47,    88,    -1,
++      89,    -1,    90,    -1,    91,    92,    -1,    33,    91,    92,
++      -1,   109,    91,    92,    -1,    10,    -1,    56,    93,    57,
++      -1,    -1,    33,    -1,    94,    -1,    95,    -1,    94,    60,
++      95,    -1,    96,   218,    -1,   109,    -1,   109,    61,    -1,
++       4,    -1,    98,    58,    99,    59,    -1,    45,   218,    -1,
++     100,   102,    -1,   101,    -1,   100,   101,    -1,    86,    -1,
++     117,    -1,   108,    -1,    -1,   103,    58,   127,    59,    -1,
++      46,    -1,    98,    58,   105,    59,    -1,    87,    62,    -1,
++     105,    87,    62,    -1,   107,    -1,   106,   107,    -1,   108,
++      -1,   121,    -1,   109,   110,    62,    -1,    34,    -1,    35,
++      -1,     4,    63,   119,    64,    -1,   217,    -1,   111,    -1,
++     110,    60,   111,    -1,   218,    -1,   218,    65,   118,    -1,
++     112,    -1,   218,   113,    -1,   114,    -1,   113,   114,    -1,
++      63,   119,    64,    -1,   116,   109,   218,    62,    -1,   116,
++     109,   112,    62,    -1,    32,    -1,    31,   109,   218,    65,
++     118,    62,    -1,   119,    -1,    66,   119,    -1,    67,   119,
++      -1,    11,    -1,   120,    -1,   217,    -1,     3,    -1,   122,
++      -1,   124,    -1,   125,    -1,   126,    -1,   123,    87,    62,
++      -1,    51,    -1,   123,   108,    -1,   123,   112,    -1,   123,
++     104,    -1,   130,    -1,   127,   130,    -1,     1,    62,    -1,
++       1,    59,    -1,    -1,   129,    -1,   176,    -1,   129,    60,
++     176,    -1,   138,    -1,    85,    -1,   151,    -1,   152,    -1,
++     175,    -1,   165,    -1,   166,    -1,   167,    -1,   169,    -1,
++     172,    -1,   173,    -1,   131,    -1,   132,    -1,   134,    -1,
++     135,    -1,    48,   133,    60,   176,    57,    62,    -1,    56,
++     204,    -1,    56,   176,    -1,    50,   208,    -1,   136,    60,
++     137,    57,    -1,    53,    56,   176,    60,   204,    -1,   176,
++      -1,   137,    60,   176,    -1,   139,   140,    -1,   139,   140,
++     141,   130,    -1,   142,    58,   143,   149,    59,    -1,    22,
++      56,   176,    57,    -1,   130,    -1,    23,    -1,    24,    56,
++     176,    57,    -1,   144,    -1,   143,   144,    -1,   145,   148,
++     127,    -1,   146,    -1,   145,   146,    -1,    25,   147,   176,
++      68,    -1,    -1,    -1,    -1,   150,   127,    -1,    26,    68,
++      -1,   164,    58,   127,    59,    -1,   153,   154,   130,    -1,
++     155,   156,   130,   157,   158,    62,    -1,   159,   161,   162,
++     163,    57,   130,    -1,    27,    -1,    56,   176,    57,    -1,
++      28,    -1,    -1,    27,    -1,    56,   176,    57,    -1,   160,
++     128,    62,    -1,    29,    56,    -1,    -1,   176,    -1,    62,
++      -1,    -1,   129,    -1,    30,    -1,    36,    62,    -1,    37,
++      62,    -1,   168,   174,    62,    -1,    38,    -1,    39,   170,
++      62,    -1,    40,   171,    -1,   170,    40,   171,    -1,   176,
++      -1,    41,    -1,     5,    -1,    42,    43,   176,    62,    -1,
++      62,    -1,    -1,   176,    -1,   176,    62,    -1,   180,    -1,
++     177,    -1,   178,   176,    -1,   179,   176,    -1,   217,    65,
++      -1,   213,    65,    -1,   182,    -1,   181,    18,   182,    -1,
++     180,    -1,   184,    -1,   183,    19,   184,    -1,   182,    -1,
++     187,    -1,   185,   186,   187,    -1,   187,    -1,    17,    -1,
++      69,    -1,    70,    -1,    15,    -1,    16,    -1,    14,    -1,
++     190,    -1,    67,   190,    -1,    66,   190,    -1,   188,   189,
++     190,    -1,   187,    -1,    67,    -1,    66,    -1,   193,    -1,
++     191,   192,   193,    -1,   190,    -1,    71,    -1,    72,    -1,
++      73,    -1,   194,    -1,   120,    -1,    11,    -1,    56,   176,
++      57,    -1,    74,   193,    -1,   195,    -1,   195,    20,    -1,
++      20,   195,    -1,   195,    21,    -1,    21,   195,    -1,   196,
++      -1,   213,    -1,   216,    -1,   217,    -1,   197,   198,    -1,
++     201,    -1,   212,    -1,   217,    -1,    56,    57,    -1,    56,
++     199,    57,    -1,   199,    60,   200,    -1,   200,    -1,   176,
++      -1,   202,    -1,   205,    -1,   206,    -1,   207,    -1,   209,
++      -1,     6,   133,   203,    -1,    60,   176,    57,    -1,    60,
++     204,    57,    -1,     5,    -1,     8,   133,   203,    -1,     7,
++     133,   203,    -1,     9,   208,    -1,    56,   176,    57,    -1,
++      56,     5,    57,    -1,   210,    60,   211,    57,    -1,    52,
++      56,   176,    60,   204,    -1,   176,    -1,   211,    60,   176,
++      -1,    49,   133,    57,    -1,    49,   133,    60,   176,    57,
++      -1,   214,   215,    -1,   217,    -1,   215,    63,   176,    64,
++      -1,    63,   176,    64,    -1,    34,    56,   176,    57,    -1,
++      10,    -1,    10,    -1
+ };
+-#endif
+-
+-#if YYDEBUG
+-/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
+-static const short yyrline[] =
++/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
++static const unsigned short yyrline[] =
+ {
+-       0,   260,   267,   276,   292,   293,   296,   297,   298,   299,
+-     300,   301,   302,   305,   316,   320,   333,   356,   372,   373,
+-     375,   378,   379,   380,   383,   405,   407,   411,   417,   425,
+-     434,   441,   457,   477,   481,   482,   483,   486,   487,   490,
+-     505,   507,   509,   520,   527,   543,   546,   547,   550,   551,
+-     552,   555,   565,   575,   582,   591,   593,   597,   598,   601,
+-     602,   609,   612,   619,   626,   636,   649,   650,   653,   661,
+-     697,   701,   734,   736,   739,   756,   767,   782,   786,   798,
+-     800,   802,   804,   808,   810,   819,   823,   824,   825,   826,
+-     829,   837,   841,   845,   852,   856,   857,   858,   860,   865,
+-     867,   870,   871,   874,   875,   876,   877,   884,   885,   886,
+-     887,   888,   889,   890,   891,   894,   895,   896,   899,   926,
+-     928,   943,   957,   965,   976,   988,  1002,  1004,  1006,  1024,
+-    1028,  1032,  1036,  1050,  1051,  1054,  1057,  1059,  1063,  1083,
+-    1092,  1103,  1105,  1108,  1112,  1116,  1122,  1127,  1154,  1161,
+-    1170,  1176,  1180,  1184,  1194,  1200,  1213,  1215,  1225,  1232,
+-    1237,  1246,  1258,  1278,  1297,  1319,  1328,  1331,  1332,  1335,
+-    1351,  1353,  1360,  1375,  1377,  1379,  1382,  1390,  1391,  1394,
+-    1415,  1438,  1452,  1456,  1457,  1471,  1475,  1476,  1490,  1494,
+-    1495,  1512,  1516,  1517,  1518,  1519,  1520,  1521,  1524,  1525,
+-    1534,  1545,  1562,  1566,  1567,  1570,  1571,  1592,  1596,  1597,
+-    1598,  1601,  1602,  1610,  1618,  1620,  1633,  1634,  1646,  1658,
+-    1670,  1682,  1683,  1684,  1687,  1700,  1745,  1746,  1749,  1773,
+-    1774,  1777,  1778,  1781,  1792,  1793,  1794,  1795,  1796,  1799,
+-    1812,  1825,  1829,  1841,  1854,  1873,  1892,  1903,  1915,  1930,
+-    1941,  1950,  1961,  1975,  2000,  2013,  2043,  2053,  2065,  2072,
+-    2076
++       0,   260,   260,   267,   277,   292,   293,   296,   297,   298,
++     299,   300,   301,   302,   305,   316,   321,   333,   356,   373,
++     374,   376,   379,   380,   381,   384,   407,   409,   413,   419,
++     427,   436,   443,   459,   479,   483,   484,   485,   488,   489,
++     492,   507,   509,   511,   523,   530,   547,   550,   551,   554,
++     555,   556,   560,   569,   579,   586,   595,   597,   601,   602,
++     605,   606,   613,   616,   623,   630,   640,   653,   654,   657,
++     665,   701,   705,   738,   740,   743,   760,   771,   786,   790,
++     802,   804,   806,   808,   812,   814,   823,   827,   828,   829,
++     830,   833,   841,   845,   849,   856,   860,   861,   862,   864,
++     870,   871,   874,   876,   880,   881,   882,   883,   890,   891,
++     892,   893,   894,   895,   896,   897,   900,   901,   902,   905,
++     932,   934,   949,   963,   971,   982,   994,  1008,  1010,  1012,
++    1030,  1034,  1038,  1042,  1056,  1057,  1060,  1063,  1065,  1069,
++    1090,  1099,  1110,  1111,  1114,  1118,  1122,  1128,  1133,  1160,
++    1167,  1176,  1183,  1186,  1190,  1200,  1206,  1220,  1221,  1231,
++    1239,  1243,  1252,  1264,  1284,  1303,  1333,  1342,  1345,  1346,
++    1349,  1365,  1367,  1374,  1390,  1393,  1394,  1398,  1406,  1407,
++    1410,  1432,  1456,  1467,  1471,  1472,  1486,  1490,  1491,  1505,
++    1509,  1510,  1527,  1531,  1532,  1533,  1534,  1535,  1536,  1539,
++    1540,  1549,  1560,  1577,  1581,  1582,  1585,  1586,  1607,  1611,
++    1612,  1613,  1616,  1617,  1625,  1633,  1635,  1648,  1649,  1661,
++    1673,  1685,  1697,  1698,  1699,  1702,  1715,  1760,  1761,  1764,
++    1788,  1789,  1792,  1793,  1796,  1807,  1808,  1809,  1810,  1811,
++    1814,  1827,  1841,  1845,  1857,  1870,  1889,  1908,  1919,  1931,
++    1946,  1957,  1966,  1977,  1991,  2016,  2029,  2059,  2069,  2081,
++    2088,  2092
+ };
+ #endif
+-
+-#if (YYDEBUG) || defined YYERROR_VERBOSE
+-
+-/* YYTNAME[TOKEN_NUM] -- String name of the token TOKEN_NUM. */
++#if YYDEBUG || YYERROR_VERBOSE
++/* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
++   First, the terminals, then, starting at YYNTOKENS, nonterminals. */
+ static const char *const yytname[] =
+ {
+-  "$", "error", "$undefined.", "UNSIGNED_INT", "STRING", "RAWSTRING", 
++  "$end", "error", "$undefined", "UNSIGNED_INT", "STRING", "RAWSTRING", 
+   "STRINGCONCAT", "STRINGCOMPARE", "STRINGCOPY", "STRINGLENGTH", 
+   "IDENTIFIER", "CHARCON", "INCLUDE", "FNSTRING", "NE", "LE", "GE", "EQ", 
+   "OR", "AND", "PLPL", "MIMI", "IF", "ELSE", "SWITCH", "CASE", "DEFAULT", 
+@@ -507,7 +743,7 @@
+   "BROADCAST", "EXTERN", "SSCANF", "SPRINTF", "LOWER_THAN_ELSE", "'#'", 
+   "'('", "')'", "'{'", "'}'", "','", "'&'", "';'", "'['", "']'", "'='", 
+   "'-'", "'+'", "':'", "'<'", "'>'", "'*'", "'/'", "'%'", "'!'", 
+-  "program", "init_outerscope", "outer_decls", "outer_decl", 
++  "$accept", "program", "init_outerscope", "outer_decls", "outer_decl", 
+   "include_decl", "start_include", "opt_main_decl", "main_hdr", 
+   "opt_main_type", "compound_stmt", "function_decl", "func_proto", 
+   "func_hdr", "untyped_func_hdr", "typed_func_hdr", "function_id", 
+@@ -545,572 +781,503 @@
+ };
+ #endif
+-/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
+-static const short yyr1[] =
++# ifdef YYPRINT
++/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
++   token YYLEX-NUM.  */
++static const unsigned short yytoknum[] =
++{
++       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
++     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
++     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
++     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
++     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
++     305,   306,   307,   308,   309,    35,    40,    41,   123,   125,
++      44,    38,    59,    91,    93,    61,    45,    43,    58,    60,
++      62,    42,    47,    37,    33
++};
++# endif
++
++/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
++static const unsigned char yyr1[] =
+ {
+-       0,    75,    75,    76,    77,    77,    78,    78,    78,    78,
+-      78,    78,    78,    79,    80,    81,    81,    82,    83,    83,
+-      83,    84,    84,    84,    85,    86,    86,    87,    87,    88,
+-      89,    89,    90,    91,    92,    92,    92,    93,    93,    94,
+-      95,    95,    95,    96,    97,    98,    99,    99,   100,   100,
+-     100,   101,   101,   102,   103,   104,   104,   105,   105,   106,
+-     106,   107,   108,   108,   108,   108,   109,   109,   110,   110,
+-     110,   111,   112,   112,   113,   114,   114,   115,   116,   117,
+-     117,   117,   117,   118,   118,   119,   120,   120,   120,   120,
+-     121,   122,   123,   124,   125,   126,   126,   126,   126,   127,
+-     127,   128,   128,   129,   129,   129,   129,   129,   129,   129,
+-     129,   129,   129,   129,   129,   130,   130,   130,   131,   132,
+-     132,   133,   134,   135,   136,   136,   137,   137,   137,   138,
+-     139,   140,   141,   142,   142,   143,   144,   144,   145,   146,
+-     147,   148,   148,   149,   150,   151,   151,   151,   152,   153,
+-     154,   155,   156,   157,   158,   159,   160,   160,   161,   162,
+-     162,   163,   164,   165,   166,   167,   168,   169,   169,   170,
+-     170,   170,   171,   172,   173,   173,   174,   175,   175,   176,
+-     176,   177,   178,   179,   179,   180,   181,   181,   182,   183,
+-     183,   184,   185,   185,   185,   185,   185,   185,   186,   186,
+-     186,   186,   187,   188,   188,   189,   189,   190,   191,   191,
+-     191,   192,   192,   192,   192,   192,   193,   193,   193,   193,
+-     193,   193,   193,   193,   194,   195,   195,   195,   196,   197,
+-     197,   198,   198,   199,   200,   200,   200,   200,   200,   201,
+-     202,   202,   203,   204,   205,   206,   207,   207,   208,   209,
+-     210,   210,   211,   211,   212,   213,   214,   214,   215,   216,
+-     217
++       0,    75,    76,    76,    77,    78,    78,    79,    79,    79,
++      79,    79,    79,    79,    80,    81,    82,    82,    83,    84,
++      84,    84,    85,    85,    85,    86,    87,    87,    88,    88,
++      89,    90,    90,    91,    92,    93,    93,    93,    94,    94,
++      95,    96,    96,    96,    97,    98,    99,   100,   100,   101,
++     101,   101,   102,   102,   103,   104,   105,   105,   106,   106,
++     107,   107,   108,   109,   109,   109,   109,   110,   110,   111,
++     111,   111,   112,   113,   113,   114,   115,   115,   116,   117,
++     118,   118,   118,   118,   119,   119,   120,   121,   121,   121,
++     121,   122,   123,   124,   125,   126,   127,   127,   127,   127,
++     128,   128,   129,   129,   130,   130,   130,   130,   130,   130,
++     130,   130,   130,   130,   130,   130,   131,   131,   131,   132,
++     133,   133,   134,   135,   136,   137,   137,   138,   138,   138,
++     139,   140,   141,   142,   143,   143,   144,   145,   145,   146,
++     147,   148,   149,   149,   150,   151,   152,   152,   152,   153,
++     154,   155,   156,   157,   158,   159,   160,   161,   161,   162,
++     163,   163,   164,   165,   166,   167,   168,   169,   170,   170,
++     171,   171,   171,   172,   173,   174,   174,   175,   176,   176,
++     177,   177,   178,   179,   180,   180,   181,   182,   182,   183,
++     184,   184,   185,   186,   186,   186,   186,   186,   186,   187,
++     187,   187,   187,   188,   189,   189,   190,   190,   191,   192,
++     192,   192,   193,   193,   193,   193,   193,   194,   194,   194,
++     194,   194,   194,   194,   194,   195,   196,   196,   196,   197,
++     198,   198,   199,   199,   200,   201,   201,   201,   201,   201,
++     202,   203,   203,   204,   205,   206,   207,   208,   208,   209,
++     210,   211,   211,   212,   212,   213,   214,   215,   215,   216,
++     217,   218
+ };
+-/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
+-static const short yyr2[] =
++/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
++static const unsigned char yyr2[] =
+ {
+-       0,     3,     2,     0,     1,     2,     1,     1,     1,     1,
+-       1,     1,     1,     2,     2,     0,     2,     4,     0,     1,
+-       1,     4,     3,     2,     2,     1,     2,     1,     1,     2,
+-       3,     3,     1,     3,     0,     1,     1,     1,     3,     2,
+-       1,     2,     1,     4,     2,     2,     1,     2,     1,     1,
+-       1,     0,     4,     1,     4,     2,     3,     1,     2,     1,
+-       1,     3,     1,     1,     4,     1,     1,     3,     1,     3,
+-       1,     2,     1,     2,     3,     4,     4,     1,     6,     1,
+-       2,     2,     1,     1,     1,     1,     1,     1,     1,     1,
+-       3,     1,     2,     2,     2,     1,     2,     2,     2,     0,
+-       1,     1,     3,     1,     1,     1,     1,     1,     1,     1,
+-       1,     1,     1,     1,     1,     1,     1,     1,     6,     2,
+-       2,     2,     4,     5,     1,     3,     2,     4,     5,     4,
+-       1,     1,     4,     1,     2,     3,     1,     2,     4,     0,
+-       0,     0,     2,     2,     4,     3,     6,     6,     1,     3,
+-       1,     0,     1,     3,     3,     2,     0,     1,     1,     0,
+-       1,     1,     2,     2,     3,     1,     3,     2,     3,     1,
+-       1,     1,     4,     1,     0,     1,     2,     1,     1,     2,
+-       2,     2,     2,     1,     3,     1,     1,     3,     1,     1,
+-       3,     1,     1,     1,     1,     1,     1,     1,     1,     2,
+-       2,     3,     1,     1,     1,     1,     3,     1,     1,     1,
+-       1,     1,     1,     1,     3,     2,     1,     2,     2,     2,
+-       2,     1,     1,     1,     1,     2,     1,     1,     1,     2,
+-       3,     3,     1,     1,     1,     1,     1,     1,     1,     3,
+-       3,     3,     1,     3,     3,     2,     3,     3,     4,     5,
+-       1,     3,     3,     5,     2,     1,     4,     3,     4,     1,
+-       1
++       0,     2,     3,     2,     0,     1,     2,     1,     1,     1,
++       1,     1,     1,     1,     2,     2,     0,     2,     4,     0,
++       1,     1,     4,     3,     2,     2,     1,     2,     1,     1,
++       2,     3,     3,     1,     3,     0,     1,     1,     1,     3,
++       2,     1,     2,     1,     4,     2,     2,     1,     2,     1,
++       1,     1,     0,     4,     1,     4,     2,     3,     1,     2,
++       1,     1,     3,     1,     1,     4,     1,     1,     3,     1,
++       3,     1,     2,     1,     2,     3,     4,     4,     1,     6,
++       1,     2,     2,     1,     1,     1,     1,     1,     1,     1,
++       1,     3,     1,     2,     2,     2,     1,     2,     2,     2,
++       0,     1,     1,     3,     1,     1,     1,     1,     1,     1,
++       1,     1,     1,     1,     1,     1,     1,     1,     1,     6,
++       2,     2,     2,     4,     5,     1,     3,     2,     4,     5,
++       4,     1,     1,     4,     1,     2,     3,     1,     2,     4,
++       0,     0,     0,     2,     2,     4,     3,     6,     6,     1,
++       3,     1,     0,     1,     3,     3,     2,     0,     1,     1,
++       0,     1,     1,     2,     2,     3,     1,     3,     2,     3,
++       1,     1,     1,     4,     1,     0,     1,     2,     1,     1,
++       2,     2,     2,     2,     1,     3,     1,     1,     3,     1,
++       1,     3,     1,     1,     1,     1,     1,     1,     1,     1,
++       2,     2,     3,     1,     1,     1,     1,     3,     1,     1,
++       1,     1,     1,     1,     1,     3,     2,     1,     2,     2,
++       2,     2,     1,     1,     1,     1,     2,     1,     1,     1,
++       2,     3,     3,     1,     1,     1,     1,     1,     1,     1,
++       3,     3,     3,     1,     3,     3,     2,     3,     3,     4,
++       5,     1,     3,     3,     5,     2,     1,     4,     3,     4,
++       1,     1
+ };
+-/* YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE
+-   doesn't specify something else to do.  Zero means the default is an
+-   error. */
+-static const short yydefact[] =
+-{
+-       3,    15,     0,    32,     0,    77,    20,    19,    63,     0,
+-       0,    91,     0,    15,     4,     6,     0,     2,     0,     0,
+-       7,     0,    25,    27,    28,     0,     8,     0,    11,     0,
+-       9,     0,    10,    12,    86,     0,    87,    88,    89,    65,
+-       0,   259,    62,     0,    32,     0,   260,    44,     0,    26,
+-       0,    14,     5,     1,    13,     0,    16,     0,    24,    34,
+-      29,     0,   260,     0,     0,    66,    70,    68,     0,    32,
+-       0,     0,    94,    92,    93,     0,    85,     0,    83,    84,
+-       0,    30,     0,     0,     0,     0,     0,   213,     0,     0,
+-       0,     0,   148,   150,     0,   161,    62,     0,     0,   165,
+-       0,     0,     0,     0,     0,     0,     0,     0,    23,   173,
+-       0,     0,     0,   104,     0,    57,    59,     0,   212,    60,
+-       0,    95,   114,   115,   116,   117,     0,   103,     0,     0,
+-     105,   106,     0,   151,   156,    99,     0,   108,   109,   110,
+-     174,   111,   112,   113,   107,     0,   178,     0,     0,   177,
+-       0,   183,     0,   186,     0,   189,     0,   198,     0,   205,
+-     211,   216,   221,     0,   226,   234,   235,   236,   237,   238,
+-       0,   227,   222,     0,   223,   224,     0,    42,    35,     0,
+-      36,    37,     0,    40,    48,     0,    51,    46,    50,    49,
+-      31,     0,    61,     0,     0,    71,    72,     0,     0,    90,
+-       0,    64,     0,    98,    97,     0,     0,     0,     0,     0,
+-     245,   218,   224,   220,     0,     0,   155,     0,   162,   163,
+-       0,     0,     0,     0,     0,   121,     0,     0,     0,     0,
+-     224,   200,   222,   224,   199,   215,    58,     0,    22,    96,
+-       0,   130,   126,     0,     0,     0,     0,     0,   157,     0,
+-     100,   101,     0,     0,   175,   176,   179,   180,     0,     0,
+-     197,   195,   196,   192,   193,   194,     0,   204,   203,     0,
+-     208,   209,   210,     0,   217,   219,     0,   225,     0,   182,
+-       0,   254,   181,    17,    33,     0,    39,    41,    43,    53,
+-      47,    45,     0,    67,     0,    82,     0,     0,    69,    79,
+-      73,    76,    75,     0,     0,     0,   242,   120,   119,     0,
+-     239,   244,   243,     0,     0,     0,     0,     0,   171,   170,
+-     167,   169,     0,   166,     0,     0,   252,     0,     0,     0,
+-     214,    21,     0,   124,   131,     0,   139,   141,   133,   140,
+-     136,     0,   145,     0,   158,   159,   154,     0,     0,   164,
+-     184,   187,   190,   201,   206,   229,   233,     0,   232,   250,
+-       0,     0,     0,    38,     0,    74,    80,    81,    55,    54,
+-       0,    78,     0,     0,   247,   246,   129,   132,   258,   168,
+-     172,     0,     0,     0,     0,   122,     0,   127,     0,     0,
+-     134,     0,     0,   137,     0,   149,   152,     0,   160,     0,
+-     102,   144,   230,     0,   248,     0,   257,     0,     0,    56,
+-     240,   241,     0,   253,   249,   123,   125,     0,   143,   128,
+-     142,   135,     0,     0,     0,   231,   251,   256,    52,   118,
+-     138,     0,   146,   147,   153,     0,     0,     0
++/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
++   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
++   means the default is an error.  */
++static const unsigned short yydefact[] =
++{
++       4,     0,    16,     1,     0,    33,     0,    78,    21,    20,
++      64,     0,     0,    92,     0,    16,     5,     7,     0,     3,
++       0,     0,     8,     0,    26,    28,    29,     0,     9,     0,
++      12,     0,    10,     0,    11,    13,    87,     0,    88,    89,
++      90,    66,     0,   260,    63,     0,    33,     0,   261,    45,
++       0,    27,     0,    15,     6,     2,    14,     0,    17,     0,
++      25,    35,    30,     0,   261,     0,     0,    67,    71,    69,
++       0,    33,     0,     0,    95,    93,    94,     0,    86,     0,
++      84,    85,     0,    31,     0,     0,     0,     0,     0,   214,
++       0,     0,     0,     0,   149,   151,     0,   162,    63,     0,
++       0,   166,     0,     0,     0,     0,     0,     0,     0,     0,
++      24,   174,     0,     0,     0,   105,     0,    58,    60,     0,
++     213,    61,     0,    96,   115,   116,   117,   118,     0,   104,
++       0,     0,   106,   107,     0,   152,   157,   100,     0,   109,
++     110,   111,   175,   112,   113,   114,   108,     0,   179,     0,
++       0,   178,     0,   184,     0,   187,     0,   190,     0,   199,
++       0,   206,   212,   217,   222,     0,   227,   235,   236,   237,
++     238,   239,     0,   228,   223,     0,   224,   225,     0,    43,
++      36,     0,    37,    38,     0,    41,    49,     0,    52,    47,
++      51,    50,    32,     0,    62,     0,     0,    72,    73,     0,
++       0,    91,     0,    65,     0,    99,    98,     0,     0,     0,
++       0,     0,   246,   219,   225,   221,     0,     0,   156,     0,
++     163,   164,     0,     0,     0,     0,     0,   122,     0,     0,
++       0,     0,   225,   201,   223,   225,   200,   216,    59,     0,
++      23,    97,     0,   131,   127,     0,     0,     0,     0,     0,
++     158,     0,   101,   102,     0,     0,   176,   177,   180,   181,
++       0,     0,   198,   196,   197,   193,   194,   195,     0,   205,
++     204,     0,   209,   210,   211,     0,   218,   220,     0,   226,
++       0,   183,     0,   255,   182,    18,    34,     0,    40,    42,
++      44,    54,    48,    46,     0,    68,     0,    83,     0,     0,
++      70,    80,    74,    77,    76,     0,     0,     0,   243,   121,
++     120,     0,   240,   245,   244,     0,     0,     0,     0,     0,
++     172,   171,   168,   170,     0,   167,     0,     0,   253,     0,
++       0,     0,   215,    22,     0,   125,   132,     0,   140,   142,
++     134,   141,   137,     0,   146,     0,   159,   160,   155,     0,
++       0,   165,   185,   188,   191,   202,   207,   230,   234,     0,
++     233,   251,     0,     0,     0,    39,     0,    75,    81,    82,
++      56,    55,     0,    79,     0,     0,   248,   247,   130,   133,
++     259,   169,   173,     0,     0,     0,     0,   123,     0,   128,
++       0,     0,   135,     0,     0,   138,     0,   150,   153,     0,
++     161,     0,   103,   145,   231,     0,   249,     0,   258,     0,
++       0,    57,   241,   242,     0,   254,   250,   124,   126,     0,
++     144,   129,   143,   136,     0,     0,     0,   232,   252,   257,
++      53,   119,   139,     0,   147,   148,   154
+ };
++/* YYDEFGOTO[NTERM-NUM]. */
+ static const short yydefgoto[] =
+ {
+-     435,     1,    13,    14,    15,    16,    17,    18,    19,   113,
+-      20,    21,    22,    23,    24,    25,    60,   179,   180,   181,
+-     182,    26,    27,   185,   186,   187,   291,   292,    72,   304,
+-     114,   115,    28,    29,    64,    65,    66,   195,   196,    30,
+-      31,    32,   298,   299,   118,    33,    34,    35,    36,    37,
+-      38,   120,   249,   250,   121,   122,   123,   206,   124,   125,
+-     126,   332,   127,   128,   242,   335,   129,   337,   338,   339,
+-     340,   388,   394,   391,   392,   130,   131,   132,   245,   133,
+-     246,   397,   423,   134,   135,   247,   345,   399,   136,   137,
+-     138,   139,   140,   141,   221,   320,   142,   143,   253,   144,
+-     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
+-     266,   155,   156,   269,   157,   158,   273,   159,   160,   161,
+-     162,   163,   277,   357,   358,   164,   165,   310,   308,   166,
+-     167,   168,   210,   169,   170,   360,   171,   172,   173,   281,
+-     174,   230,    67
++      -1,     1,     2,    15,    16,    17,    18,    19,    20,    21,
++     115,    22,    23,    24,    25,    26,    27,    62,   181,   182,
++     183,   184,    28,    29,   187,   188,   189,   293,   294,    74,
++     306,   116,   117,    30,    31,    66,    67,    68,   197,   198,
++      32,    33,    34,   300,   301,   120,    35,    36,    37,    38,
++      39,    40,   122,   251,   252,   123,   124,   125,   208,   126,
++     127,   128,   334,   129,   130,   244,   337,   131,   339,   340,
++     341,   342,   390,   396,   393,   394,   132,   133,   134,   247,
++     135,   248,   399,   425,   136,   137,   249,   347,   401,   138,
++     139,   140,   141,   142,   143,   223,   322,   144,   145,   255,
++     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
++     156,   268,   157,   158,   271,   159,   160,   275,   161,   162,
++     163,   164,   165,   279,   359,   360,   166,   167,   312,   310,
++     168,   169,   170,   212,   171,   172,   362,   173,   174,   175,
++     283,   176,   232,    69
+ };
++/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
++   STATE-NUM.  */
++#define YYPACT_NINF -303
+ static const short yypact[] =
+ {
+-  -32768,  1019,   -40,    20,   223,-32768,    43,    54,-32768,    64,
+-      58,-32768,    72,  1019,-32768,-32768,    82,-32768,    41,    68,
+-  -32768,    41,-32768,-32768,-32768,    91,-32768,    70,-32768,   145,
+-  -32768,   223,-32768,-32768,-32768,   178,-32768,-32768,-32768,-32768,
+-      15,-32768,-32768,    64,-32768,    91,-32768,-32768,    43,-32768,
+-      43,-32768,-32768,-32768,-32768,   321,-32768,   103,-32768,   235,
+-  -32768,   170,   107,    91,    44,-32768,-32768,    71,    64,    16,
+-     110,   141,-32768,-32768,-32768,   144,-32768,   150,-32768,-32768,
+-     154,-32768,   -30,   168,   168,   168,   172,-32768,   216,   216,
+-     181,   193,-32768,-32768,   195,-32768,   197,   192,   201,-32768,
+-     194,   224,   168,   168,   172,   218,   219,   972,-32768,-32768,
+-     991,   991,   991,-32768,   390,-32768,-32768,    64,-32768,-32768,
+-     514,-32768,-32768,-32768,-32768,-32768,   217,-32768,   762,   222,
+-  -32768,-32768,   220,-32768,   972,   972,   225,-32768,-32768,-32768,
+-     972,-32768,-32768,-32768,-32768,   226,-32768,   972,   972,   264,
+-     269,   271,   272,-32768,    31,    55,    84,   124,   159,-32768,
+-  -32768,    96,-32768,   236,-32768,-32768,-32768,-32768,-32768,-32768,
+-     233,-32768,   229,   232,-32768,    10,   240,   -40,-32768,   242,
+-     243,-32768,    64,   239,-32768,   247,   175,-32768,-32768,-32768,
+-  -32768,    64,-32768,    15,    11,   144,-32768,   245,   114,-32768,
+-     231,-32768,    11,-32768,-32768,   851,   250,   250,   250,   921,
+-  -32768,-32768,-32768,-32768,   972,   972,-32768,   972,-32768,-32768,
+-     832,     3,   972,   251,    26,-32768,   972,   972,   197,   255,
+-      -7,   124,-32768,    33,   124,-32768,-32768,   576,-32768,-32768,
+-     972,-32768,   290,   289,   972,   762,   762,   256,-32768,   258,
+-     257,-32768,   452,   259,-32768,-32768,-32768,-32768,   972,   972,
+-  -32768,-32768,-32768,-32768,-32768,-32768,   972,-32768,-32768,   991,
+-  -32768,-32768,-32768,   991,-32768,-32768,   902,-32768,   972,-32768,
+-     972,   263,-32768,-32768,-32768,   238,-32768,-32768,-32768,-32768,
+-  -32768,-32768,   275,-32768,   270,-32768,    15,    15,-32768,-32768,
+-  -32768,-32768,-32768,   274,   119,   276,-32768,-32768,-32768,   851,
+-  -32768,-32768,-32768,   280,   282,   283,   287,   295,-32768,-32768,
+-  -32768,-32768,   832,-32768,   291,   972,-32768,   972,   301,   302,
+-  -32768,-32768,    37,-32768,-32768,   762,-32768,   161,-32768,   289,
+-  -32768,   307,-32768,   338,-32768,   972,-32768,   972,   638,-32768,
+-     271,-32768,   123,   124,-32768,-32768,-32768,    75,-32768,-32768,
+-      85,   303,   972,-32768,   452,-32768,-32768,-32768,-32768,-32768,
+-     304,-32768,   311,   318,-32768,-32768,-32768,-32768,-32768,-32768,
+-  -32768,   319,   324,   373,   373,-32768,   972,-32768,   972,   314,
+-  -32768,   325,   452,-32768,   452,-32768,-32768,   329,   257,   332,
+-  -32768,-32768,-32768,   972,-32768,   972,-32768,   322,   700,-32768,
+-  -32768,-32768,   328,-32768,-32768,-32768,-32768,   334,-32768,-32768,
+-     762,   762,   972,   330,   762,-32768,-32768,-32768,-32768,-32768,
+-  -32768,   346,-32768,-32768,-32768,   404,   405,-32768
++    -303,    32,   278,  -303,   -21,    45,    42,  -303,    49,    78,
++    -303,    82,   191,  -303,    85,   278,  -303,  -303,   123,  -303,
++      64,    96,  -303,    64,  -303,  -303,  -303,    99,  -303,   118,
++    -303,   162,  -303,    42,  -303,  -303,  -303,   240,  -303,  -303,
++    -303,  -303,    48,  -303,  -303,    82,  -303,    99,  -303,  -303,
++      49,  -303,    49,  -303,  -303,  -303,  -303,   334,  -303,   125,
++    -303,   293,  -303,   387,   135,    99,    92,  -303,  -303,   129,
++      82,     6,   122,   145,  -303,  -303,  -303,   130,  -303,   140,
++    -303,  -303,   141,  -303,    47,   158,   158,   158,   163,  -303,
++     217,   217,   177,   178,  -303,  -303,   183,  -303,   185,   180,
++     184,  -303,   207,   205,   158,   158,   163,   193,   196,   934,
++    -303,  -303,   985,   985,   985,  -303,   403,  -303,  -303,    82,
++    -303,  -303,   527,  -303,  -303,  -303,  -303,  -303,   197,  -303,
++     775,   195,  -303,  -303,   208,  -303,   934,   934,   209,  -303,
++    -303,  -303,   934,  -303,  -303,  -303,  -303,   201,  -303,   934,
++     934,   247,   248,   252,   253,  -303,   147,   113,     1,   114,
++     117,  -303,  -303,    84,  -303,   221,  -303,  -303,  -303,  -303,
++    -303,  -303,   218,  -303,   215,   226,  -303,     8,   233,   -21,
++    -303,   234,   232,  -303,    82,   238,  -303,   236,   812,  -303,
++    -303,  -303,  -303,    82,  -303,    48,    12,   130,  -303,   244,
++      69,  -303,   853,  -303,    12,  -303,  -303,   845,   254,   254,
++     254,   864,  -303,  -303,  -303,  -303,   934,   934,  -303,   934,
++    -303,  -303,   202,    -6,   934,   256,    54,  -303,   934,   934,
++     185,   243,    24,   114,  -303,   -20,   114,  -303,  -303,   589,
++    -303,  -303,   934,  -303,   284,   294,   934,   775,   775,   262,
++    -303,   268,   274,  -303,   465,   285,  -303,  -303,  -303,  -303,
++     934,   934,  -303,  -303,  -303,  -303,  -303,  -303,   934,  -303,
++    -303,   985,  -303,  -303,  -303,   985,  -303,  -303,   915,  -303,
++     934,  -303,   934,   273,  -303,  -303,  -303,    91,  -303,  -303,
++    -303,  -303,  -303,  -303,   288,  -303,   286,  -303,    48,    48,
++    -303,  -303,  -303,  -303,  -303,   287,    27,   289,  -303,  -303,
++    -303,   845,  -303,  -303,  -303,   291,   295,   296,   300,   302,
++    -303,  -303,  -303,  -303,   202,  -303,   298,   934,  -303,   934,
++     305,   306,  -303,  -303,    61,  -303,  -303,   775,  -303,   171,
++    -303,   294,  -303,   310,  -303,   347,  -303,   934,  -303,   934,
++     651,  -303,   252,  -303,    50,   114,  -303,  -303,  -303,    81,
++    -303,  -303,    93,   311,   934,  -303,   465,  -303,  -303,  -303,
++    -303,  -303,   315,  -303,   321,   322,  -303,  -303,  -303,  -303,
++    -303,  -303,  -303,   323,   324,   383,   383,  -303,   934,  -303,
++     934,   326,  -303,   330,   465,  -303,   465,  -303,  -303,   339,
++     274,   341,  -303,  -303,  -303,   934,  -303,   934,  -303,   335,
++     713,  -303,  -303,  -303,   340,  -303,  -303,  -303,  -303,   337,
++    -303,  -303,   775,   775,   934,   353,   775,  -303,  -303,  -303,
++    -303,  -303,  -303,   346,  -303,  -303,  -303
+ };
++/* YYPGOTO[NTERM-NUM].  */
+ static const short yypgoto[] =
+ {
+-  -32768,-32768,-32768,   393,-32768,-32768,   394,-32768,-32768,   125,
+-     -46,   -33,   398,-32768,-32768,    32,    -6,-32768,-32768,   128,
+-  -32768,-32768,   374,-32768,-32768,   230,-32768,-32768,-32768,-32768,
+-  -32768,   308,   -11,     0,-32768,   244,   -16,-32768,   228,-32768,
+-  -32768,   -45,   213,   -35,   -37,   -38,-32768,-32768,-32768,-32768,
+-  -32768,  -108,-32768,    76,  -119,-32768,-32768,    46,-32768,-32768,
+-  -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,    93,-32768,
+-      92,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-  -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-  -32768,-32768,-32768,-32768,-32768,   111,-32768,-32768,-32768,-32768,
+-    -107,-32768,-32768,-32768,-32768,-32768,   176,-32768,   177,-32768,
+-  -32768,   171,-32768,-32768,   -99,-32768,-32768,  -105,-32768,   104,
+-  -32768,-32768,-32768,-32768,    42,-32768,-32768,    39,  -296,-32768,
+-  -32768,-32768,   340,-32768,-32768,-32768,-32768,   -75,-32768,-32768,
+-  -32768,    50,    -1
++    -303,  -303,  -303,  -303,   401,  -303,  -303,   402,  -303,  -303,
++     128,   -53,   -36,   407,  -303,  -303,    41,     0,  -303,  -303,
++     139,  -303,  -303,   391,  -303,  -303,   241,  -303,  -303,  -303,
++    -303,  -303,   319,   -13,    -4,  -303,   250,   -16,  -303,   239,
++    -303,  -303,   -49,   242,   -37,   -39,   -31,  -303,  -303,  -303,
++    -303,  -303,  -110,  -303,    97,  -105,  -303,  -303,    -5,  -303,
++    -303,  -303,  -303,  -303,  -303,  -303,  -303,  -303,  -303,   108,
++    -303,   107,  -303,  -303,  -303,  -303,  -303,  -303,  -303,  -303,
++    -303,  -303,  -303,  -303,  -303,  -303,  -303,  -303,  -303,  -303,
++    -303,  -303,  -303,  -303,  -303,  -303,   126,  -303,  -303,  -303,
++    -303,  -109,  -303,  -303,  -303,  -303,  -303,   189,  -303,   199,
++    -303,  -303,   190,  -303,  -303,   -93,  -303,  -303,  -107,  -303,
++     109,  -303,  -303,  -303,  -303,    52,  -303,  -303,    21,  -302,
++    -303,  -303,  -303,   356,  -303,  -303,  -303,  -303,  -101,  -303,
++    -303,  -303,    33,    -7
+ };
+-
+-#define       YYLAST          1074
+-
+-
++/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
++   positive, shift that token.  If negative, reduce the rule which
++   number is the opposite.  If zero, do what YYDEFACT says.
++   If YYTABLE_NINF, syntax error.  */
++#define YYTABLE_NINF -262
+ static const short yytable[] =
+ {
+-     229,   239,    70,    78,    43,    77,   237,   235,    47,   241,
+-      50,   231,   234,   373,    76,   184,   189,   119,    76,    74,
+-     -65,    41,   295,    40,    73,    41,  -259,   248,   251,   203,
+-    -259,    68,   204,   254,    75,   232,   232,   232,    45,    81,
+-     256,   257,    80,   322,   116,   260,   261,   262,   263,  -228,
+-     188,    39,   197,    44,    39,   117,  -255,   190,   282,   183,
+-      39,    63,     2,    39,   -62,   323,  -228,   198,     3,  -191,
+-    -191,  -191,  -191,  -255,    46,   282,   119,   296,   297,  -260,
+-      45,    39,    63,   326,    51,    39,   327,   414,   415,  -228,
+-      79,    48,    42,     8,   385,    54,  -255,   386,   307,    55,
+-     264,   265,   314,   116,   191,   175,   192,   315,   316,    39,
+-     317,    39,    57,   321,   117,   324,   274,   275,   239,   328,
+-     329,  -202,  -202,     2,  -191,  -191,   342,   343,    61,     3,
+-     207,   208,   402,   333,   193,   403,   194,   341,   212,   212,
+-     184,   189,   404,    56,   348,   405,    58,    59,   223,   224,
+-     267,   268,    48,    42,     8,    62,    78,    78,   294,   176,
+-     233,   233,   233,   -32,   175,    78,    10,   303,   354,   356,
+-     353,   359,   199,   361,     2,   188,   302,   193,   369,     2,
+-       3,   286,     2,   232,   232,     3,   336,   389,    69,  -202,
+-    -202,   232,   211,   213,   232,  -207,  -207,  -207,   232,   200,
+-      50,     4,   372,    48,    42,     8,     4,   193,    48,    42,
+-       8,    48,    42,     8,   201,   321,   387,    10,   381,   202,
+-     382,   289,    10,     9,   205,    10,    41,     2,   209,   239,
+-     270,   271,   272,    41,   220,     2,    39,   214,   251,   177,
+-     400,     3,   177,    79,    79,    41,   311,   312,    41,   215,
+-      39,   216,    79,   217,   218,   407,   408,    42,     8,    78,
+-      78,   366,   367,   219,    48,    42,     8,   222,   178,    42,
+-       8,   370,    42,     8,   226,   227,   244,   240,    10,   416,
+-     243,   417,  -185,   252,   420,   183,   421,   258,   255,   239,
+-    -188,   259,   276,   278,   279,   280,   356,   283,   426,   284,
+-     287,   239,   239,   285,    50,   433,   288,   301,   233,   233,
+-     309,   325,   330,   334,   336,   431,   233,   347,   344,   233,
+-     346,   349,    82,   233,    76,     2,   362,    83,    84,    85,
+-      86,    41,    87,   364,   365,    39,   368,   374,   371,   375,
+-     376,    88,    89,    90,   377,    91,    79,    79,    92,    93,
+-      94,    95,   378,   380,    39,    96,     8,    97,    98,    99,
+-     100,   383,   384,   101,   395,   396,   409,   406,   410,   102,
+-     103,   104,    11,   105,   106,   411,   412,   107,   306,    55,
+-     108,   413,   418,   109,   419,   422,   427,   110,   111,   424,
+-     429,    82,   432,    76,     2,   112,    83,    84,    85,    86,
+-      41,    87,   430,   434,   436,   437,    52,    53,    49,    71,
+-      88,    89,    90,   363,    91,   305,   290,    92,    93,    94,
+-      95,   398,   236,   300,    96,     8,    97,    98,    99,   100,
+-     390,   393,   101,   379,   350,   293,   351,   352,   102,   103,
+-     104,    11,   105,   106,   225,   425,   107,     0,    55,     0,
+-       0,     0,   109,    82,     0,    76,   110,   111,    83,    84,
+-      85,    86,    41,    87,   112,     0,     0,     0,     0,     0,
+-       0,     0,    88,    89,    90,     0,    91,     0,     0,    92,
+-      93,    94,    95,     0,     0,     0,   228,     0,    97,    98,
+-      99,   100,     0,     0,   101,     0,     0,     0,     0,     0,
+-     102,   103,   104,     0,   105,   106,     0,     0,   107,     0,
+-      55,     0,     0,     0,   109,     0,     0,    76,   110,   111,
+-      83,    84,    85,    86,    41,    87,   112,     0,     0,     0,
+-       0,     0,     0,     0,    88,    89,    90,     0,    91,     0,
+-       0,    92,    93,    94,    95,     0,     0,     0,   228,     0,
+-      97,    98,    99,   100,     0,     0,   101,     0,     0,     0,
+-       0,     0,   102,   103,   104,     0,   105,   106,     0,     0,
+-     107,     0,    55,   238,     0,     0,   109,     0,     0,    76,
+-     110,   111,    83,    84,    85,    86,    41,    87,   112,     0,
+-       0,     0,     0,     0,     0,     0,    88,    89,    90,     0,
+-      91,     0,     0,    92,    93,    94,    95,     0,     0,     0,
+-     228,     0,    97,    98,    99,   100,     0,     0,   101,     0,
+-       0,     0,     0,     0,   102,   103,   104,     0,   105,   106,
+-       0,     0,   107,     0,    55,   331,     0,     0,   109,     0,
+-       0,    76,   110,   111,    83,    84,    85,    86,    41,    87,
+-     112,     0,     0,     0,     0,     0,     0,     0,    88,    89,
+-      90,     0,    91,     0,     0,    92,    93,    94,    95,     0,
+-       0,     0,   228,     0,    97,    98,    99,   100,     0,     0,
+-     101,     0,     0,     0,     0,     0,   102,   103,   104,     0,
+-     105,   106,     0,     0,   107,     0,    55,   401,     0,     0,
+-     109,     0,     0,    76,   110,   111,    83,    84,    85,    86,
+-      41,    87,   112,     0,     0,     0,     0,     0,     0,     0,
+-      88,    89,    90,     0,    91,     0,     0,    92,    93,    94,
+-      95,     0,     0,     0,   228,     0,    97,    98,    99,   100,
+-       0,     0,   101,     0,     0,     0,     0,     0,   102,   103,
+-     104,     0,   105,   106,     0,     0,   107,     0,    55,   428,
+-       0,     0,   109,     0,     0,    76,   110,   111,    83,    84,
+-      85,    86,    41,    87,   112,     0,     0,     0,     0,     0,
+-       0,     0,    88,    89,    90,     0,    91,     0,     0,    92,
+-      93,    94,    95,     0,     0,     0,   228,     0,    97,    98,
+-      99,   100,     0,     0,   101,     0,     0,     0,     0,     0,
+-     102,   103,   104,     0,   105,   106,     0,     0,   107,     0,
+-      55,     0,     0,     0,   109,     0,     0,     0,   110,   111,
+-       0,     0,     0,     0,     0,    76,   112,   318,    83,    84,
+-      85,    86,    41,    87,     0,     0,     0,     0,     0,     0,
+-       0,     0,    88,    89,    76,     0,   306,    83,    84,    85,
+-      86,    41,    87,     0,     0,     0,   228,     0,     0,     0,
+-       0,    88,    89,   319,     0,     0,     0,     0,     0,     0,
+-       0,   103,     0,     0,   105,   228,     0,     0,   107,     0,
+-       0,     0,     0,     0,     0,     0,     0,     0,   110,   111,
+-     103,     0,     0,   105,     0,    76,   112,   107,    83,    84,
+-      85,    86,    41,    87,     0,     0,     0,   110,   111,     0,
+-       0,     0,    88,    89,    76,   112,   313,    83,    84,    85,
+-      86,    41,    87,     0,     0,     0,   228,     0,     0,     0,
+-       0,    88,    89,     0,     0,     0,     0,     0,     0,     0,
+-       0,   103,     0,     0,   105,   228,     0,     0,   107,   355,
+-       0,     0,     0,     0,     0,     0,     0,     0,   110,   111,
+-     103,     0,     0,   105,     0,    76,   112,   107,    83,    84,
+-      85,    86,    41,    87,     0,     0,     0,   110,   111,     0,
+-       0,     0,    88,    89,    76,   112,     0,    83,    84,    85,
+-      86,    41,    87,     0,     0,     0,   228,     0,     0,     0,
+-       0,    88,    89,     0,     0,     0,     0,     0,     0,     0,
+-       0,   103,     0,     2,   105,   228,     0,     0,   107,     3,
+-       0,     0,     0,     0,     0,     0,     0,     0,   110,   111,
+-     103,     0,     0,   105,     0,     0,   112,   107,     0,     0,
+-       4,     5,     6,     7,     8,     0,     0,     0,     0,     0,
+-       0,     0,     0,   -18,     9,   112,    10,     0,     0,     0,
+-      11,     0,     0,     0,    12
++     231,    72,    45,    80,    49,    79,   239,   237,    52,   375,
++     186,   234,   234,   234,   191,    78,  -260,   241,   -66,   233,
++     236,    76,    43,   297,    75,   243,   121,   250,   253,    70,
++      77,     4,     3,   256,   324,    41,  -229,     5,    82,    41,
++     258,   259,    42,  -256,   118,    41,     4,    83,    41,    47,
++     190,    78,    43,   119,   199,  -260,   325,   185,    43,    46,
++      50,    44,    10,   200,  -229,   192,    41,   269,   270,  -261,
++      41,  -256,    65,   284,    12,    81,    44,    10,   298,   299,
++    -229,   209,   210,   416,   417,   121,   371,  -256,   -63,   284,
++     177,    47,    48,    65,    41,   179,    41,    53,   309,   225,
++     226,    43,   316,   118,   276,   277,   205,   317,   318,   206,
++     319,   328,   119,   323,   329,   326,  -203,  -203,   387,   330,
++     331,   388,    57,   214,   214,    44,    10,  -192,  -192,  -192,
++    -192,   304,   195,   335,   241,   186,    56,   343,   404,   191,
++      59,   405,   344,   345,   350,   235,   235,   235,    58,   177,
++     406,    60,   193,   407,   194,    61,    80,    80,   296,   234,
++     234,   262,   263,   264,   265,    80,   305,   234,   356,   358,
++     234,   361,    64,   363,   234,   190,    63,   288,   355,  -203,
++    -203,   178,  -192,  -192,   201,  -208,  -208,  -208,   272,   273,
++     274,   -33,   195,   195,   196,     4,   338,   391,    52,   213,
++     215,     5,   374,   202,   203,    78,   204,   320,    85,    86,
++      87,    88,    43,    89,   207,   323,   266,   267,   383,   211,
++     384,    41,    90,    91,    50,    44,    10,    43,    81,    81,
++     313,   314,   389,   216,   217,    41,   230,    81,   253,   218,
++     402,   219,   220,   321,     4,   241,   221,   222,   224,   228,
++      71,   105,   229,   245,   107,   409,   410,   242,   109,    80,
++      80,   368,   369,   257,   246,  -186,   260,   254,   112,   113,
++     372,  -189,   261,    50,    44,    10,   114,   278,   280,   418,
++     281,   419,     4,   185,   422,    11,   423,    12,     5,   282,
++     285,   286,   287,   235,   235,   290,   358,   179,   428,   289,
++     332,   235,    52,    43,   235,   241,   303,   336,   235,     6,
++       7,     8,     9,    10,   311,   433,   327,   241,   241,   338,
++      41,   435,   -19,    11,   346,    12,   180,    44,    10,    13,
++     348,    81,    81,    14,   349,    84,   364,    78,     4,    41,
++      85,    86,    87,    88,    43,    89,   366,   351,   376,   370,
++     367,   373,   377,   378,    90,    91,    92,   379,    93,   380,
++     382,    94,    95,    96,    97,   385,   386,   397,    98,    10,
++      99,   100,   101,   102,   398,   408,   103,   411,   412,   413,
++     414,   415,   104,   105,   106,    13,   107,   108,   308,   421,
++     109,     4,    57,   110,   420,   424,   111,     5,   426,   429,
++     112,   113,   431,   436,    84,   432,    78,     4,   114,    85,
++      86,    87,    88,    43,    89,   434,    54,    55,     6,    51,
++      50,    44,    10,    90,    91,    92,   365,    93,    73,   292,
++      94,    95,    96,    97,    12,   238,   302,    98,    10,    99,
++     100,   101,   102,   295,   400,   103,   307,   392,   395,   352,
++     381,   104,   105,   106,    13,   107,   108,   427,   354,   109,
++     353,    57,   227,     0,     0,   111,    84,     0,    78,   112,
++     113,    85,    86,    87,    88,    43,    89,   114,     0,     0,
++       0,     0,     0,     0,     0,    90,    91,    92,     0,    93,
++       0,     0,    94,    95,    96,    97,     0,     0,     0,   230,
++       0,    99,   100,   101,   102,     0,     0,   103,     0,     0,
++       0,     0,     0,   104,   105,   106,     0,   107,   108,     0,
++       0,   109,     0,    57,     0,     0,     0,   111,     0,     0,
++      78,   112,   113,    85,    86,    87,    88,    43,    89,   114,
++       0,     0,     0,     0,     0,     0,     0,    90,    91,    92,
++       0,    93,     0,     0,    94,    95,    96,    97,     0,     0,
++       0,   230,     0,    99,   100,   101,   102,     0,     0,   103,
++       0,     0,     0,     0,     0,   104,   105,   106,     0,   107,
++     108,     0,     0,   109,     0,    57,   240,     0,     0,   111,
++       0,     0,    78,   112,   113,    85,    86,    87,    88,    43,
++      89,   114,     0,     0,     0,     0,     0,     0,     0,    90,
++      91,    92,     0,    93,     0,     0,    94,    95,    96,    97,
++       0,     0,     0,   230,     0,    99,   100,   101,   102,     0,
++       0,   103,     0,     0,     0,     0,     0,   104,   105,   106,
++       0,   107,   108,     0,     0,   109,     0,    57,   333,     0,
++       0,   111,     0,     0,    78,   112,   113,    85,    86,    87,
++      88,    43,    89,   114,     0,     0,     0,     0,     0,     0,
++       0,    90,    91,    92,     0,    93,     0,     0,    94,    95,
++      96,    97,     0,     0,     0,   230,     0,    99,   100,   101,
++     102,     0,     0,   103,     0,     0,     0,     0,     0,   104,
++     105,   106,     0,   107,   108,     0,     0,   109,     0,    57,
++     403,     0,     0,   111,     0,     0,    78,   112,   113,    85,
++      86,    87,    88,    43,    89,   114,     0,     0,     0,     0,
++       0,     0,     0,    90,    91,    92,     0,    93,     0,     0,
++      94,    95,    96,    97,     0,     0,     0,   230,     0,    99,
++     100,   101,   102,     0,     0,   103,     0,     0,     0,     0,
++       0,   104,   105,   106,     0,   107,   108,     0,     0,   109,
++       0,    57,   430,     0,     0,   111,     0,     0,    78,   112,
++     113,    85,    86,    87,    88,    43,    89,   114,     0,     0,
++       0,     0,     0,     0,     0,    90,    91,    92,     0,    93,
++       0,     0,    94,    95,    96,    97,     0,     0,     0,   230,
++       0,    99,   100,   101,   102,     0,     4,   103,     0,     0,
++       0,     0,     5,   104,   105,   106,     0,   107,   108,     0,
++       0,   109,     0,    57,     0,     0,     0,   111,     0,     0,
++       0,   112,   113,     6,     0,    50,    44,    10,    78,   114,
++     308,    85,    86,    87,    88,    43,    89,     4,   291,    12,
++       0,     0,     0,     5,     0,    90,    91,    78,     0,   315,
++      85,    86,    87,    88,    43,    89,     0,     0,     0,   230,
++       0,     0,     0,     0,    90,    91,    50,    44,    10,     0,
++       0,     0,     0,     0,   105,     0,     0,   107,   230,     0,
++      12,   109,     0,     0,     0,     0,     0,     0,     0,     0,
++       0,   112,   113,   105,     0,     0,   107,     0,    78,   114,
++     109,    85,    86,    87,    88,    43,    89,     0,     0,     0,
++     112,   113,     0,     0,     0,    90,    91,    78,   114,     0,
++      85,    86,    87,    88,    43,    89,     0,     0,     0,   230,
++       0,     0,     0,     0,    90,    91,     0,     0,     0,     0,
++       0,     0,     0,     0,   105,     0,     0,   107,   230,     0,
++       0,   109,   357,     0,     0,     0,     0,     0,     0,     0,
++       0,   112,   113,   105,     0,     0,   107,     0,    78,   114,
++     109,    85,    86,    87,    88,    43,    89,     0,     0,     0,
++     112,   113,     0,     0,     0,    90,    91,     0,   114,     0,
++       0,     0,     0,     0,     0,     0,     0,     0,     0,   230,
++       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
++       0,     0,     0,     0,   105,     0,     0,   107,     0,     0,
++       0,   109,     0,     0,     0,     0,     0,     0,     0,     0,
++       0,     0,     0,     0,     0,     0,     0,     0,     0,   114
+ };
+ static const short yycheck[] =
+ {
+-     107,   120,    35,    40,     4,    40,   114,   112,     9,   128,
+-      10,   110,   111,   309,     3,    61,    61,    55,     3,    35,
+-      10,    10,    11,    63,    35,    10,    10,   134,   135,    59,
+-      10,    31,    62,   140,    35,   110,   111,   112,     6,    45,
+-     147,   148,    43,    40,    55,    14,    15,    16,    17,    56,
+-      61,     1,    68,    10,     4,    55,    63,    63,    65,    59,
+-      10,    29,     4,    13,    10,    62,    56,    68,    10,    14,
+-      15,    16,    17,    63,    10,    65,   114,    66,    67,    63,
+-      48,    31,    50,    57,    12,    35,    60,   383,   384,    56,
+-      40,    33,    34,    35,    57,    13,    63,    60,   205,    58,
+-      69,    70,   209,   114,    60,    55,    62,   214,   215,    59,
+-     217,    61,    44,   220,   114,   222,    20,    21,   237,   226,
+-     227,    66,    67,     4,    69,    70,   245,   246,    58,    10,
+-      84,    85,    57,   240,    63,    60,    65,   244,    88,    89,
+-     186,   186,    57,    18,   252,    60,    21,    56,   102,   103,
+-      66,    67,    33,    34,    35,    10,   193,   194,   193,    56,
+-     110,   111,   112,    56,   114,   202,    47,   200,   273,   276,
+-     269,   278,    62,   280,     4,   186,    62,    63,    59,     4,
+-      10,   182,     4,   258,   259,    10,    25,    26,    10,    66,
+-      67,   266,    88,    89,   269,    71,    72,    73,   273,    58,
+-     200,    31,   309,    33,    34,    35,    31,    63,    33,    34,
+-      35,    33,    34,    35,    64,   322,   335,    47,   325,    65,
+-     327,    46,    47,    45,    56,    47,    10,     4,    56,   348,
+-      71,    72,    73,    10,    40,     4,   186,    56,   345,     4,
+-     347,    10,     4,   193,   194,    10,   207,   208,    10,    56,
+-     200,    56,   202,    56,    62,   362,   364,    34,    35,   296,
+-     297,   296,   297,    62,    33,    34,    35,    43,    33,    34,
+-      35,   304,    34,    35,    56,    56,    56,    60,    47,   386,
+-      58,   388,    18,    58,   392,   285,   394,    18,    62,   408,
+-      19,    19,    56,    60,    65,    63,   403,    57,   405,    57,
+-      61,   420,   421,    60,   304,   424,    59,    62,   258,   259,
+-      60,    60,    57,    23,    25,   422,   266,    60,    62,   269,
+-      62,    62,     1,   273,     3,     4,    63,     6,     7,     8,
+-       9,    10,    11,    58,    64,   285,    62,    57,    62,    57,
+-      57,    20,    21,    22,    57,    24,   296,   297,    27,    28,
+-      29,    30,    57,    62,   304,    34,    35,    36,    37,    38,
+-      39,    60,    60,    42,    57,    27,    62,    64,    57,    48,
+-      49,    50,    51,    52,    53,    57,    57,    56,     5,    58,
+-      59,    57,    68,    62,    59,    56,    64,    66,    67,    57,
+-      62,     1,    62,     3,     4,    74,     6,     7,     8,     9,
+-      10,    11,    68,    57,     0,     0,    13,    13,    10,    35,
+-      20,    21,    22,   285,    24,   202,   186,    27,    28,    29,
+-      30,   345,   114,   195,    34,    35,    36,    37,    38,    39,
+-     337,   339,    42,   322,   258,   191,   259,   266,    48,    49,
+-      50,    51,    52,    53,   104,   403,    56,    -1,    58,    -1,
+-      -1,    -1,    62,     1,    -1,     3,    66,    67,     6,     7,
+-       8,     9,    10,    11,    74,    -1,    -1,    -1,    -1,    -1,
+-      -1,    -1,    20,    21,    22,    -1,    24,    -1,    -1,    27,
+-      28,    29,    30,    -1,    -1,    -1,    34,    -1,    36,    37,
+-      38,    39,    -1,    -1,    42,    -1,    -1,    -1,    -1,    -1,
+-      48,    49,    50,    -1,    52,    53,    -1,    -1,    56,    -1,
+-      58,    -1,    -1,    -1,    62,    -1,    -1,     3,    66,    67,
+-       6,     7,     8,     9,    10,    11,    74,    -1,    -1,    -1,
+-      -1,    -1,    -1,    -1,    20,    21,    22,    -1,    24,    -1,
+-      -1,    27,    28,    29,    30,    -1,    -1,    -1,    34,    -1,
+-      36,    37,    38,    39,    -1,    -1,    42,    -1,    -1,    -1,
+-      -1,    -1,    48,    49,    50,    -1,    52,    53,    -1,    -1,
+-      56,    -1,    58,    59,    -1,    -1,    62,    -1,    -1,     3,
+-      66,    67,     6,     7,     8,     9,    10,    11,    74,    -1,
+-      -1,    -1,    -1,    -1,    -1,    -1,    20,    21,    22,    -1,
+-      24,    -1,    -1,    27,    28,    29,    30,    -1,    -1,    -1,
+-      34,    -1,    36,    37,    38,    39,    -1,    -1,    42,    -1,
+-      -1,    -1,    -1,    -1,    48,    49,    50,    -1,    52,    53,
+-      -1,    -1,    56,    -1,    58,    59,    -1,    -1,    62,    -1,
+-      -1,     3,    66,    67,     6,     7,     8,     9,    10,    11,
+-      74,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    20,    21,
+-      22,    -1,    24,    -1,    -1,    27,    28,    29,    30,    -1,
+-      -1,    -1,    34,    -1,    36,    37,    38,    39,    -1,    -1,
+-      42,    -1,    -1,    -1,    -1,    -1,    48,    49,    50,    -1,
+-      52,    53,    -1,    -1,    56,    -1,    58,    59,    -1,    -1,
+-      62,    -1,    -1,     3,    66,    67,     6,     7,     8,     9,
+-      10,    11,    74,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+-      20,    21,    22,    -1,    24,    -1,    -1,    27,    28,    29,
+-      30,    -1,    -1,    -1,    34,    -1,    36,    37,    38,    39,
+-      -1,    -1,    42,    -1,    -1,    -1,    -1,    -1,    48,    49,
+-      50,    -1,    52,    53,    -1,    -1,    56,    -1,    58,    59,
+-      -1,    -1,    62,    -1,    -1,     3,    66,    67,     6,     7,
+-       8,     9,    10,    11,    74,    -1,    -1,    -1,    -1,    -1,
+-      -1,    -1,    20,    21,    22,    -1,    24,    -1,    -1,    27,
+-      28,    29,    30,    -1,    -1,    -1,    34,    -1,    36,    37,
+-      38,    39,    -1,    -1,    42,    -1,    -1,    -1,    -1,    -1,
+-      48,    49,    50,    -1,    52,    53,    -1,    -1,    56,    -1,
+-      58,    -1,    -1,    -1,    62,    -1,    -1,    -1,    66,    67,
+-      -1,    -1,    -1,    -1,    -1,     3,    74,     5,     6,     7,
+-       8,     9,    10,    11,    -1,    -1,    -1,    -1,    -1,    -1,
+-      -1,    -1,    20,    21,     3,    -1,     5,     6,     7,     8,
+-       9,    10,    11,    -1,    -1,    -1,    34,    -1,    -1,    -1,
+-      -1,    20,    21,    41,    -1,    -1,    -1,    -1,    -1,    -1,
+-      -1,    49,    -1,    -1,    52,    34,    -1,    -1,    56,    -1,
+-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,
+-      49,    -1,    -1,    52,    -1,     3,    74,    56,     6,     7,
+-       8,     9,    10,    11,    -1,    -1,    -1,    66,    67,    -1,
+-      -1,    -1,    20,    21,     3,    74,     5,     6,     7,     8,
+-       9,    10,    11,    -1,    -1,    -1,    34,    -1,    -1,    -1,
+-      -1,    20,    21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+-      -1,    49,    -1,    -1,    52,    34,    -1,    -1,    56,    57,
+-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,
+-      49,    -1,    -1,    52,    -1,     3,    74,    56,     6,     7,
+-       8,     9,    10,    11,    -1,    -1,    -1,    66,    67,    -1,
+-      -1,    -1,    20,    21,     3,    74,    -1,     6,     7,     8,
+-       9,    10,    11,    -1,    -1,    -1,    34,    -1,    -1,    -1,
+-      -1,    20,    21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+-      -1,    49,    -1,     4,    52,    34,    -1,    -1,    56,    10,
+-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,
+-      49,    -1,    -1,    52,    -1,    -1,    74,    56,    -1,    -1,
+-      31,    32,    33,    34,    35,    -1,    -1,    -1,    -1,    -1,
+-      -1,    -1,    -1,    44,    45,    74,    47,    -1,    -1,    -1,
+-      51,    -1,    -1,    -1,    55
++     109,    37,     6,    42,    11,    42,   116,   114,    12,   311,
++      63,   112,   113,   114,    63,     3,    10,   122,    10,   112,
++     113,    37,    10,    11,    37,   130,    57,   136,   137,    33,
++      37,     4,     0,   142,    40,     2,    56,    10,    45,     6,
++     149,   150,    63,    63,    57,    12,     4,    47,    15,     8,
++      63,     3,    10,    57,    70,    10,    62,    61,    10,    10,
++      33,    34,    35,    70,    56,    65,    33,    66,    67,    63,
++      37,    63,    31,    65,    47,    42,    34,    35,    66,    67,
++      56,    86,    87,   385,   386,   116,    59,    63,    10,    65,
++      57,    50,    10,    52,    61,     4,    63,    12,   207,   104,
++     105,    10,   211,   116,    20,    21,    59,   216,   217,    62,
++     219,    57,   116,   222,    60,   224,    66,    67,    57,   228,
++     229,    60,    58,    90,    91,    34,    35,    14,    15,    16,
++      17,    62,    63,   242,   239,   188,    13,   246,    57,   188,
++      44,    60,   247,   248,   254,   112,   113,   114,    20,   116,
++      57,    23,    60,    60,    62,    56,   195,   196,   195,   260,
++     261,    14,    15,    16,    17,   204,   202,   268,   275,   278,
++     271,   280,    10,   282,   275,   188,    58,   184,   271,    66,
++      67,    56,    69,    70,    62,    71,    72,    73,    71,    72,
++      73,    56,    63,    63,    65,     4,    25,    26,   202,    90,
++      91,    10,   311,    58,    64,     3,    65,     5,     6,     7,
++       8,     9,    10,    11,    56,   324,    69,    70,   327,    56,
++     329,   188,    20,    21,    33,    34,    35,    10,   195,   196,
++     209,   210,   337,    56,    56,   202,    34,   204,   347,    56,
++     349,    56,    62,    41,     4,   350,    62,    40,    43,    56,
++      10,    49,    56,    58,    52,   364,   366,    60,    56,   298,
++     299,   298,   299,    62,    56,    18,    18,    58,    66,    67,
++     306,    19,    19,    33,    34,    35,    74,    56,    60,   388,
++      65,   390,     4,   287,   394,    45,   396,    47,    10,    63,
++      57,    57,    60,   260,   261,    59,   405,     4,   407,    61,
++      57,   268,   306,    10,   271,   410,    62,    23,   275,    31,
++      32,    33,    34,    35,    60,   424,    60,   422,   423,    25,
++     287,   426,    44,    45,    62,    47,    33,    34,    35,    51,
++      62,   298,   299,    55,    60,     1,    63,     3,     4,   306,
++       6,     7,     8,     9,    10,    11,    58,    62,    57,    62,
++      64,    62,    57,    57,    20,    21,    22,    57,    24,    57,
++      62,    27,    28,    29,    30,    60,    60,    57,    34,    35,
++      36,    37,    38,    39,    27,    64,    42,    62,    57,    57,
++      57,    57,    48,    49,    50,    51,    52,    53,     5,    59,
++      56,     4,    58,    59,    68,    56,    62,    10,    57,    64,
++      66,    67,    62,    57,     1,    68,     3,     4,    74,     6,
++       7,     8,     9,    10,    11,    62,    15,    15,    31,    12,
++      33,    34,    35,    20,    21,    22,   287,    24,    37,   188,
++      27,    28,    29,    30,    47,   116,   197,    34,    35,    36,
++      37,    38,    39,   193,   347,    42,   204,   339,   341,   260,
++     324,    48,    49,    50,    51,    52,    53,   405,   268,    56,
++     261,    58,   106,    -1,    -1,    62,     1,    -1,     3,    66,
++      67,     6,     7,     8,     9,    10,    11,    74,    -1,    -1,
++      -1,    -1,    -1,    -1,    -1,    20,    21,    22,    -1,    24,
++      -1,    -1,    27,    28,    29,    30,    -1,    -1,    -1,    34,
++      -1,    36,    37,    38,    39,    -1,    -1,    42,    -1,    -1,
++      -1,    -1,    -1,    48,    49,    50,    -1,    52,    53,    -1,
++      -1,    56,    -1,    58,    -1,    -1,    -1,    62,    -1,    -1,
++       3,    66,    67,     6,     7,     8,     9,    10,    11,    74,
++      -1,    -1,    -1,    -1,    -1,    -1,    -1,    20,    21,    22,
++      -1,    24,    -1,    -1,    27,    28,    29,    30,    -1,    -1,
++      -1,    34,    -1,    36,    37,    38,    39,    -1,    -1,    42,
++      -1,    -1,    -1,    -1,    -1,    48,    49,    50,    -1,    52,
++      53,    -1,    -1,    56,    -1,    58,    59,    -1,    -1,    62,
++      -1,    -1,     3,    66,    67,     6,     7,     8,     9,    10,
++      11,    74,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    20,
++      21,    22,    -1,    24,    -1,    -1,    27,    28,    29,    30,
++      -1,    -1,    -1,    34,    -1,    36,    37,    38,    39,    -1,
++      -1,    42,    -1,    -1,    -1,    -1,    -1,    48,    49,    50,
++      -1,    52,    53,    -1,    -1,    56,    -1,    58,    59,    -1,
++      -1,    62,    -1,    -1,     3,    66,    67,     6,     7,     8,
++       9,    10,    11,    74,    -1,    -1,    -1,    -1,    -1,    -1,
++      -1,    20,    21,    22,    -1,    24,    -1,    -1,    27,    28,
++      29,    30,    -1,    -1,    -1,    34,    -1,    36,    37,    38,
++      39,    -1,    -1,    42,    -1,    -1,    -1,    -1,    -1,    48,
++      49,    50,    -1,    52,    53,    -1,    -1,    56,    -1,    58,
++      59,    -1,    -1,    62,    -1,    -1,     3,    66,    67,     6,
++       7,     8,     9,    10,    11,    74,    -1,    -1,    -1,    -1,
++      -1,    -1,    -1,    20,    21,    22,    -1,    24,    -1,    -1,
++      27,    28,    29,    30,    -1,    -1,    -1,    34,    -1,    36,
++      37,    38,    39,    -1,    -1,    42,    -1,    -1,    -1,    -1,
++      -1,    48,    49,    50,    -1,    52,    53,    -1,    -1,    56,
++      -1,    58,    59,    -1,    -1,    62,    -1,    -1,     3,    66,
++      67,     6,     7,     8,     9,    10,    11,    74,    -1,    -1,
++      -1,    -1,    -1,    -1,    -1,    20,    21,    22,    -1,    24,
++      -1,    -1,    27,    28,    29,    30,    -1,    -1,    -1,    34,
++      -1,    36,    37,    38,    39,    -1,     4,    42,    -1,    -1,
++      -1,    -1,    10,    48,    49,    50,    -1,    52,    53,    -1,
++      -1,    56,    -1,    58,    -1,    -1,    -1,    62,    -1,    -1,
++      -1,    66,    67,    31,    -1,    33,    34,    35,     3,    74,
++       5,     6,     7,     8,     9,    10,    11,     4,    46,    47,
++      -1,    -1,    -1,    10,    -1,    20,    21,     3,    -1,     5,
++       6,     7,     8,     9,    10,    11,    -1,    -1,    -1,    34,
++      -1,    -1,    -1,    -1,    20,    21,    33,    34,    35,    -1,
++      -1,    -1,    -1,    -1,    49,    -1,    -1,    52,    34,    -1,
++      47,    56,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
++      -1,    66,    67,    49,    -1,    -1,    52,    -1,     3,    74,
++      56,     6,     7,     8,     9,    10,    11,    -1,    -1,    -1,
++      66,    67,    -1,    -1,    -1,    20,    21,     3,    74,    -1,
++       6,     7,     8,     9,    10,    11,    -1,    -1,    -1,    34,
++      -1,    -1,    -1,    -1,    20,    21,    -1,    -1,    -1,    -1,
++      -1,    -1,    -1,    -1,    49,    -1,    -1,    52,    34,    -1,
++      -1,    56,    57,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
++      -1,    66,    67,    49,    -1,    -1,    52,    -1,     3,    74,
++      56,     6,     7,     8,     9,    10,    11,    -1,    -1,    -1,
++      66,    67,    -1,    -1,    -1,    20,    21,    -1,    74,    -1,
++      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    34,
++      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
++      -1,    -1,    -1,    -1,    49,    -1,    -1,    52,    -1,    -1,
++      -1,    56,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
++      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    74
+ };
+-/* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
+-#line 3 "/usr/share/bison/bison.simple"
+-
+-/* Skeleton output parser for bison,
+-
+-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software
+-   Foundation, Inc.
+-
+-   This program is free software; you can redistribute it and/or modify
+-   it under the terms of the GNU General Public License as published by
+-   the Free Software Foundation; either version 2, or (at your option)
+-   any later version.
+-
+-   This program is distributed in the hope that it will be useful,
+-   but WITHOUT ANY WARRANTY; without even the implied warranty of
+-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-   GNU General Public License for more details.
+-
+-   You should have received a copy of the GNU General Public License
+-   along with this program; if not, write to the Free Software
+-   Foundation, Inc., 59 Temple Place - Suite 330,
+-   Boston, MA 02111-1307, USA.  */
+-
+-/* As a special exception, when this file is copied by Bison into a
+-   Bison output file, you may use that output file without restriction.
+-   This special exception was added by the Free Software Foundation
+-   in version 1.24 of Bison.  */
+-
+-/* This is the parser code that is written into each bison parser when
+-   the %semantic_parser declaration is not specified in the grammar.
+-   It was written by Richard Stallman by simplifying the hairy parser
+-   used when %semantic_parser is specified.  */
+-
+-/* All symbols defined below should begin with yy or YY, to avoid
+-   infringing on user name space.  This should be done even for local
+-   variables, as they might otherwise be expanded by user macros.
+-   There are some unavoidable exceptions within include files to
+-   define necessary library symbols; they are noted "INFRINGES ON
+-   USER NAME SPACE" below.  */
+-
+-#if ! defined (yyoverflow) || defined (YYERROR_VERBOSE)
+-
+-/* The parser invokes alloca or malloc; define the necessary symbols.  */
+-
+-# if YYSTACK_USE_ALLOCA
+-#  define YYSTACK_ALLOC alloca
+-# else
+-#  ifndef YYSTACK_USE_ALLOCA
+-#   if defined (alloca) || defined (_ALLOCA_H)
+-#    define YYSTACK_ALLOC alloca
+-#   else
+-#    ifdef __GNUC__
+-#     define YYSTACK_ALLOC __builtin_alloca
+-#    endif
+-#   endif
+-#  endif
+-# endif
+-# ifdef YYSTACK_ALLOC
+-   /* Pacify GCC's `empty if-body' warning. */
+-#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
+-# else
+-#  if defined (__STDC__) || defined (__cplusplus)
+-#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+-#   define YYSIZE_T size_t
+-#  endif
+-#  define YYSTACK_ALLOC malloc
+-#  define YYSTACK_FREE free
+-# endif
+-#endif /* ! defined (yyoverflow) || defined (YYERROR_VERBOSE) */
+-
+-
+-#if (! defined (yyoverflow) \
+-     && (! defined (__cplusplus) \
+-       || (YYLTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+-
+-/* A type that is properly aligned for any stack member.  */
+-union yyalloc
+-{
+-  short yyss;
+-  YYSTYPE yyvs;
+-# if YYLSP_NEEDED
+-  YYLTYPE yyls;
+-# endif
++/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
++   symbol of state STATE-NUM.  */
++static const unsigned char yystos[] =
++{
++       0,    76,    77,     0,     4,    10,    31,    32,    33,    34,
++      35,    45,    47,    51,    55,    78,    79,    80,    81,    82,
++      83,    84,    86,    87,    88,    89,    90,    91,    97,    98,
++     108,   109,   115,   116,   117,   121,   122,   123,   124,   125,
++     126,   217,    63,    10,    34,   109,    10,    91,    10,   218,
++      33,    88,   109,    12,    79,    82,    13,    58,    85,    44,
++      85,    56,    92,    58,    10,    91,   110,   111,   112,   218,
++     109,    10,    87,    98,   104,   108,   112,   218,     3,   119,
++     120,   217,   218,    92,     1,     6,     7,     8,     9,    11,
++      20,    21,    22,    24,    27,    28,    29,    30,    34,    36,
++      37,    38,    39,    42,    48,    49,    50,    52,    53,    56,
++      59,    62,    66,    67,    74,    85,   106,   107,   108,   109,
++     120,   121,   127,   130,   131,   132,   134,   135,   136,   138,
++     139,   142,   151,   152,   153,   155,   159,   160,   164,   165,
++     166,   167,   168,   169,   172,   173,   175,   176,   177,   178,
++     179,   180,   181,   182,   183,   184,   185,   187,   188,   190,
++     191,   193,   194,   195,   196,   197,   201,   202,   205,   206,
++     207,   209,   210,   212,   213,   214,   216,   217,    56,     4,
++      33,    93,    94,    95,    96,   109,    86,    99,   100,   101,
++     108,   117,    92,    60,    62,    63,    65,   113,   114,   112,
++     218,    62,    58,    64,    65,    59,    62,    56,   133,   133,
++     133,    56,   208,   195,   217,   195,    56,    56,    56,    56,
++      62,    62,    40,   170,    43,   133,   133,   208,    56,    56,
++      34,   176,   217,   190,   213,   217,   190,   193,   107,   127,
++      59,   130,    60,   130,   140,    58,    56,   154,   156,   161,
++     176,   128,   129,   176,    58,   174,   176,    62,   176,   176,
++      18,    19,    14,    15,    16,    17,    69,    70,   186,    66,
++      67,   189,    71,    72,    73,   192,    20,    21,    56,   198,
++      60,    65,    63,   215,    65,    57,    57,    60,   218,    61,
++      59,    46,   101,   102,   103,   111,   119,    11,    66,    67,
++     118,   119,   114,    62,    62,    87,   105,   118,     5,   176,
++     204,    60,   203,   203,   203,     5,   176,   176,   176,   176,
++       5,    41,   171,   176,    40,    62,   176,    60,    57,    60,
++     176,   176,    57,    59,   137,   176,    23,   141,    25,   143,
++     144,   145,   146,   176,   130,   130,    62,   162,    62,    60,
++     127,    62,   182,   184,   187,   190,   193,    57,   176,   199,
++     200,   176,   211,   176,    63,    95,    58,    64,   119,   119,
++      62,    59,    87,    62,   176,   204,    57,    57,    57,    57,
++      57,   171,    62,   176,   176,    60,    60,    57,    60,   130,
++     147,    26,   144,   149,   150,   146,   148,    57,    27,   157,
++     129,   163,   176,    59,    57,    60,    57,    60,    64,   176,
++     127,    62,    57,    57,    57,    57,   204,   204,   176,   176,
++      68,    59,   127,   127,    56,   158,    57,   200,   176,    64,
++      59,    62,    68,   176,    62,   130,    57
+ };
+-/* The size of the maximum gap between one aligned stack and the next.  */
+-# define YYSTACK_GAP_MAX (sizeof (union yyalloc) - 1)
+-
+-/* The size of an array large to enough to hold all stacks, each with
+-   N elements.  */
+-# if YYLSP_NEEDED
+-#  define YYSTACK_BYTES(N) \
+-     ((N) * (sizeof (short) + sizeof (YYSTYPE) + sizeof (YYLTYPE))    \
+-      + 2 * YYSTACK_GAP_MAX)
+-# else
+-#  define YYSTACK_BYTES(N) \
+-     ((N) * (sizeof (short) + sizeof (YYSTYPE))                               \
+-      + YYSTACK_GAP_MAX)
+-# endif
+-
+-/* Copy COUNT objects from FROM to TO.  The source and destination do
+-   not overlap.  */
+-# ifndef YYCOPY
+-#  if 1 < __GNUC__
+-#   define YYCOPY(To, From, Count) \
+-      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+-#  else
+-#   define YYCOPY(To, From, Count)            \
+-      do                                      \
+-      {                                       \
+-        register YYSIZE_T yyi;                \
+-        for (yyi = 0; yyi < (Count); yyi++)   \
+-          (To)[yyi] = (From)[yyi];            \
+-      }                                       \
+-      while (0)
+-#  endif
+-# endif
+-
+-/* Relocate STACK from its old location to the new one.  The
+-   local variables YYSIZE and YYSTACKSIZE give the old and new number of
+-   elements in the stack, and YYPTR gives the new location of the
+-   stack.  Advance YYPTR to a properly aligned location for the next
+-   stack.  */
+-# define YYSTACK_RELOCATE(Stack)                                      \
+-    do                                                                        \
+-      {                                                                       \
+-      YYSIZE_T yynewbytes;                                            \
+-      YYCOPY (&yyptr->Stack, Stack, yysize);                          \
+-      Stack = &yyptr->Stack;                                          \
+-      yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAX;   \
+-      yyptr += yynewbytes / sizeof (*yyptr);                          \
+-      }                                                                       \
+-    while (0)
+-
+-#endif
+-
+-
+ #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
+ # define YYSIZE_T __SIZE_TYPE__
+ #endif
+@@ -1129,29 +1296,34 @@
+ #define yyerrok               (yyerrstatus = 0)
+ #define yyclearin     (yychar = YYEMPTY)
+-#define YYEMPTY               -2
++#define YYEMPTY               (-2)
+ #define YYEOF         0
++
+ #define YYACCEPT      goto yyacceptlab
+-#define YYABORT       goto yyabortlab
++#define YYABORT               goto yyabortlab
+ #define YYERROR               goto yyerrlab1
++
+ /* Like YYERROR except do call yyerror.  This remains here temporarily
+    to ease the transition to the new meaning of YYERROR, for GCC.
+    Once GCC version 2 has supplanted version 1, this can go.  */
++
+ #define YYFAIL                goto yyerrlab
++
+ #define YYRECOVERING()  (!!yyerrstatus)
++
+ #define YYBACKUP(Token, Value)                                        \
+ do                                                            \
+   if (yychar == YYEMPTY && yylen == 1)                                \
+     {                                                         \
+       yychar = (Token);                                               \
+       yylval = (Value);                                               \
+-      yychar1 = YYTRANSLATE (yychar);                         \
++      yytoken = YYTRANSLATE (yychar);                         \
+       YYPOPSTACK;                                             \
+       goto yybackup;                                          \
+     }                                                         \
+   else                                                                \
+     {                                                                 \
+-      yyerror ("syntax error: cannot back up");                       \
++      yyerror ("syntax error: cannot back up");\
+       YYERROR;                                                        \
+     }                                                         \
+ while (0)
+@@ -1159,41 +1331,24 @@
+ #define YYTERROR      1
+ #define YYERRCODE     256
+-
+ /* YYLLOC_DEFAULT -- Compute the default location (before the actions
+-   are run).
+-
+-   When YYLLOC_DEFAULT is run, CURRENT is set the location of the
+-   first token.  By default, to implement support for ranges, extend
+-   its range to the last symbol.  */
++   are run).  */
+ #ifndef YYLLOC_DEFAULT
+-# define YYLLOC_DEFAULT(Current, Rhs, N)              \
+-   Current.last_line   = Rhs[N].last_line;    \
+-   Current.last_column = Rhs[N].last_column;
++# define YYLLOC_DEFAULT(Current, Rhs, N)         \
++  Current.first_line   = Rhs[1].first_line;      \
++  Current.first_column = Rhs[1].first_column;    \
++  Current.last_line    = Rhs[N].last_line;       \
++  Current.last_column  = Rhs[N].last_column;
+ #endif
+-
+ /* YYLEX -- calling `yylex' with the right arguments.  */
+-#if YYPURE
+-# if YYLSP_NEEDED
+-#  ifdef YYLEX_PARAM
+-#   define YYLEX              yylex (&yylval, &yylloc, YYLEX_PARAM)
+-#  else
+-#   define YYLEX              yylex (&yylval, &yylloc)
+-#  endif
+-# else /* !YYLSP_NEEDED */
+-#  ifdef YYLEX_PARAM
+-#   define YYLEX              yylex (&yylval, YYLEX_PARAM)
+-#  else
+-#   define YYLEX              yylex (&yylval)
+-#  endif
+-# endif /* !YYLSP_NEEDED */
+-#else /* !YYPURE */
+-# define YYLEX                        yylex ()
+-#endif /* !YYPURE */
+-
++#ifdef YYLEX_PARAM
++# define YYLEX yylex (YYLEX_PARAM)
++#else
++# define YYLEX yylex ()
++#endif
+ /* Enable debugging if requested.  */
+ #if YYDEBUG
+@@ -1208,13 +1363,93 @@
+   if (yydebug)                                        \
+     YYFPRINTF Args;                           \
+ } while (0)
++
++# define YYDSYMPRINT(Args)                    \
++do {                                          \
++  if (yydebug)                                        \
++    yysymprint Args;                          \
++} while (0)
++
++# define YYDSYMPRINTF(Title, Token, Value, Location)          \
++do {                                                          \
++  if (yydebug)                                                        \
++    {                                                         \
++      YYFPRINTF (stderr, "%s ", Title);                               \
++      yysymprint (stderr,                                     \
++                  Token, Value);      \
++      YYFPRINTF (stderr, "\n");                                       \
++    }                                                         \
++} while (0)
++
++/*------------------------------------------------------------------.
++| yy_stack_print -- Print the state stack from its BOTTOM up to its |
++| TOP (cinluded).                                                   |
++`------------------------------------------------------------------*/
++
++#if defined (__STDC__) || defined (__cplusplus)
++static void
++yy_stack_print (short *bottom, short *top)
++#else
++static void
++yy_stack_print (bottom, top)
++    short *bottom;
++    short *top;
++#endif
++{
++  YYFPRINTF (stderr, "Stack now");
++  for (/* Nothing. */; bottom <= top; ++bottom)
++    YYFPRINTF (stderr, " %d", *bottom);
++  YYFPRINTF (stderr, "\n");
++}
++
++# define YY_STACK_PRINT(Bottom, Top)                          \
++do {                                                          \
++  if (yydebug)                                                        \
++    yy_stack_print ((Bottom), (Top));                         \
++} while (0)
++
++
++/*------------------------------------------------.
++| Report that the YYRULE is going to be reduced.  |
++`------------------------------------------------*/
++
++#if defined (__STDC__) || defined (__cplusplus)
++static void
++yy_reduce_print (int yyrule)
++#else
++static void
++yy_reduce_print (yyrule)
++    int yyrule;
++#endif
++{
++  int yyi;
++  unsigned int yylineno = yyrline[yyrule];
++  YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ",
++             yyrule - 1, yylineno);
++  /* Print the symbols being reduced, and their result.  */
++  for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
++    YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]);
++  YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]);
++}
++
++# define YY_REDUCE_PRINT(Rule)                \
++do {                                  \
++  if (yydebug)                                \
++    yy_reduce_print (Rule);           \
++} while (0)
++
+ /* Nonzero means print parse trace.  It is left uninitialized so that
+    multiple parsers can coexist.  */
+ int yydebug;
+ #else /* !YYDEBUG */
+ # define YYDPRINTF(Args)
++# define YYDSYMPRINT(Args)
++# define YYDSYMPRINTF(Title, Token, Value, Location)
++# define YY_STACK_PRINT(Bottom, Top)
++# define YY_REDUCE_PRINT(Rule)
+ #endif /* !YYDEBUG */
++
+ /* YYINITDEPTH -- initial size of the parser's stacks.  */
+ #ifndef       YYINITDEPTH
+ # define YYINITDEPTH 200
+@@ -1234,8 +1469,10 @@
+ #ifndef YYMAXDEPTH
+ # define YYMAXDEPTH 10000
+ #endif
++
\f
+-#ifdef YYERROR_VERBOSE
++
++#if YYERROR_VERBOSE
+ # ifndef yystrlen
+ #  if defined (__GLIBC__) && defined (_STRING_H)
+@@ -1285,86 +1522,134 @@
+ }
+ #  endif
+ # endif
+-#endif
++
++#endif /* !YYERROR_VERBOSE */
++
\f
+-#line 315 "/usr/share/bison/bison.simple"
++#if YYDEBUG
++/*--------------------------------.
++| Print this symbol on YYOUTPUT.  |
++`--------------------------------*/
++
++#if defined (__STDC__) || defined (__cplusplus)
++static void
++yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)
++#else
++static void
++yysymprint (yyoutput, yytype, yyvaluep)
++    FILE *yyoutput;
++    int yytype;
++    YYSTYPE *yyvaluep;
++#endif
++{
++  /* Pacify ``unused variable'' warnings.  */
++  (void) yyvaluep;
+-/* The user can define YYPARSE_PARAM as the name of an argument to be passed
+-   into yyparse.  The argument should have type void *.
+-   It should actually point to an object.
+-   Grammar actions can access the variable by casting it
+-   to the proper pointer type.  */
++  if (yytype < YYNTOKENS)
++    {
++      YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
++# ifdef YYPRINT
++      YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
++# endif
++    }
++  else
++    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
++
++  switch (yytype)
++    {
++      default:
++        break;
++    }
++  YYFPRINTF (yyoutput, ")");
++}
++
++#endif /* ! YYDEBUG */
++/*-----------------------------------------------.
++| Release the memory associated to this symbol.  |
++`-----------------------------------------------*/
++
++#if defined (__STDC__) || defined (__cplusplus)
++static void
++yydestruct (int yytype, YYSTYPE *yyvaluep)
++#else
++static void
++yydestruct (yytype, yyvaluep)
++    int yytype;
++    YYSTYPE *yyvaluep;
++#endif
++{
++  /* Pacify ``unused variable'' warnings.  */
++  (void) yyvaluep;
++
++  switch (yytype)
++    {
++
++      default:
++        break;
++    }
++}
++\f
++
++/* Prevent warnings from -Wmissing-prototypes.  */
+ #ifdef YYPARSE_PARAM
+ # if defined (__STDC__) || defined (__cplusplus)
+-#  define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
+-#  define YYPARSE_PARAM_DECL
++int yyparse (void *YYPARSE_PARAM);
+ # else
+-#  define YYPARSE_PARAM_ARG YYPARSE_PARAM
+-#  define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
+-# endif
+-#else /* !YYPARSE_PARAM */
+-# define YYPARSE_PARAM_ARG
+-# define YYPARSE_PARAM_DECL
+-#endif /* !YYPARSE_PARAM */
+-
+-/* Prevent warning if -Wstrict-prototypes.  */
+-#ifdef __GNUC__
+-# ifdef YYPARSE_PARAM
+-int yyparse (void *);
+-# else
+-int yyparse (void);
++int yyparse ();
+ # endif
++#else /* ! YYPARSE_PARAM */
++#if defined (__STDC__) || defined (__cplusplus)
++int yyparse (void);
++#else
++int yyparse ();
+ #endif
++#endif /* ! YYPARSE_PARAM */
+-/* YY_DECL_VARIABLES -- depending whether we use a pure parser,
+-   variables are global, or local to YYPARSE.  */
+-#define YY_DECL_NON_LSP_VARIABLES                     \
+-/* The lookahead symbol.  */                          \
+-int yychar;                                           \
+-                                                      \
+-/* The semantic value of the lookahead symbol. */     \
+-YYSTYPE yylval;                                               \
+-                                                      \
+-/* Number of parse errors so far.  */                 \
+-int yynerrs;
+-#if YYLSP_NEEDED
+-# define YY_DECL_VARIABLES                    \
+-YY_DECL_NON_LSP_VARIABLES                     \
+-                                              \
+-/* Location data for the lookahead symbol.  */        \
+-YYLTYPE yylloc;
+-#else
+-# define YY_DECL_VARIABLES                    \
+-YY_DECL_NON_LSP_VARIABLES
+-#endif
++/* The lookahead symbol.  */
++int yychar;
++
++/* The semantic value of the lookahead symbol.  */
++YYSTYPE yylval;
++
++/* Number of syntax errors so far.  */
++int yynerrs;
+-/* If nonreentrant, generate the variables here. */
+-#if !YYPURE
+-YY_DECL_VARIABLES
+-#endif  /* !YYPURE */
++/*----------.
++| yyparse.  |
++`----------*/
++#ifdef YYPARSE_PARAM
++# if defined (__STDC__) || defined (__cplusplus)
++int yyparse (void *YYPARSE_PARAM)
++# else
++int yyparse (YYPARSE_PARAM)
++  void *YYPARSE_PARAM;
++# endif
++#else /* ! YYPARSE_PARAM */
++#if defined (__STDC__) || defined (__cplusplus)
+ int
+-yyparse (YYPARSE_PARAM_ARG)
+-     YYPARSE_PARAM_DECL
+-{
+-  /* If reentrant, generate the variables here. */
+-#if YYPURE
+-  YY_DECL_VARIABLES
+-#endif  /* !YYPURE */
++yyparse (void)
++#else
++int
++yyparse ()
++#endif
++#endif
++{
++  
+   register int yystate;
+   register int yyn;
+   int yyresult;
+   /* Number of tokens to shift before error messages enabled.  */
+   int yyerrstatus;
+   /* Lookahead token as an internal (translated) token number.  */
+-  int yychar1 = 0;
++  int yytoken = 0;
+   /* Three stacks and their tools:
+      `yyss': related to states,
+@@ -1374,7 +1659,7 @@
+      Refer to the stacks thru separate pointers, to allow yyoverflow
+      to reallocate them elsewhere.  */
+-  /* The state stack. */
++  /* The state stack.  */
+   short       yyssa[YYINITDEPTH];
+   short *yyss = yyssa;
+   register short *yyssp;
+@@ -1384,31 +1669,19 @@
+   YYSTYPE *yyvs = yyvsa;
+   register YYSTYPE *yyvsp;
+-#if YYLSP_NEEDED
+-  /* The location stack.  */
+-  YYLTYPE yylsa[YYINITDEPTH];
+-  YYLTYPE *yyls = yylsa;
+-  YYLTYPE *yylsp;
+-#endif
+-#if YYLSP_NEEDED
+-# define YYPOPSTACK   (yyvsp--, yyssp--, yylsp--)
+-#else
+-# define YYPOPSTACK   (yyvsp--, yyssp--)
+-#endif
+-  YYSIZE_T yystacksize = YYINITDEPTH;
++#define YYPOPSTACK   (yyvsp--, yyssp--)
++  YYSIZE_T yystacksize = YYINITDEPTH;
+   /* The variables used to return semantic value and location from the
+      action routines.  */
+   YYSTYPE yyval;
+-#if YYLSP_NEEDED
+-  YYLTYPE yyloc;
+-#endif
++
+   /* When reducing, the number of symbols on the RHS of the reduced
+-     rule. */
++     rule.  */
+   int yylen;
+   YYDPRINTF ((stderr, "Starting parse\n"));
+@@ -1425,9 +1698,7 @@
+   yyssp = yyss;
+   yyvsp = yyvs;
+-#if YYLSP_NEEDED
+-  yylsp = yyls;
+-#endif
++
+   goto yysetstate;
+ /*------------------------------------------------------------.
+@@ -1442,7 +1713,7 @@
+  yysetstate:
+   *yyssp = yystate;
+-  if (yyssp >= yyss + yystacksize - 1)
++  if (yyss + yystacksize - 1 <= yyssp)
+     {
+       /* Get the current used size of the three stacks, in elements.  */
+       YYSIZE_T yysize = yyssp - yyss + 1;
+@@ -1455,24 +1726,17 @@
+       YYSTYPE *yyvs1 = yyvs;
+       short *yyss1 = yyss;
++
+       /* Each stack pointer address is followed by the size of the
+-         data in use in that stack, in bytes.  */
+-# if YYLSP_NEEDED
+-      YYLTYPE *yyls1 = yyls;
+-      /* This used to be a conditional around just the two extra args,
+-         but that might be undefined if yyoverflow is a macro.  */
+-      yyoverflow ("parser stack overflow",
+-                  &yyss1, yysize * sizeof (*yyssp),
+-                  &yyvs1, yysize * sizeof (*yyvsp),
+-                  &yyls1, yysize * sizeof (*yylsp),
+-                  &yystacksize);
+-      yyls = yyls1;
+-# else
++         data in use in that stack, in bytes.  This used to be a
++         conditional around just the two extra args, but that might
++         be undefined if yyoverflow is a macro.  */
+       yyoverflow ("parser stack overflow",
+                   &yyss1, yysize * sizeof (*yyssp),
+                   &yyvs1, yysize * sizeof (*yyvsp),
++
+                   &yystacksize);
+-# endif
++
+       yyss = yyss1;
+       yyvs = yyvs1;
+       }
+@@ -1481,10 +1745,10 @@
+       goto yyoverflowlab;
+ # else
+       /* Extend the stack our own way.  */
+-      if (yystacksize >= YYMAXDEPTH)
++      if (YYMAXDEPTH <= yystacksize)
+       goto yyoverflowlab;
+       yystacksize *= 2;
+-      if (yystacksize > YYMAXDEPTH)
++      if (YYMAXDEPTH < yystacksize)
+       yystacksize = YYMAXDEPTH;
+       {
+@@ -1495,10 +1759,8 @@
+         goto yyoverflowlab;
+       YYSTACK_RELOCATE (yyss);
+       YYSTACK_RELOCATE (yyvs);
+-# if YYLSP_NEEDED
+-      YYSTACK_RELOCATE (yyls);
+-# endif
+-# undef YYSTACK_RELOCATE
++
++#  undef YYSTACK_RELOCATE
+       if (yyss1 != yyssa)
+         YYSTACK_FREE (yyss1);
+       }
+@@ -1507,14 +1769,12 @@
+       yyssp = yyss + yysize - 1;
+       yyvsp = yyvs + yysize - 1;
+-#if YYLSP_NEEDED
+-      yylsp = yyls + yysize - 1;
+-#endif
++
+       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+                 (unsigned long int) yystacksize));
+-      if (yyssp >= yyss + yystacksize - 1)
++      if (yyss + yystacksize - 1 <= yyssp)
+       YYABORT;
+     }
+@@ -1522,7 +1782,6 @@
+   goto yybackup;
+-
+ /*-----------.
+ | yybackup.  |
+ `-----------*/
+@@ -1535,88 +1794,55 @@
+   /* First try to decide what to do without reference to lookahead token.  */
+   yyn = yypact[yystate];
+-  if (yyn == YYFLAG)
++  if (yyn == YYPACT_NINF)
+     goto yydefault;
+   /* Not known => get a lookahead token if don't already have one.  */
+-  /* yychar is either YYEMPTY or YYEOF
+-     or a valid token in external form.  */
+-
++  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
+   if (yychar == YYEMPTY)
+     {
+       YYDPRINTF ((stderr, "Reading a token: "));
+       yychar = YYLEX;
+     }
+-  /* Convert token to internal form (in yychar1) for indexing tables with */
+-
+-  if (yychar <= 0)            /* This means end of input. */
++  if (yychar <= YYEOF)
+     {
+-      yychar1 = 0;
+-      yychar = YYEOF;         /* Don't call YYLEX any more */
+-
++      yychar = yytoken = YYEOF;
+       YYDPRINTF ((stderr, "Now at end of input.\n"));
+     }
+   else
+     {
+-      yychar1 = YYTRANSLATE (yychar);
+-
+-#if YYDEBUG
+-     /* We have to keep this `#if YYDEBUG', since we use variables
+-      which are defined only if `YYDEBUG' is set.  */
+-      if (yydebug)
+-      {
+-        YYFPRINTF (stderr, "Next token is %d (%s",
+-                   yychar, yytname[yychar1]);
+-        /* Give the individual parser a way to print the precise
+-           meaning of a token, for further debugging info.  */
+-# ifdef YYPRINT
+-        YYPRINT (stderr, yychar, yylval);
+-# endif
+-        YYFPRINTF (stderr, ")\n");
+-      }
+-#endif
++      yytoken = YYTRANSLATE (yychar);
++      YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc);
+     }
+-  yyn += yychar1;
+-  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
++  /* If the proper action on seeing token YYTOKEN is to reduce or to
++     detect an error, take that action.  */
++  yyn += yytoken;
++  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
+     goto yydefault;
+-
+   yyn = yytable[yyn];
+-
+-  /* yyn is what to do for this token type in this state.
+-     Negative => reduce, -yyn is rule number.
+-     Positive => shift, yyn is new state.
+-       New state is final state => don't bother to shift,
+-       just return success.
+-     0, or most negative number => error.  */
+-
+-  if (yyn < 0)
++  if (yyn <= 0)
+     {
+-      if (yyn == YYFLAG)
++      if (yyn == 0 || yyn == YYTABLE_NINF)
+       goto yyerrlab;
+       yyn = -yyn;
+       goto yyreduce;
+     }
+-  else if (yyn == 0)
+-    goto yyerrlab;
+   if (yyn == YYFINAL)
+     YYACCEPT;
+   /* Shift the lookahead token.  */
+-  YYDPRINTF ((stderr, "Shifting token %d (%s), ",
+-            yychar, yytname[yychar1]));
++  YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken]));
+   /* Discard the token being shifted unless it is eof.  */
+   if (yychar != YYEOF)
+     yychar = YYEMPTY;
+   *++yyvsp = yylval;
+-#if YYLSP_NEEDED
+-  *++yylsp = yylloc;
+-#endif
++
+   /* Count tokens shifted since error; after three, turn off error
+      status.  */
+@@ -1647,60 +1873,40 @@
+   /* If YYLEN is nonzero, implement the default value of the action:
+      `$$ = $1'.
+-     Otherwise, the following line sets YYVAL to the semantic value of
+-     the lookahead token.  This behavior is undocumented and Bison
++     Otherwise, the following line sets YYVAL to garbage.
++     This behavior is undocumented and Bison
+      users should not rely upon it.  Assigning to YYVAL
+      unconditionally makes the parser a bit smaller, and it avoids a
+      GCC warning that YYVAL may be used uninitialized.  */
+   yyval = yyvsp[1-yylen];
+-#if YYLSP_NEEDED
+-  /* Similarly for the default location.  Let the user run additional
+-     commands if for instance locations are ranges.  */
+-  yyloc = yylsp[1-yylen];
+-  YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen);
+-#endif
+-
+-#if YYDEBUG
+-  /* We have to keep this `#if YYDEBUG', since we use variables which
+-     are defined only if `YYDEBUG' is set.  */
+-  if (yydebug)
+-    {
+-      int yyi;
+-
+-      YYFPRINTF (stderr, "Reducing via rule %d (line %d), ",
+-               yyn, yyrline[yyn]);
+-
+-      /* Print the symbols being reduced, and their result.  */
+-      for (yyi = yyprhs[yyn]; yyrhs[yyi] > 0; yyi++)
+-      YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
+-      YYFPRINTF (stderr, " -> %s\n", yytname[yyr1[yyn]]);
+-    }
+-#endif
+-
+-  switch (yyn) {
+-case 1:
++  YY_REDUCE_PRINT (yyn);
++  switch (yyn)
++    {
++        case 2:
+ #line 261 "bac.y"
+-{ 
++    { 
+             if (!making_objfile&&!main_declared) 
+                yyerror("No 'main' function declared");
+             if (main_declared)
+                emit(SHORTRET);
+          }
+     break;
+-case 2:
++
++  case 3:
+ #line 268 "bac.y"
+-{ 
++    { 
+             if (!making_objfile&&!main_declared) 
+                yyerror("No 'main' function declared");
+             if (main_declared)
+                emit(SHORTRET);
+          }
+     break;
+-case 3:
++
++  case 4:
+ #line 277 "bac.y"
+-{ 
++    { 
+             level = 0;
+             extern_decl = 0;
+             enter(outerblock_name,outerblock,level,level);
+@@ -1714,9 +1920,10 @@
+             display[last_btab] = level;
+          }
+     break;
+-case 13:
++
++  case 14:
+ #line 306 "bac.y"
+-{
++    {
+             if (strcmp(laststring,infile[curr_infile].fname) == 0) 
+                yyerror("Recursive file inclusion");
+             else {
+@@ -1725,13 +1932,15 @@
+             in_include = 0;
+          }
+     break;
+-case 14:
++
++  case 15:
+ #line 317 "bac.y"
+-{ in_include = 1; }
++    { in_include = 1; }
+     break;
+-case 15:
++
++  case 16:
+ #line 321 "bac.y"
+-{  int i;
++    {  int i;
+             tab[ob_tix].adr = lc;  /* outerblock entry pt */
+             for (i = 0; i <= mon; i++){
+                /* don't emit CALL_MONINIT for ext_monitor objects */
+@@ -1744,9 +1953,10 @@
+             process_var_inits(level);
+          }
+     break;
+-case 16:
++
++  case 17:
+ #line 334 "bac.y"
+-{ 
++    { 
+             int i;
+             emit(HALT); 
+             btab[tab[yyvsp[-1]].ref].last = last_tab;   /* set last var ref in main */
+@@ -1766,14 +1976,16 @@
+             process_var_inits(level-1);   /* outer block variables, too */
+          }
+     break;
+-case 17:
++
++  case 18:
+ #line 357 "bac.y"
+-{  
++    {  
+             extern_decl = 0;
+             enter("main",mainproc,level,level);
+             prt = last_tab;
+             enter_block(&last_btab,&level,last_tab);
+             btab[last_btab].lastpar = last_tab; /* no parms */
++            if (maxlevel < level) maxlevel = level;
+             main_declared = 1;
+             yyval = prt;
+             btab[0].lastpar = prt;  /* save main's tabix for the interp */
+@@ -1782,16 +1994,19 @@
+             emit(SHORTCALL);  /* will have to backpatch addr later */
+          }
+     break;
+-case 19:
+-#line 374 "bac.y"
+-{ yyval = int_loc; }
++
++  case 20:
++#line 375 "bac.y"
++    { yyval = int_loc; }
+     break;
+-case 24:
+-#line 384 "bac.y"
+-{
++
++  case 25:
++#line 385 "bac.y"
++    {
+             if (main_declared)
+                yyerror("main() proc must be last");
+             if (void_function) {
++               if (curr_ret >= 0) process_returns();
+                if (tab[yyvsp[-1]].mon) emit(EXITMON);
+                emit(EXIT_PROC);
+             }
+@@ -1808,51 +2023,58 @@
+             curr_ret = -1;
+          }
+     break;
+-case 25:
+-#line 406 "bac.y"
+-{ tab[yyvsp[0]].atomic = 0; }
+-    break;
+-case 26:
++
++  case 26:
+ #line 408 "bac.y"
+-{ tab[yyvsp[0]].atomic = 1; yyval = yyvsp[0]; }
++    { tab[yyvsp[0]].atomic = 0; }
+     break;
+-case 27:
+-#line 412 "bac.y"
+-{ 
++
++  case 27:
++#line 410 "bac.y"
++    { tab[yyvsp[0]].atomic = 1; yyval = yyvsp[0]; }
++    break;
++
++  case 28:
++#line 414 "bac.y"
++    { 
+             btab[display[level]].psize = curr_parm_offset;
+             btab[display[level]].vsize = curr_parm_offset + delta_vsize;
+             in_func_decl = 1;
+          }
+     break;
+-case 28:
+-#line 418 "bac.y"
+-{ 
++
++  case 29:
++#line 420 "bac.y"
++    { 
+             btab[display[level]].psize = curr_parm_offset;
+             btab[display[level]].vsize = curr_parm_offset + delta_vsize;
+             in_func_decl = 1;
+          }
+     break;
+-case 29:
+-#line 426 "bac.y"
+-{ 
++
++  case 30:
++#line 428 "bac.y"
++    { 
+             tab[yyvsp[-1]].typ = ints; 
+             cnonfatal("Type of function %s defaults to int",tab[yyvsp[-1]].name);
+             tab[yyvsp[0]].obj = (extern_decl ? ext_function : function );
+             void_function = 0;
+          }
+     break;
+-case 30:
+-#line 435 "bac.y"
+-{
++
++  case 31:
++#line 437 "bac.y"
++    {
+             tab[yyvsp[-1]].typ = notyp;
+             tab[yyvsp[-1]].obj = (extern_decl ? ext_procedure : procedure);
+             yyval = yyvsp[-1];
+             void_function = 1;
+          }
+     break;
+-case 31:
+-#line 442 "bac.y"
+-{
++
++  case 32:
++#line 444 "bac.y"
++    {
+             if ((tab[yyvsp[-2]].typ != ints)&&(tab[yyvsp[-2]].typ != chars)){
+                sprintf(pbuf,"'%s' is not a valid function return type",
+                                  tab[yyvsp[-2]].name); 
+@@ -1866,9 +2088,10 @@
+             void_function = 0;
+          }
+     break;
+-case 32:
+-#line 458 "bac.y"
+-{ int vis_level,real_level;
++
++  case 33:
++#line 460 "bac.y"
++    { int vis_level,real_level;
+             if (in_mon_decl) {
+                real_level = level;
+                vis_level = ((level > 0) ? level -1 : 0); 
+@@ -1877,22 +2100,24 @@
+                vis_level = real_level = level;
+             }
+             yyval = prt = enter(lastident(),function,real_level,vis_level);
+-            func_tab = prt;
+             if (in_mon_decl) tab[prt].mon = mtab[mon] - last_predeclared;
+             enter_block(&last_btab,&level,prt);
++            if (maxlevel < level) maxlevel = level;
+             curr_parm_offset = btab[display[level]].vsize;
+             delta_vsize = curr_parm_offset - btab[display[level]].psize;
+             tab[yyval].adr = (extern_decl ?  -1 : lc);
+             if (in_mon_decl&&!extern_decl) emit1(ENTERMON,tab[prt].mon);
+          }
+     break;
+-case 33:
+-#line 478 "bac.y"
+-{ btab[display[level]].lastpar = last_tab;}
++
++  case 34:
++#line 480 "bac.y"
++    { btab[display[level]].lastpar = last_tab;}
+     break;
+-case 39:
+-#line 491 "bac.y"
+-{
++
++  case 40:
++#line 493 "bac.y"
++    {
+             tab[yyvsp[0]].typ = elem_typ;
+             tab[yyvsp[0]].ref = elem_ref;
+             tab[yyvsp[0]].obj = variable;
+@@ -1905,34 +2130,40 @@
+                curr_parm_offset++;  /* pointers occupy 1 stack word */
+          }
+     break;
+-case 40:
+-#line 506 "bac.y"
+-{ by_value = 1; }
+-    break;
+-case 41:
++
++  case 41:
+ #line 508 "bac.y"
+-{ by_value = 0; }
++    { by_value = 1; }
+     break;
+-case 42:
++
++  case 42:
+ #line 510 "bac.y"
+-{ /* allow strings of indefinite length */
++    { by_value = 0; }
++    break;
++
++  case 43:
++#line 512 "bac.y"
++    { /* allow strings of indefinite length */
+             elem_ref = 0;
+             elem_size = 1;  /* a pointer */
+             elem_typ  = strings;
+-            elem_tix = -1;
++            elem_tix = -1; /* not in symbol table */
+             by_value = 0;  /* pass-by-reference */
++            yyval = -1;       /* not in symbol table */
+          }
+     break;
+-case 43:
+-#line 521 "bac.y"
+-{
++
++  case 44:
++#line 524 "bac.y"
++    {
+             leave_block(&level);
+             in_mon_decl = 0;
+          }
+     break;
+-case 44:
+-#line 528 "bac.y"
+-{
++
++  case 45:
++#line 531 "bac.y"
++    {
+             if (mon == MAXMON) 
+                cfatal("No more than %d monitors can be declared",MAXMON);
+             tab[yyvsp[0]].obj = (extern_decl ? ext_monitor : monitor);
+@@ -1943,11 +2174,13 @@
+                yyerror("Monitors can only be declared at the global level");
+             enter_block(&last_btab,&level,last_tab);
+             btab[last_btab].lastpar = last_tab;  /* no parms */
++            if (maxlevel < level) maxlevel = level;
+          }
+     break;
+-case 51:
+-#line 556 "bac.y"
+-{ 
++
++  case 52:
++#line 560 "bac.y"
++    { 
+             if (tab[mtab[mon]].obj == monitor) {
+                /* don't do the following for ext_monitor objects */
+                tab[mtab[mon]].adr = lc;      /* addr of monitor init code */
+@@ -1957,9 +2190,10 @@
+             }
+          }
+     break;
+-case 52:
+-#line 566 "bac.y"
+-{
++
++  case 53:
++#line 570 "bac.y"
++    {
+             if (tab[mtab[mon]].obj == monitor) {
+                /* don't do the following for ext_monitor objects */
+                /* main pgm will CALL_MONINIT, even if no init code */
+@@ -1967,58 +2201,66 @@
+             }
+          }
+     break;
+-case 53:
+-#line 576 "bac.y"
+-{
++
++  case 54:
++#line 580 "bac.y"
++    {
+             tab[mtab[mon]].adr = lc;      /* addr of monitor init code */
+             process_var_inits(level);
+          }
+     break;
+-case 54:
+-#line 583 "bac.y"
+-{
++
++  case 55:
++#line 587 "bac.y"
++    {
+                leave_block(&level);
+                tab[yyvsp[-3]].adr = -1;
+                extern_decl = 0;
+                in_mon_decl = 0;
+             }
+     break;
+-case 55:
+-#line 592 "bac.y"
+-{ leave_block(&level); }
+-    break;
+-case 56:
+-#line 594 "bac.y"
+-{ leave_block(&level); }
++
++  case 56:
++#line 596 "bac.y"
++    { leave_block(&level); }
+     break;
+-case 60:
+-#line 603 "bac.y"
+-{
++
++  case 57:
++#line 598 "bac.y"
++    { leave_block(&level); }
++    break;
++
++  case 61:
++#line 607 "bac.y"
++    {
+             if (level > 0)
+             yyerror("Externals must be declared at the outer (global) level");
+          }
+     break;
+-case 62:
+-#line 613 "bac.y"
+-{ 
++
++  case 63:
++#line 617 "bac.y"
++    { 
+             yyval = elem_tix = int_loc; 
+             elem_size = stacksize(tab[int_loc].adr); /* tab has byte size */
+             elem_typ  = tab[int_loc].typ;
+             elem_ref  = tab[int_loc].ref;
+          }
+     break;
+-case 63:
+-#line 620 "bac.y"
+-{ 
++
++  case 64:
++#line 624 "bac.y"
++    { 
+             yyval = elem_tix = char_loc; 
+             elem_size = stacksize(tab[char_loc].adr);
+             elem_typ  = tab[char_loc].typ;
+             elem_ref  = tab[char_loc].ref;
+          }
+     break;
+-case 64:
+-#line 627 "bac.y"
+-{
++
++  case 65:
++#line 631 "bac.y"
++    {
+             if (yyvsp[-1] <= 0)
+                yyerror("A string of non-positive length is not valid");
+             else {
+@@ -2028,9 +2270,10 @@
+             }
+          }
+     break;
+-case 65:
+-#line 637 "bac.y"
+-{ 
++
++  case 66:
++#line 641 "bac.y"
++    { 
+             if (tab[yyvsp[0]].obj != type){
+                sprintf(pbuf,"'%s' is not a valid type",tab[yyvsp[0]].name);
+                yyerror(pbuf);
+@@ -2041,9 +2284,10 @@
+             elem_tix = yyvsp[0];
+          }
+     break;
+-case 68:
+-#line 654 "bac.y"
+-{
++
++  case 69:
++#line 658 "bac.y"
++    {
+             tab[yyvsp[0]].typ = elem_typ;
+             tab[yyvsp[0]].obj = (extern_decl ? ext_variable : variable);
+             tab[yyvsp[0]].ref = elem_ref;
+@@ -2051,9 +2295,10 @@
+             btab[display[level]].vsize += elem_size;
+          }
+     break;
+-case 69:
+-#line 662 "bac.y"
+-{
++
++  case 70:
++#line 666 "bac.y"
++    {
+             if (extern_decl) 
+                yyerror("External variables cannot be initialized");
+             else {
+@@ -2089,13 +2334,15 @@
+             }  /* else not extern */
+          }
+     break;
+-case 70:
+-#line 698 "bac.y"
+-{ in_typedef = 0; }
+-    break;
+-case 71:
++
++  case 71:
+ #line 702 "bac.y"
+-{ 
++    { in_typedef = 0; }
++    break;
++
++  case 72:
++#line 706 "bac.y"
++    { 
+          int i;
+          TYPES eltyp;
+          int   elsize,elref;
+@@ -2126,13 +2373,15 @@
+             array_defined = yyvsp[-1];
+          }
+     break;
+-case 72:
+-#line 735 "bac.y"
+-{ yyval = yyvsp[0]; /* only want to pass on atab index for first dim */}
++
++  case 73:
++#line 739 "bac.y"
++    { yyval = yyvsp[0]; /* only want to pass on atab index for first dim */}
+     break;
+-case 74:
+-#line 740 "bac.y"
+-{
++
++  case 75:
++#line 744 "bac.y"
++    {
+             if (last_atab == AMAX) 
+                cfatal("Array table full with %d entries",AMAX);
+             atab[++last_atab].inxtyp = consttype;
+@@ -2147,9 +2396,10 @@
+             yyval = last_atab;  /* pass array tab index up the parse tree */
+          }
+     break;
+-case 75:
+-#line 757 "bac.y"
+-{
++
++  case 76:
++#line 761 "bac.y"
++    {
+             yyval = yyvsp[-1];
+             if (yyvsp[-1] > 0) {
+                tab[yyvsp[-1]].obj = type;
+@@ -2160,9 +2410,10 @@
+             in_typedef = 0;
+          }
+     break;
+-case 76:
+-#line 768 "bac.y"
+-{
++
++  case 77:
++#line 772 "bac.y"
++    {
+             yyval = array_defined;
+             if (array_defined > 0) {
+                tab[array_defined].obj = type;
+@@ -2175,13 +2426,15 @@
+             in_typedef = 0;
+          }
+     break;
+-case 77:
+-#line 783 "bac.y"
+-{ in_typedef = 1; }
+-    break;
+-case 78:
++
++  case 78:
+ #line 787 "bac.y"
+-{
++    { in_typedef = 1; }
++    break;
++
++  case 79:
++#line 791 "bac.y"
++    {
+             if ((tab[yyvsp[-4]].typ != ints)&&(tab[yyvsp[-4]].typ != chars))
+                yyerror("Constants must be of type 'int' or 'char'");
+             else {
+@@ -2191,90 +2444,117 @@
+             }
+          }
+     break;
+-case 79:
+-#line 799 "bac.y"
+-{ yyval = yyvsp[0]; }
+-    break;
+-case 80:
+-#line 801 "bac.y"
+-{ yyval = - yyvsp[0]; }
+-    break;
+-case 81:
++
++  case 80:
+ #line 803 "bac.y"
+-{ yyval = yyvsp[0]; }
++    { yyval = yyvsp[0]; }
+     break;
+-case 82:
++
++  case 81:
+ #line 805 "bac.y"
+-{ consttype = chars; yyval = laststring[0]; }
++    { yyval = - yyvsp[0]; }
++    break;
++
++  case 82:
++#line 807 "bac.y"
++    { yyval = yyvsp[0]; }
+     break;
+-case 83:
++
++  case 83:
+ #line 809 "bac.y"
+-{ consttype = ints; }
++    { consttype = chars; yyval = laststring[0]; }
+     break;
+-case 84:
+-#line 811 "bac.y"
+-{  yyval = get_constant(tab[yyvsp[0]].name,level,&consttype); 
++
++  case 84:
++#line 813 "bac.y"
++    { consttype = ints; }
++    break;
++
++  case 85:
++#line 815 "bac.y"
++    {  yyval = get_constant(tab[yyvsp[0]].name,level,&consttype); 
+             if ((consttype != ints)&&(consttype != chars)) {
+                yyerror("'int' or 'char' type expected");
+                consttype = notyp;
+             }
+          }
+     break;
+-case 85:
+-#line 820 "bac.y"
+-{ yyval = strtoi(numbertext,numberbase); }
++
++  case 86:
++#line 824 "bac.y"
++    { yyval = strtoi(numbertext,numberbase); }
+     break;
+-case 90:
+-#line 830 "bac.y"
+-{ 
++
++  case 91:
++#line 834 "bac.y"
++    { 
+             leave_block(&level);
+             in_func_decl = 0;
+             extern_decl = 0; 
+          }
+     break;
+-case 91:
+-#line 838 "bac.y"
+-{ extern_decl = 1; }
+-    break;
+-case 92:
++
++  case 92:
+ #line 842 "bac.y"
+-{ extern_decl = 0; }
++    { extern_decl = 1; }
+     break;
+-case 93:
++
++  case 93:
+ #line 846 "bac.y"
+-{ 
++    { extern_decl = 0; }
++    break;
++
++  case 94:
++#line 850 "bac.y"
++    { 
+             extern_decl = 0; 
+             in_typedef = 0;
+          }
+     break;
+-case 94:
+-#line 853 "bac.y"
+-{ extern_decl = 0; }
+-    break;
+-case 97:
+-#line 859 "bac.y"
+-{ yyerrok; }
+-    break;
+-case 98:
+-#line 861 "bac.y"
+-{ yyerrok; }
+-    break;
+-case 99:
+-#line 866 "bac.y"
+-{ yyval = -1; /* send back news that expr_list was empty */ }
++
++  case 95:
++#line 857 "bac.y"
++    { extern_decl = 0; }
+     break;
+-case 106:
+-#line 878 "bac.y"
+-{ 
++
++  case 98:
++#line 863 "bac.y"
++    { yyerrok; }
++    break;
++
++  case 99:
++#line 865 "bac.y"
++    { yyerrok; }
++    break;
++
++  case 100:
++#line 870 "bac.y"
++    { yyval = -1; /* send back news that expr_list was empty */ }
++    break;
++
++  case 102:
++#line 875 "bac.y"
++    { free_expr(yyvsp[0]); }
++    break;
++
++  case 103:
++#line 877 "bac.y"
++    { free_expr(yyvsp[0]); }
++    break;
++
++  case 107:
++#line 884 "bac.y"
++    { 
+             process_breaks();
+                /* continue loc is passed back on the value stack */
+             process_continues(yyvsp[0]);
+             leave_break_block(&break_level,&curr_break,&curr_cont);
+          }
+     break;
+-case 118:
+-#line 900 "bac.y"
+-{
++
++  case 119:
++#line 906 "bac.y"
++    {
+             yyval = new_expr();
+             expr[yyval].obj = function;
+             expr[yyval].typ = ints;
+@@ -2299,13 +2579,15 @@
+             free_expr(yyvsp[-4]); free_expr(yyvsp[-2]);
+          }
+     break;
+-case 119:
+-#line 927 "bac.y"
+-{ yyval = yyvsp[0]; }
++
++  case 120:
++#line 933 "bac.y"
++    { yyval = yyvsp[0]; }
+     break;
+-case 120:
+-#line 929 "bac.y"
+-{
++
++  case 121:
++#line 935 "bac.y"
++    {
+             if (expr[yyvsp[0]].typ == strings) {
+                /* left parm is a string. If it's not an array elt, */
+                /* put the address of the string n the stack        */
+@@ -2317,9 +2599,10 @@
+             yyval = yyvsp[0];
+          }
+     break;
+-case 121:
+-#line 944 "bac.y"
+-{
++
++  case 122:
++#line 950 "bac.y"
++    {
+             if (expr[yyvsp[0]].typ == rawstrings)     /* raw str message */
+                emit1(BROADCAST_RAWSTRING,expr[yyvsp[0]].adr);
+             else if (expr[yyvsp[0]].typ == strings)   /* msg is a string var */
+@@ -2331,17 +2614,19 @@
+             free_expr(yyvsp[0]);
+          }
+     break;
+-case 122:
+-#line 958 "bac.y"
+-{
++
++  case 123:
++#line 964 "bac.y"
++    {
+             /* push the parm count for interp's SPRINTF_OP to use */
+             emit1(PUSH_LIT,varargs_cnt); 
+             emit1(SPRINTF_OP,yyvsp[-3]);
+          }
+     break;
+-case 123:
+-#line 966 "bac.y"
+-{ 
++
++  case 124:
++#line 972 "bac.y"
++    { 
+             if (expr[yyvsp[-2]].typ != strings)
+                yyerror("Leftmost sprintf parameter must be of type 'string'");
+             yyval = expr[yyvsp[0]].adr;   /* pass raw string index up the tree */
+@@ -2350,9 +2635,10 @@
+             varargs_cnt = 0;
+          }
+     break;
+-case 124:
+-#line 977 "bac.y"
+-{  
++
++  case 125:
++#line 983 "bac.y"
++    {  
+             if ((expr[yyvsp[0]].typ != ints)&&(expr[yyvsp[0]].typ != strings))
+                yyerror(
+             "sprintf parameter must be either of type 'int' or type 'string'");
+@@ -2364,9 +2650,10 @@
+             free_expr(yyvsp[0]);
+          }
+     break;
+-case 125:
+-#line 989 "bac.y"
+-{  
++
++  case 126:
++#line 995 "bac.y"
++    {  
+             if ((expr[yyvsp[0]].typ != ints)&&(expr[yyvsp[0]].typ != strings))
+                yyerror(
+             "sprintf parameter must be either of type 'int' or type 'string'");
+@@ -2378,17 +2665,20 @@
+             free_expr(yyvsp[0]);
+          }
+     break;
+-case 126:
+-#line 1003 "bac.y"
+-{ code[yyvsp[-1]].y = yyvsp[0]; }
+-    break;
+-case 127:
+-#line 1005 "bac.y"
+-{ code[yyvsp[-3]].y = yyvsp[-1]; code[yyvsp[-2]].y = lc; }
+-    break;
+-case 128:
+-#line 1007 "bac.y"
+-{ int i;
++
++  case 127:
++#line 1009 "bac.y"
++    { code[yyvsp[-1]].y = yyvsp[0]; }
++    break;
++
++  case 128:
++#line 1011 "bac.y"
++    { code[yyvsp[-3]].y = yyvsp[-1]; code[yyvsp[-2]].y = lc; }
++    break;
++
++  case 129:
++#line 1013 "bac.y"
++    { int i;
+                /* switch_level is incremented in switch_hdr rule        */
+                /* grammar also forces at least one case in every switch */
+             i = case_loc[curr_case];
+@@ -2398,27 +2688,31 @@
+                /* the current case of the enclosing switch block is one */
+                /* less than the first case of this block                */
+             curr_case = switch_block[switch_level].first_case - 1;
++            free_expr(switch_block[switch_level].expr_index);
+             switch_level--;
+             process_breaks();
+             leave_break_block(&break_level,&curr_break,&curr_cont);
+-            free_expr(yyvsp[-4]);
+          }
+     break;
+-case 129:
+-#line 1025 "bac.y"
+-{ gen_exprval(yyvsp[-1]); yyval = lc; emit(JZER); free_expr(yyvsp[-1]); }
++
++  case 130:
++#line 1031 "bac.y"
++    { gen_exprval(yyvsp[-1]); yyval = lc; emit(JZER); free_expr(yyvsp[-1]); }
+     break;
+-case 130:
+-#line 1029 "bac.y"
+-{ yyval = lc; }
++
++  case 131:
++#line 1035 "bac.y"
++    { yyval = lc; }
+     break;
+-case 131:
+-#line 1033 "bac.y"
+-{ emit(JUMP); yyval = lc; }
++
++  case 132:
++#line 1039 "bac.y"
++    { emit(JUMP); yyval = lc; }
+     break;
+-case 132:
+-#line 1037 "bac.y"
+-{ 
++
++  case 133:
++#line 1043 "bac.y"
++    { 
+             enter_break_block(&break_level,switch_blk);
+             if (++curr_case == MAXCASELOC)
+                cfatal(
+@@ -2430,17 +2724,20 @@
+             switch_block[switch_level].expr_index = yyvsp[-1];
+          }
+     break;
+-case 136:
+-#line 1058 "bac.y"
+-{ first_case_hdr = curr_case; case_hdr_cnt = 1; }
+-    break;
+-case 137:
+-#line 1060 "bac.y"
+-{  case_hdr_cnt++; }
+-    break;
+-case 138:
++
++  case 137:
+ #line 1064 "bac.y"
+-{ int i;
++    { first_case_hdr = curr_case; case_hdr_cnt = 1; }
++    break;
++
++  case 138:
++#line 1066 "bac.y"
++    {  case_hdr_cnt++; }
++    break;
++
++  case 139:
++#line 1070 "bac.y"
++    { int i;
+          i = switch_block[switch_level].expr_index;
+          if ((expr[i].typ != expr[yyvsp[-1]].typ)&&(expr[yyvsp[-1]].typ != notyp)) 
+             yyerror
+@@ -2458,18 +2755,20 @@
+          }
+       }
+     break;
+-case 139:
+-#line 1084 "bac.y"
+-{  int j;
++
++  case 140:
++#line 1090 "bac.y"
++    {  int j;
+          j = switch_block[switch_level].first_case;
+          if (case_hdr_cnt > 0) emit(JUMP); /* for multiple case labels */
+          if (curr_case > j)
+             code[case_loc[curr_case]].y = lc;  /* prev JZER target */
+       }
+     break;
+-case 140:
+-#line 1093 "bac.y"
+-{  int i, j, k;
++
++  case 141:
++#line 1099 "bac.y"
++    {  int i, j, k;
+          for (i = 1, j = first_case_hdr; i < case_hdr_cnt; i++, j++ ) {
+             k = case_loc[j]; 
+             code[k+1].y = lc;    /* k+1 == address of JMP to stmt_list */
+@@ -2478,36 +2777,42 @@
+          first_case_hdr = -1;
+       }
+     break;
+-case 141:
+-#line 1104 "bac.y"
+-{ yyval = lc; }
+-    break;
+-case 143:
+-#line 1109 "bac.y"
+-{ yyval = lc; }
+-    break;
+-case 144:
+-#line 1113 "bac.y"
+-{ if (level == 1) emit(COEND); in_cobegin = 0; }
++
++  case 142:
++#line 1110 "bac.y"
++    { yyval = lc; }
+     break;
+-case 145:
+-#line 1117 "bac.y"
+-{
++
++  case 144:
++#line 1115 "bac.y"
++    { yyval = lc; }
++    break;
++
++  case 145:
++#line 1119 "bac.y"
++    { if (level == 1) emit(COEND); in_cobegin = 0; }
++    break;
++
++  case 146:
++#line 1123 "bac.y"
++    {
+             yyval = yyvsp[-2];             /* continue target */
+             emit1(JUMP,yyvsp[-2]); 
+             code[yyvsp[-1]].y = lc; 
+          }
+     break;
+-case 146:
+-#line 1123 "bac.y"
+-{  
++
++  case 147:
++#line 1129 "bac.y"
++    {  
+             yyval = yyvsp[-2];             /* continue target */
+             code[yyvsp[-1]].y = yyvsp[-4];     /* point JUMP to top of DO */
+          }
+     break;
+-case 147:
+-#line 1128 "bac.y"
+-{ int i; 
++
++  case 148:
++#line 1134 "bac.y"
++    { int i; 
+             if (yyvsp[-2]) {            /* iteration code was generated */
+                yyval = for_info[curr_for].iter_loc;  /* continue target */
+                /* jump back to iteration code after stmt */
+@@ -2532,39 +2837,45 @@
+             curr_for--;
+          }
+     break;
+-case 148:
+-#line 1155 "bac.y"
+-{ 
++
++  case 149:
++#line 1161 "bac.y"
++    { 
+             yyval = lc;   /* continue target */ 
+             enter_break_block(&break_level,loop_blk);
+          }
+     break;
+-case 149:
+-#line 1162 "bac.y"
+-{ 
++
++  case 150:
++#line 1168 "bac.y"
++    { 
+             gen_exprval(yyvsp[-1]); 
+             free_expr(yyvsp[-1]); 
+             yyval = lc; 
+             emit(JZER);
+          }
+     break;
+-case 150:
+-#line 1171 "bac.y"
+-{ 
++
++  case 151:
++#line 1177 "bac.y"
++    { 
+             enter_break_block(&break_level,loop_blk);
+          }
+     break;
+-case 151:
+-#line 1177 "bac.y"
+-{ yyval = lc; /* location of stmt code */ }
++
++  case 152:
++#line 1183 "bac.y"
++    { yyval = lc; /* location of stmt code */ }
+     break;
+-case 152:
+-#line 1181 "bac.y"
+-{ yyval = lc;  /* continue target */ }
++
++  case 153:
++#line 1187 "bac.y"
++    { yyval = lc;  /* continue target */ }
+     break;
+-case 153:
+-#line 1185 "bac.y"
+-{ 
++
++  case 154:
++#line 1191 "bac.y"
++    { 
+             gen_exprval(yyvsp[-1]); 
+             free_expr(yyvsp[-1]); 
+             emit1(JZER,lc+2);
+@@ -2572,15 +2883,17 @@
+             emit(JUMP);
+          }
+     break;
+-case 154:
+-#line 1195 "bac.y"
+-{ /* init stuff done, continuation testing code is next */
++
++  case 155:
++#line 1201 "bac.y"
++    { /* init stuff done, continuation testing code is next */
+             for_info[curr_for].cont_loc  = lc;  /* continuation test code */
+          }
+     break;
+-case 155:
+-#line 1201 "bac.y"
+-{ 
++
++  case 156:
++#line 1207 "bac.y"
++    { 
+             enter_break_block(&break_level,loop_blk);
+             if (++curr_for == MAXFORNEST)
+                cfatal("No more than %d 'for' statements can be nested",
+@@ -2591,13 +2904,15 @@
+             }
+          }
+     break;
+-case 156:
+-#line 1214 "bac.y"
+-{ yyval = 0;   /* no continuation code */ }
++
++  case 157:
++#line 1220 "bac.y"
++    { yyval = 0;   /* no continuation code */ }
+     break;
+-case 157:
+-#line 1216 "bac.y"
+-{ 
++
++  case 158:
++#line 1222 "bac.y"
++    { 
+             yyval = 1;  /* continuation code */
+             gen_exprval(yyvsp[0]);  /* expr might not have been generated yet */
+             free_expr(yyvsp[0]);
+@@ -2605,32 +2920,36 @@
+             emit(JZER);
+          }
+     break;
+-case 158:
+-#line 1226 "bac.y"
+-{
++
++  case 159:
++#line 1232 "bac.y"
++    {
+             emit(JUMP);       /* to stmt code, backpatched later */
+             for_info[curr_for].iter_loc = lc; /* loc of iteration code */ 
+          }
+     break;
+-case 159:
+-#line 1233 "bac.y"
+-{ 
++
++  case 160:
++#line 1239 "bac.y"
++    { 
+             yyval = 0;   /* no iteration code */
+             for_info[curr_for].stmt_loc = lc;   /* loc of stmt code */
+          }
+     break;
+-case 160:
+-#line 1238 "bac.y"
+-{
++
++  case 161:
++#line 1244 "bac.y"
++    {
+             yyval = 1;   /* iteration code */
+             if (for_info[curr_for].cont_jzer >= 0) /* there was cont code */
+                emit(JUMP);       /* to continuation code, backpatched */
+             for_info[curr_for].stmt_loc = lc;   /* loc of stmt code */
+          }
+     break;
+-case 161:
+-#line 1247 "bac.y"
+-{
++
++  case 162:
++#line 1253 "bac.y"
++    {
+             if (level != 1)
+                yyerror("'cobegin' block allowed only in 'main'");
+             else if (in_cobegin)
+@@ -2640,9 +2959,10 @@
+             in_cobegin = 1;
+          }
+     break;
+-case 162:
+-#line 1259 "bac.y"
+-{
++
++  case 163:
++#line 1265 "bac.y"
++    {
+             if ((break_level < 0)||
+                (break_block[break_level].bb_type != loop_blk))
+                yyerror("'continue' is inappropriate outside a loop");
+@@ -2660,9 +2980,10 @@
+             }
+          }
+     break;
+-case 163:
+-#line 1279 "bac.y"
+-{
++
++  case 164:
++#line 1285 "bac.y"
++    {
+             if (break_level < 0)
+    yyerror("'break' is inappropriate outside a 'loop' or 'switch' statement");
+             else {
+@@ -2679,40 +3000,51 @@
+             }
+          }
+     break;
+-case 164:
+-#line 1298 "bac.y"
+-{  
++
++  case 165:
++#line 1304 "bac.y"
++    {  
+             if (void_function) {
+-               if (yyvsp[-1] < 0)
+-                  emit(EXIT_PROC); 
++               if (yyvsp[-1] < 0) {
++                  if (++curr_ret == MAXRETURN)
++                     cfatal(
++   "No more thn %d 'return' statements can appear in a function",MAXRETURN);
++                  else
++                     return_loc[curr_ret] = lc;    /* mark the JUMP loc */
++                  emit(JUMP);
++               }
+                else
+                   yyerror("Cannot return a value from a 'void' function");
+             }
+-            if (yyvsp[-1] >= 0) 
+-               gen_exprval(yyvsp[-1]); 
+-            else  /* no expression to push */
+-               emit1(PUSH_LIT,0); 
+-            emit(STORE); 
+-            if (++curr_ret == MAXRETURN)
+-               cfatal(
++            else {   // non void function
++               if (yyvsp[-1] >= 0) 
++                  gen_exprval(yyvsp[-1]); 
++               else  /* no expression to push */
++                  emit1(PUSH_LIT,0); 
++               emit(STORE); 
++               if (++curr_ret == MAXRETURN)
++                  cfatal(
+    "No more thn %d 'return' statements can appear in a function",MAXRETURN);
+-            else
+-               return_loc[curr_ret] = lc;    /* mark the JUMP loc */
+-            emit(JUMP);   /* jump to fcn exit*/ 
++               else
++                  return_loc[curr_ret] = lc;    /* mark the JUMP loc */
++               emit(JUMP);   /* jump to fcn exit*/ 
++            } 
+          }
+     break;
+-case 165:
+-#line 1320 "bac.y"
+-{ 
++
++  case 166:
++#line 1334 "bac.y"
++    { 
+             if (!in_func_decl)
+                yyerror("'return' is inappropriate outside a function");
+             else if (!void_function)
+-                  emit2(LOAD_ADDR,tab[func_tab].lev+1,0);
++                  emit2(LOAD_ADDR,tab[prt].lev+1,0);
+          }
+     break;
+-case 169:
+-#line 1336 "bac.y"
+-{
++
++  case 170:
++#line 1350 "bac.y"
++    {
+             if (expr[yyvsp[0]].typ == arrays) /* presently our only struct type */
+                yyerror("Cannot output an array");
+             else if(expr[yyvsp[0]].typ == strings) {
+@@ -2728,20 +3060,23 @@
+             free_expr(yyvsp[0]);
+          }
+     break;
+-case 170:
+-#line 1352 "bac.y"
+-{ emit(WRITELN); }
+-    break;
+-case 171:
+-#line 1354 "bac.y"
+-{  
++
++  case 171:
++#line 1366 "bac.y"
++    { emit(WRITELN); }
++    break;
++
++  case 172:
++#line 1368 "bac.y"
++    {  
+             int tmp = store_string(laststring,&stab_size);
+             emit1(WRITE_RAWSTRING,tmp);
+          }
+     break;
+-case 172:
+-#line 1361 "bac.y"
+-{
++
++  case 173:
++#line 1375 "bac.y"
++    {
+             if ((expr[yyvsp[-1]].obj != variable)&& (expr[yyvsp[-1]].obj != ext_variable))
+                yyerror("input item must be a 'variable'");
+             else if ((expr[yyvsp[-1]].typ != ints)&&(expr[yyvsp[-1]].typ != chars)&&
+@@ -2752,23 +3087,32 @@
+                emit1(READ,expr[yyvsp[-1]].typ);
+             } else   /* array element */
+                emit1(READ,expr[yyvsp[-1]].typ);
++            free_expr(yyvsp[-1]);
+          }
+     break;
+-case 174:
+-#line 1378 "bac.y"
+-{ yyval = -1; }
+-    break;
+-case 176:
+-#line 1383 "bac.y"
+-{  int i = expr[yyvsp[-1]].tix;
++
++  case 175:
++#line 1393 "bac.y"
++    { yyval = -1; }
++    break;
++
++  case 176:
++#line 1395 "bac.y"
++    { free_expr(yyvsp[0]); }
++    break;
++
++  case 177:
++#line 1399 "bac.y"
++    {  int i = expr[yyvsp[-1]].tix;
+             if ((tab[i].obj == function) && (!expr[yyvsp[-1]].result_used))
+                yyerror("A non-void function cannot be called as a void function");
+             free_expr(yyvsp[-1]); 
+          }
+     break;
+-case 179:
+-#line 1395 "bac.y"
+-{
++
++  case 180:
++#line 1411 "bac.y"
++    {
+             expr[yyvsp[0]].result_used = 1;
+             gen_exprval(yyvsp[0]);
+             if (tab[yyvsp[-1]].typ == expr[yyvsp[0]].typ) {
+@@ -2786,19 +3130,21 @@
+             else
+                yyerror("Type mismatch in assignment");
+             yyval = yyvsp[0];
++            expr[yyval].tix = yyvsp[-1];
+             assign_cnt--;
+          }
+     break;
+-case 180:
+-#line 1416 "bac.y"
+-{
++
++  case 181:
++#line 1433 "bac.y"
++    {
+             gen_exprval(yyvsp[0]);
+             if (expr[yyvsp[-1]].typ == expr[yyvsp[0]].typ) {
+                if ((expr[yyvsp[-1]].typ == sems)||(expr[yyvsp[-1]].typ == bsems)|| 
+                    (expr[yyvsp[-1]].typ == conds))
+                   yyerror("Cannot assign to 'semaphore' or 'condition'");
+                else if (expr[yyvsp[-1]].typ == arrays)
+-                  emit1(COPY_BLOCK,atab[tab[yyvsp[-1]].ref].size);
++                  emit1(COPY_BLOCK,atab[expr[yyvsp[-1]].ref].size);
+                else  /* standard types */
+                   if (assign_cnt > 1)  /* multiple assignments */
+                      emit(STORE_KEEP);
+@@ -2807,32 +3153,33 @@
+             }
+             else
+                yyerror("Type mismatch in assignment");
++            free_expr(yyvsp[0]);
+             expr[yyvsp[-1]].isval = 1;
+             yyval = yyvsp[-1];
+             assign_cnt--;
+          }
+     break;
+-case 181:
+-#line 1439 "bac.y"
+-{
++
++  case 182:
++#line 1457 "bac.y"
++    {
+             assign_cnt++;
+             if ((tab[yyvsp[-1]].obj == variable)||(tab[yyvsp[-1]].obj == ext_variable)) {
+-               if ((tab[yyvsp[-1]].typ == sems)||(tab[yyvsp[-1]].typ == bsems))
+-                  yyerror("Must use `initialsem' to initialize a 'semaphore'");
+-               else
+                   emit_push_addr(tab[yyvsp[-1]]);
+             }
+             else
+                yyerror("'variable' identifier expected");
+          }
+     break;
+-case 182:
+-#line 1453 "bac.y"
+-{ assign_cnt++; }
++
++  case 183:
++#line 1468 "bac.y"
++    { assign_cnt++; }
+     break;
+-case 184:
+-#line 1458 "bac.y"
+-{
++
++  case 185:
++#line 1473 "bac.y"
++    {
+             if ((expr[yyvsp[-2]].typ == ints)&&(expr[yyvsp[0]].typ == ints)) {
+                gen_exprval(yyvsp[0]);
+                emit(DO_OR);
+@@ -2844,13 +3191,15 @@
+             free_expr(yyvsp[0]);
+          }
+     break;
+-case 185:
+-#line 1472 "bac.y"
+-{ gen_exprval(yyvsp[0]); }
++
++  case 186:
++#line 1487 "bac.y"
++    { gen_exprval(yyvsp[0]); }
+     break;
+-case 187:
+-#line 1477 "bac.y"
+-{
++
++  case 188:
++#line 1492 "bac.y"
++    {
+             if ((expr[yyvsp[-2]].typ == ints)&&(expr[yyvsp[0]].typ == ints)) {
+                gen_exprval(yyvsp[0]);
+                emit(DO_AND);
+@@ -2862,13 +3211,15 @@
+             free_expr(yyvsp[0]);
+          }
+     break;
+-case 188:
+-#line 1491 "bac.y"
+-{ gen_exprval(yyvsp[0]); }
++
++  case 189:
++#line 1506 "bac.y"
++    { gen_exprval(yyvsp[0]); }
+     break;
+-case 190:
+-#line 1496 "bac.y"
+-{
++
++  case 191:
++#line 1511 "bac.y"
++    {
+             gen_exprval(yyvsp[0]);
+             if (expr[yyvsp[-2]].typ == expr[yyvsp[0]].typ){
+                if ((expr[yyvsp[-2]].typ == ints)||(expr[yyvsp[-2]].typ == chars))
+@@ -2883,37 +3234,45 @@
+             free_expr(yyvsp[0]);
+          }
+     break;
+-case 191:
+-#line 1513 "bac.y"
+-{ gen_exprval(yyvsp[0]); }
+-    break;
+-case 192:
+-#line 1516 "bac.y"
+-{ yyval = TEST_EQ; }
+-    break;
+-case 193:
+-#line 1517 "bac.y"
+-{ yyval = TEST_LT; }
+-    break;
+-case 194:
+-#line 1518 "bac.y"
+-{ yyval = TEST_GT; }
+-    break;
+-case 195:
+-#line 1519 "bac.y"
+-{ yyval = TEST_LE; }
+-    break;
+-case 196:
+-#line 1520 "bac.y"
+-{ yyval = TEST_GE; }
+-    break;
+-case 197:
+-#line 1521 "bac.y"
+-{ yyval = TEST_NE; }
++
++  case 192:
++#line 1528 "bac.y"
++    { gen_exprval(yyvsp[0]); }
+     break;
+-case 199:
+-#line 1526 "bac.y"
+-{
++
++  case 193:
++#line 1531 "bac.y"
++    { yyval = TEST_EQ; }
++    break;
++
++  case 194:
++#line 1532 "bac.y"
++    { yyval = TEST_LT; }
++    break;
++
++  case 195:
++#line 1533 "bac.y"
++    { yyval = TEST_GT; }
++    break;
++
++  case 196:
++#line 1534 "bac.y"
++    { yyval = TEST_LE; }
++    break;
++
++  case 197:
++#line 1535 "bac.y"
++    { yyval = TEST_GE; }
++    break;
++
++  case 198:
++#line 1536 "bac.y"
++    { yyval = TEST_NE; }
++    break;
++
++  case 200:
++#line 1541 "bac.y"
++    {
+             yyval = yyvsp[0];
+             gen_exprval(yyval);
+             if ((expr[yyval].typ != ints)&&(expr[yyval].typ != notyp)){
+@@ -2922,9 +3281,10 @@
+             }
+          }
+     break;
+-case 200:
+-#line 1535 "bac.y"
+-{
++
++  case 201:
++#line 1550 "bac.y"
++    {
+             yyval = yyvsp[0];
+             gen_exprval(yyval);
+             if ((expr[yyval].typ != ints)&&(expr[yyval].typ != notyp)){
+@@ -2935,9 +3295,10 @@
+                emit(NEGATE);
+          }
+     break;
+-case 201:
+-#line 1546 "bac.y"
+-{
++
++  case 202:
++#line 1561 "bac.y"
++    {
+             gen_exprval(yyvsp[0]);
+             switch (yyvsp[-1]) {
+             case DO_ADD:
+@@ -2952,21 +3313,25 @@
+             free_expr(yyvsp[0]);
+          }
+     break;
+-case 202:
+-#line 1563 "bac.y"
+-{ gen_exprval(yyvsp[0]); }
+-    break;
+-case 203:
+-#line 1566 "bac.y"
+-{ yyval = DO_ADD; }
+-    break;
+-case 204:
+-#line 1567 "bac.y"
+-{ yyval = DO_SUB; }
++
++  case 203:
++#line 1578 "bac.y"
++    { gen_exprval(yyvsp[0]); }
+     break;
+-case 206:
+-#line 1572 "bac.y"
+-{
++
++  case 204:
++#line 1581 "bac.y"
++    { yyval = DO_ADD; }
++    break;
++
++  case 205:
++#line 1582 "bac.y"
++    { yyval = DO_SUB; }
++    break;
++
++  case 207:
++#line 1587 "bac.y"
++    {
+             gen_exprval(yyvsp[0]);
+             switch(yyvsp[-1]) {
+             case DO_MUL:
+@@ -2985,25 +3350,30 @@
+             free_expr(yyvsp[0]);
+          }
+     break;
+-case 207:
+-#line 1593 "bac.y"
+-{ gen_exprval(yyvsp[0]); }
+-    break;
+-case 208:
+-#line 1596 "bac.y"
+-{ yyval = DO_MUL; }
+-    break;
+-case 209:
+-#line 1597 "bac.y"
+-{ yyval = DO_DIV; }
+-    break;
+-case 210:
+-#line 1598 "bac.y"
+-{ yyval = DO_MOD; }
++
++  case 208:
++#line 1608 "bac.y"
++    { gen_exprval(yyvsp[0]); }
+     break;
+-case 212:
+-#line 1603 "bac.y"
+-{
++
++  case 209:
++#line 1611 "bac.y"
++    { yyval = DO_MUL; }
++    break;
++
++  case 210:
++#line 1612 "bac.y"
++    { yyval = DO_DIV; }
++    break;
++
++  case 211:
++#line 1613 "bac.y"
++    { yyval = DO_MOD; }
++    break;
++
++  case 213:
++#line 1618 "bac.y"
++    {
+             yyval = new_expr();
+             expr[yyval].obj = constant;
+             expr[yyval].adr = yyvsp[0];
+@@ -3011,9 +3381,10 @@
+             expr[yyval].lev = level;
+          }
+     break;
+-case 213:
+-#line 1611 "bac.y"
+-{
++
++  case 214:
++#line 1626 "bac.y"
++    {
+             yyval = new_expr();
+             expr[yyval].obj = constant;
+             expr[yyval].adr = laststring[0];
+@@ -3021,13 +3392,15 @@
+             expr[yyval].lev = level;
+          }
+     break;
+-case 214:
+-#line 1619 "bac.y"
+-{ yyval = yyvsp[-1];}
++
++  case 215:
++#line 1634 "bac.y"
++    { yyval = yyvsp[-1];}
+     break;
+-case 215:
+-#line 1621 "bac.y"
+-{
++
++  case 216:
++#line 1636 "bac.y"
++    {
+             yyval = yyvsp[0];
+             gen_exprval(yyval);
+             if (expr[yyval].typ == ints)
+@@ -3038,9 +3411,10 @@
+             }
+          }
+     break;
+-case 217:
+-#line 1635 "bac.y"
+-{
++
++  case 218:
++#line 1650 "bac.y"
++    {
+             if ((expr[yyvsp[-1]].typ != ints)&&(expr[yyvsp[-1]].typ != chars))
+                yyerror("'int' or 'char' expected");
+             else {
+@@ -3052,9 +3426,10 @@
+             }
+          }
+     break;
+-case 218:
+-#line 1647 "bac.y"
+-{
++
++  case 219:
++#line 1662 "bac.y"
++    {
+             if ((expr[yyvsp[0]].typ != ints)&&(expr[yyvsp[0]].typ != chars))
+                yyerror("'int' or 'char' expected");
+             else {
+@@ -3066,9 +3441,10 @@
+             }
+          }
+     break;
+-case 219:
+-#line 1659 "bac.y"
+-{
++
++  case 220:
++#line 1674 "bac.y"
++    {
+             if ((expr[yyvsp[-1]].typ != ints)&&(expr[yyvsp[-1]].typ != chars))
+                yyerror("'int' or 'char' expected");
+             else {
+@@ -3080,9 +3456,10 @@
+             }
+          }
+     break;
+-case 220:
+-#line 1671 "bac.y"
+-{
++
++  case 221:
++#line 1686 "bac.y"
++    {
+             if ((expr[yyvsp[0]].typ != ints)&&(expr[yyvsp[0]].typ != chars))
+                yyerror("'int' or 'char' expected");
+             else {
+@@ -3094,9 +3471,10 @@
+             }
+          }
+     break;
+-case 224:
+-#line 1688 "bac.y"
+-{
++
++  case 225:
++#line 1703 "bac.y"
++    {
+             yyval = new_expr();
+             expr[yyval].obj = tab[yyvsp[0]].obj;
+             expr[yyval].typ = tab[yyvsp[0]].typ;
+@@ -3107,9 +3485,10 @@
+             expr[yyval].tix = yyvsp[0];
+          }
+     break;
+-case 225:
+-#line 1701 "bac.y"
+-{ int k; 
++
++  case 226:
++#line 1716 "bac.y"
++    { int k; 
+             yyval = new_expr();
+             expr[yyval].obj = tab[yyvsp[-1]].obj;
+             expr[yyval].typ = tab[yyvsp[-1]].typ;
+@@ -3154,9 +3533,10 @@
+             }
+          }
+     break;
+-case 228:
+-#line 1750 "bac.y"
+-{
++
++  case 229:
++#line 1765 "bac.y"
++    {
+             last_pf = yyvsp[0];
+             if ((tab[yyvsp[0]].obj != function)&&(tab[yyvsp[0]].obj != procedure)&&
+                 (tab[yyvsp[0]].obj != ext_function)&&(tab[yyvsp[0]].obj != ext_procedure))
+@@ -3167,7 +3547,7 @@
+                else{  /* legal func call */
+                   pfstack[toppfs].tix = last_pf; 
+                   pfstack[toppfs].pct = parmct = 0;
+-                  first_stringerr = first_parmcterr = 1;
++                  first_parmcterr = 1;
+                   if (tab[yyvsp[0]].lev != -1){ /* regular proc call */
+                      if ((tab[yyvsp[0]].mon)&&(tab[prt].mon)&&
+                          (tab[yyvsp[0]].mon != tab[prt].mon))
+@@ -3178,9 +3558,10 @@
+             } /* if func */
+          }
+     break;
+-case 233:
+-#line 1782 "bac.y"
+-{
++
++  case 234:
++#line 1797 "bac.y"
++    {
+             parmct = ++pfstack[toppfs].pct;
+             if (tab[last_pf].lev == -1)
+                stdproc_parm(last_pf,yyvsp[0],parmct);
+@@ -3189,9 +3570,10 @@
+             free_expr(yyvsp[0]);
+          }
+     break;
+-case 239:
+-#line 1800 "bac.y"
+-{
++
++  case 240:
++#line 1815 "bac.y"
++    {
+             if (expr[yyvsp[-1]].typ != strings)
+                yyerror("left parameter is not of type 'string'");
+             yyval = NO_EXPR;     /* for free_expr() call up the parse tree */
+@@ -3202,9 +3584,11 @@
+             free_expr(yyvsp[-1]); free_expr(yyvsp[0]);
+          }
+     break;
+-case 240:
+-#line 1813 "bac.y"
+-{
++
++  case 241:
++#line 1828 "bac.y"
++    {
++            yyval = yyvsp[-1];
+             if (expr[yyvsp[-1]].typ != strings) {
+                yyerror("right parameter is not of type 'string'");
+                last_eltyp = notyp;
+@@ -3217,13 +3601,15 @@
+             }
+          }
+     break;
+-case 241:
+-#line 1826 "bac.y"
+-{ yyval = yyvsp[-1]; }
++
++  case 242:
++#line 1842 "bac.y"
++    { yyval = yyvsp[-1]; }
+     break;
+-case 242:
+-#line 1830 "bac.y"
+-{
++
++  case 243:
++#line 1846 "bac.y"
++    {
+             yyval = new_expr();
+             expr[yyval].obj = variable;
+             expr[yyval].typ = rawstrings;
+@@ -3233,9 +3619,10 @@
+             expr[yyval].tix = -1;
+          }
+     break;
+-case 243:
+-#line 1842 "bac.y"
+-{
++
++  case 244:
++#line 1858 "bac.y"
++    {
+             if (expr[yyvsp[-1]].typ != strings)
+                yyerror("left parameter is not of type 'string'");
+             yyval = NO_EXPR;     /* for free_expr() call up the parse tree */
+@@ -3246,9 +3633,10 @@
+             free_expr(yyvsp[-1]); free_expr(yyvsp[0]);
+          }
+     break;
+-case 244:
+-#line 1855 "bac.y"
+-{
++
++  case 245:
++#line 1871 "bac.y"
++    {
+             if (expr[yyvsp[-1]].typ != strings)
+                yyerror("left parameter is not of type 'string'");
+             yyval = new_expr();
+@@ -3265,9 +3653,10 @@
+             free_expr(yyvsp[0]);
+          }
+     break;
+-case 245:
+-#line 1874 "bac.y"
+-{
++
++  case 246:
++#line 1890 "bac.y"
++    {
+             yyval = new_expr();
+             expr[yyval].obj = function;
+             expr[yyval].typ = ints;
+@@ -3284,9 +3673,10 @@
+             free_expr(yyvsp[0]);
+          }
+     break;
+-case 246:
+-#line 1893 "bac.y"
+-{
++
++  case 247:
++#line 1909 "bac.y"
++    {
+             if (expr[yyvsp[-1]].typ == strings) {
+                  if (!expr[yyvsp[-1]].arelt)
+                   /* addr of array ref is already on the stack */
+@@ -3297,9 +3687,10 @@
+             /* parent rule will free_expr($2) */
+          }
+     break;
+-case 247:
+-#line 1904 "bac.y"
+-{
++
++  case 248:
++#line 1920 "bac.y"
++    {
+             yyval = new_expr();
+             expr[yyval].obj = variable;
+             expr[yyval].typ = rawstrings;
+@@ -3309,9 +3700,10 @@
+             expr[yyval].tix = -1;
+          }
+     break;
+-case 248:
+-#line 1916 "bac.y"
+-{
++
++  case 249:
++#line 1932 "bac.y"
++    {
+             yyval = new_expr();
+             expr[yyval].obj = function;
+             expr[yyval].typ = ints;
+@@ -3324,9 +3716,10 @@
+             emit1(SSCANF_OP,yyvsp[-3]);
+          }
+     break;
+-case 249:
+-#line 1931 "bac.y"
+-{ 
++
++  case 250:
++#line 1947 "bac.y"
++    { 
+             if (expr[yyvsp[-2]].typ != strings)
+                yyerror("Leftmost sscanf parameter must be of type 'string'");
+             yyval = expr[yyvsp[0]].adr;  /* pass rawstring index up the tree */
+@@ -3335,9 +3728,10 @@
+             varargs_cnt = 0;
+          }
+     break;
+-case 250:
+-#line 1942 "bac.y"
+-{  
++
++  case 251:
++#line 1958 "bac.y"
++    {  
+             if ((expr[yyvsp[0]].typ != ints)&&(expr[yyvsp[0]].typ != strings))
+                yyerror(
+             "sscanf parameter must be either of type 'int' or type 'string'");
+@@ -3346,9 +3740,10 @@
+             free_expr(yyvsp[0]);
+          }
+     break;
+-case 251:
+-#line 1951 "bac.y"
+-{  
++
++  case 252:
++#line 1967 "bac.y"
++    {  
+             if ((expr[yyvsp[0]].typ != ints)&&(expr[yyvsp[0]].typ != strings))
+                yyerror(
+             "sscanf parameter must be either of type 'int' or type 'string'");
+@@ -3357,9 +3752,10 @@
+             free_expr(yyvsp[0]);
+          }
+     break;
+-case 252:
+-#line 1962 "bac.y"
+-{
++
++  case 253:
++#line 1978 "bac.y"
++    {
+             if (expr[yyvsp[-1]].typ != strings)
+                yyerror("Left parameter must be of type 'string'");
+             emit(RECEIVE_OP);
+@@ -3373,9 +3769,10 @@
+             expr[yyval].adr = expr[yyval].lev = -1;
+          }
+     break;
+-case 253:
+-#line 1976 "bac.y"
+-{
++
++  case 254:
++#line 1992 "bac.y"
++    {
+             if (expr[yyvsp[-3]].typ != strings)
+                yyerror("Left parameter must be of type 'string'");
+             /* implements receive(string,int&) call */
+@@ -3398,9 +3795,10 @@
+             expr[yyval].adr = expr[yyval].lev = -1;
+          }
+     break;
+-case 254:
+-#line 2001 "bac.y"
+-{
++
++  case 255:
++#line 2017 "bac.y"
++    {
+             expr[yyvsp[-1]].ref = sizeof(int)*atab[last_aref].elsize;
+             expr[yyvsp[-1]].arelt = 1;
+             expr[yyvsp[-1]].typ = last_eltyp;
+@@ -3411,9 +3809,10 @@
+             }
+          }
+     break;
+-case 255:
+-#line 2014 "bac.y"
+-{
++
++  case 256:
++#line 2030 "bac.y"
++    {
+             if (tab[yyvsp[0]].typ != arrays) {
+                sprintf(pbuf,"'%s' is not of type 'array'",tab[yyvsp[0]].name);
+                yyerror(pbuf);
+@@ -3441,9 +3840,10 @@
+             expr[yyval].normal = tab[yyvsp[0]].normal;
+          }
+     break;
+-case 256:
+-#line 2044 "bac.y"
+-{ 
++
++  case 257:
++#line 2060 "bac.y"
++    { 
+             gen_exprval(yyvsp[-1]);
+             last_aref = arstack[topars].aref;
+             last_eltyp = arstack[topars].eltyp;
+@@ -3453,9 +3853,10 @@
+             free_expr(yyvsp[-1]); 
+          }
+     break;
+-case 257:
+-#line 2054 "bac.y"
+-{ 
++
++  case 258:
++#line 2070 "bac.y"
++    { 
+             gen_exprval(yyvsp[-1]);
+             last_aref = arstack[topars].aref;
+             last_eltyp = arstack[topars].eltyp;
+@@ -3465,47 +3866,39 @@
+             free_expr(yyvsp[-1]); 
+          }
+     break;
+-case 258:
+-#line 2066 "bac.y"
+-{
++
++  case 259:
++#line 2082 "bac.y"
++    {
+             expr[yyvsp[-1]].typ = ints;
+             yyval = yyvsp[-1];
+          }
+     break;
+-case 259:
+-#line 2073 "bac.y"
+-{ yyval = loc(lastident(),level); }
+-    break;
+-case 260:
+-#line 2077 "bac.y"
+-{ yyval = enter(lastident(),constant,level,level); }
++
++  case 260:
++#line 2089 "bac.y"
++    { yyval = loc(lastident(),level); }
+     break;
+-}
+-#line 705 "/usr/share/bison/bison.simple"
++  case 261:
++#line 2093 "bac.y"
++    { yyval = enter(lastident(),constant,level,level); }
++    break;
++
++
++    }
++/* Line 991 of yacc.c.  */
++#line 3892 "y.tab.c"
\f
+   yyvsp -= yylen;
+   yyssp -= yylen;
+-#if YYLSP_NEEDED
+-  yylsp -= yylen;
+-#endif
+-#if YYDEBUG
+-  if (yydebug)
+-    {
+-      short *yyssp1 = yyss - 1;
+-      YYFPRINTF (stderr, "state stack now");
+-      while (yyssp1 != yyssp)
+-      YYFPRINTF (stderr, " %d", *++yyssp1);
+-      YYFPRINTF (stderr, "\n");
+-    }
+-#endif
++
++  YY_STACK_PRINT (yyss, yyssp);
+   *++yyvsp = yyval;
+-#if YYLSP_NEEDED
+-  *++yylsp = yyloc;
+-#endif
++
+   /* Now `shift' the result of the reduction.  Determine what state
+      that goes to, based on the state we popped back to and the rule
+@@ -3513,11 +3906,11 @@
+   yyn = yyr1[yyn];
+-  yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
+-  if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
++  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
++  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+     yystate = yytable[yystate];
+   else
+-    yystate = yydefgoto[yyn - YYNTBASE];
++    yystate = yydefgoto[yyn - YYNTOKENS];
+   goto yynewstate;
+@@ -3530,13 +3923,13 @@
+   if (!yyerrstatus)
+     {
+       ++yynerrs;
+-
+-#ifdef YYERROR_VERBOSE
++#if YYERROR_VERBOSE
+       yyn = yypact[yystate];
+-      if (yyn > YYFLAG && yyn < YYLAST)
++      if (YYPACT_NINF < yyn && yyn < YYLAST)
+       {
+         YYSIZE_T yysize = 0;
++        int yytype = YYTRANSLATE (yychar);
+         char *yymsg;
+         int yyx, yycount;
+@@ -3545,15 +3938,15 @@
+            YYCHECK.  */
+         for (yyx = yyn < 0 ? -yyn : 0;
+              yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
+-          if (yycheck[yyx + yyn] == yyx)
++          if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+             yysize += yystrlen (yytname[yyx]) + 15, yycount++;
+-        yysize += yystrlen ("parse error, unexpected ") + 1;
+-        yysize += yystrlen (yytname[YYTRANSLATE (yychar)]);
++        yysize += yystrlen ("syntax error, unexpected ") + 1;
++        yysize += yystrlen (yytname[yytype]);
+         yymsg = (char *) YYSTACK_ALLOC (yysize);
+         if (yymsg != 0)
+           {
+-            char *yyp = yystpcpy (yymsg, "parse error, unexpected ");
+-            yyp = yystpcpy (yyp, yytname[YYTRANSLATE (yychar)]);
++            char *yyp = yystpcpy (yymsg, "syntax error, unexpected ");
++            yyp = yystpcpy (yyp, yytname[yytype]);
+             if (yycount < 5)
+               {
+@@ -3561,7 +3954,7 @@
+                 for (yyx = yyn < 0 ? -yyn : 0;
+                      yyx < (int) (sizeof (yytname) / sizeof (char *));
+                      yyx++)
+-                  if (yycheck[yyx + yyn] == yyx)
++                  if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+                     {
+                       const char *yyq = ! yycount ? ", expecting " : " or ";
+                       yyp = yystpcpy (yyp, yyq);
+@@ -3573,102 +3966,93 @@
+             YYSTACK_FREE (yymsg);
+           }
+         else
+-          yyerror ("parse error; also virtual memory exhausted");
++          yyerror ("syntax error; also virtual memory exhausted");
+       }
+       else
+-#endif /* defined (YYERROR_VERBOSE) */
+-      yyerror ("parse error");
++#endif /* YYERROR_VERBOSE */
++      yyerror ("syntax error");
+     }
+-  goto yyerrlab1;
+-/*--------------------------------------------------.
+-| yyerrlab1 -- error raised explicitly by an action |
+-`--------------------------------------------------*/
+-yyerrlab1:
++
+   if (yyerrstatus == 3)
+     {
+       /* If just tried and failed to reuse lookahead token after an
+        error, discard it.  */
+-      /* return failure if at end of input */
++      /* Return failure if at end of input.  */
+       if (yychar == YYEOF)
+-      YYABORT;
+-      YYDPRINTF ((stderr, "Discarding token %d (%s).\n",
+-                yychar, yytname[yychar1]));
++        {
++        /* Pop the error token.  */
++          YYPOPSTACK;
++        /* Pop the rest of the stack.  */
++        while (yyss < yyssp)
++          {
++            YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
++            yydestruct (yystos[*yyssp], yyvsp);
++            YYPOPSTACK;
++          }
++        YYABORT;
++        }
++
++      YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc);
++      yydestruct (yytoken, &yylval);
+       yychar = YYEMPTY;
++
+     }
+   /* Else will try to reuse lookahead token after shifting the error
+      token.  */
++  goto yyerrlab2;
+-  yyerrstatus = 3;            /* Each real token shifted decrements this */
+-  goto yyerrhandle;
++/*----------------------------------------------------.
++| yyerrlab1 -- error raised explicitly by an action.  |
++`----------------------------------------------------*/
++yyerrlab1:
++  /* Suppress GCC warning that yyerrlab1 is unused when no action
++     invokes YYERROR.  */
++#if defined (__GNUC_MINOR__) && 2093 <= (__GNUC__ * 1000 + __GNUC_MINOR__) \
++    && !defined __cplusplus
++  __attribute__ ((__unused__))
++#endif
+-/*-------------------------------------------------------------------.
+-| yyerrdefault -- current state does not do anything special for the |
+-| error token.                                                       |
+-`-------------------------------------------------------------------*/
+-yyerrdefault:
+-#if 0
+-  /* This is wrong; only states that explicitly want error tokens
+-     should shift them.  */
+-  /* If its default is to accept any token, ok.  Otherwise pop it.  */
+-  yyn = yydefact[yystate];
+-  if (yyn)
+-    goto yydefault;
+-#endif
++  goto yyerrlab2;
+ /*---------------------------------------------------------------.
+-| yyerrpop -- pop the current state because it cannot handle the |
+-| error token                                                    |
++| yyerrlab2 -- pop states until the error token can be shifted.  |
+ `---------------------------------------------------------------*/
+-yyerrpop:
+-  if (yyssp == yyss)
+-    YYABORT;
+-  yyvsp--;
+-  yystate = *--yyssp;
+-#if YYLSP_NEEDED
+-  yylsp--;
+-#endif
++yyerrlab2:
++  yyerrstatus = 3;    /* Each real token shifted decrements this.  */
+-#if YYDEBUG
+-  if (yydebug)
++  for (;;)
+     {
+-      short *yyssp1 = yyss - 1;
+-      YYFPRINTF (stderr, "Error: state stack now");
+-      while (yyssp1 != yyssp)
+-      YYFPRINTF (stderr, " %d", *++yyssp1);
+-      YYFPRINTF (stderr, "\n");
+-    }
+-#endif
++      yyn = yypact[yystate];
++      if (yyn != YYPACT_NINF)
++      {
++        yyn += YYTERROR;
++        if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
++          {
++            yyn = yytable[yyn];
++            if (0 < yyn)
++              break;
++          }
++      }
+-/*--------------.
+-| yyerrhandle.  |
+-`--------------*/
+-yyerrhandle:
+-  yyn = yypact[yystate];
+-  if (yyn == YYFLAG)
+-    goto yyerrdefault;
++      /* Pop the current state because it cannot handle the error token.  */
++      if (yyssp == yyss)
++      YYABORT;
+-  yyn += YYTERROR;
+-  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
+-    goto yyerrdefault;
++      YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
++      yydestruct (yystos[yystate], yyvsp);
++      yyvsp--;
++      yystate = *--yyssp;
+-  yyn = yytable[yyn];
+-  if (yyn < 0)
+-    {
+-      if (yyn == YYFLAG)
+-      goto yyerrpop;
+-      yyn = -yyn;
+-      goto yyreduce;
++      YY_STACK_PRINT (yyss, yyssp);
+     }
+-  else if (yyn == 0)
+-    goto yyerrpop;
+   if (yyn == YYFINAL)
+     YYACCEPT;
+@@ -3676,9 +4060,7 @@
+   YYDPRINTF ((stderr, "Shifting error token, "));
+   *++yyvsp = yylval;
+-#if YYLSP_NEEDED
+-  *++yylsp = yylloc;
+-#endif
++
+   yystate = yyn;
+   goto yynewstate;
+@@ -3698,13 +4080,15 @@
+   yyresult = 1;
+   goto yyreturn;
+-/*---------------------------------------------.
+-| yyoverflowab -- parser overflow comes here.  |
+-`---------------------------------------------*/
++#ifndef yyoverflow
++/*----------------------------------------------.
++| yyoverflowlab -- parser overflow comes here.  |
++`----------------------------------------------*/
+ yyoverflowlab:
+   yyerror ("parser stack overflow");
+   yyresult = 2;
+   /* Fall through.  */
++#endif
+ yyreturn:
+ #ifndef yyoverflow
+@@ -3713,7 +4097,9 @@
+ #endif
+   return yyresult;
+ }
+-#line 2081 "bac.y"
++
++
++#line 2097 "bac.y"
+    /*start of routines*/
+ void enter_break_block(int* break_level, break_block_type bbt)
+@@ -3810,6 +4196,9 @@
+ /*
+  *
+  *  $Log$
++ *  Revision 2.26  2004/07/21 19:17:28  bynum
++ *  correct minor errors discovered in writing the Java version of bacc
++ *
+  *  Revision 2.25  2004/04/13 18:18:40  bynum
+  *  revise grammar to handle C-style expressions
+  *
+@@ -3963,3 +4352,4 @@
+  *
+  *
+  */
++
+diff -ur bacisrc/ccomp/lex.c bacisrc.ok/ccomp/lex.c
+--- bacisrc/ccomp/lex.c        2004-04-15 13:31:23.000000000 +0200
++++ bacisrc.ok/ccomp/lex.c     2005-10-26 22:11:03.000000000 +0200
+@@ -9,9 +9,6 @@
+ #define YY_FLEX_MINOR_VERSION 5
+ #include <stdio.h>
+-#if !defined(DOS)
+-#include <unistd.h>
+-#endif
+ /* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
+@@ -25,6 +22,9 @@
+ #ifdef __cplusplus
+ #include <stdlib.h>
++#if !defined(DOS)
++#include <unistd.h>
++#endif
+ /* Use prototypes in function declarations. */
+ #define YY_USE_PROTOS
+@@ -696,7 +696,7 @@
+ YY_DECL
+       {
+       register yy_state_type yy_current_state;
+-      register char *yy_cp = NULL, *yy_bp = NULL;
++      register char *yy_cp, *yy_bp;
+       register int yy_act;
+ #line 50 "bac.l"
+@@ -1567,7 +1567,6 @@
+ #endif        /* ifndef YY_NO_UNPUT */
+-#ifndef YY_NO_INPUT
+ #ifdef __cplusplus
+ static int yyinput()
+ #else
+@@ -1639,7 +1638,7 @@
+       return c;
+       }
+-#endif /* YY_NO_INPUT */
++
+ #ifdef YY_USE_PROTOS
+ void yyrestart( FILE *input_file )
+@@ -1750,6 +1749,11 @@
+       }
++#ifndef YY_ALWAYS_INTERACTIVE
++#ifndef YY_NEVER_INTERACTIVE
++extern int isatty YY_PROTO(( int ));
++#endif
++#endif
+ #ifdef YY_USE_PROTOS
+ void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
+@@ -2216,7 +2220,7 @@
+          }
+       } while (reading);
+    }
+-   return ((esc < 256) ? esc : 0x20);
++   return esc;
+ }
+diff -ur bacisrc/ccomp/Makefile bacisrc.ok/ccomp/Makefile
+--- bacisrc/ccomp/Makefile     2004-04-15 13:31:24.000000000 +0200
++++ bacisrc.ok/ccomp/Makefile  2005-10-26 22:11:03.000000000 +0200
+@@ -1,8 +1,8 @@
+ #  Makefile for BenAri Concurrent C Compiler in C
+ #    adapted from the makefile for the BenAri Concurrent Pascal compiler in C
+-OBJS = baccutil.o date.o lex.o gram.o ../lib/readtab.o ../lib/globtabs.o
+-CFLAGS = -g -Wall
++OBJS = baccutil.o date.o lex.o gram.o 
++CFLAGS = -g -Wall 
+ #CFLAGS = -g
+ # pick which one of the following two lines you need
+ #YACC=yacc
+diff -ur bacisrc/ccomp/ytab.h bacisrc.ok/ccomp/ytab.h
+--- bacisrc/ccomp/ytab.h       2004-04-15 13:31:23.000000000 +0200
++++ bacisrc.ok/ccomp/ytab.h    2005-10-26 22:11:03.000000000 +0200
+@@ -1,64 +1,152 @@
+-#ifndef BISON_Y_TAB_H
+-# define BISON_Y_TAB_H
++/* A Bison parser, made by GNU Bison 1.875.  */
+-# ifndef YYSTYPE
+-#  define YYSTYPE int
+-#  define YYSTYPE_IS_TRIVIAL 1
+-# endif
+-# define      UNSIGNED_INT    257
+-# define      STRING  258
+-# define      RAWSTRING       259
+-# define      STRINGCONCAT    260
+-# define      STRINGCOMPARE   261
+-# define      STRINGCOPY      262
+-# define      STRINGLENGTH    263
+-# define      IDENTIFIER      264
+-# define      CHARCON 265
+-# define      INCLUDE 266
+-# define      FNSTRING        267
+-# define      NE      268
+-# define      LE      269
+-# define      GE      270
+-# define      EQ      271
+-# define      OR      272
+-# define      AND     273
+-# define      PLPL    274
+-# define      MIMI    275
+-# define      IF      276
+-# define      ELSE    277
+-# define      SWITCH  278
+-# define      CASE    279
+-# define      DEFAULT 280
+-# define      WHILE   281
+-# define      DO      282
+-# define      FOR     283
+-# define      CBEGIN  284
+-# define      CONST   285
+-# define      TYPEDEF 286
+-# define      VOID    287
+-# define      INT     288
+-# define      CHAR    289
+-# define      CONTINUE        290
+-# define      BREAK   291
+-# define      RETURN  292
+-# define      COUT    293
+-# define      LTLT    294
+-# define      ENDL    295
+-# define      CIN     296
+-# define      GTGT    297
+-# define      MAIN    298
+-# define      MONITOR 299
+-# define      INIT    300
+-# define      ATOMIC  301
+-# define      SEND    302
+-# define      RECEIVE 303
+-# define      BROADCAST       304
+-# define      EXTERN  305
+-# define      SSCANF  306
+-# define      SPRINTF 307
+-# define      LOWER_THAN_ELSE 308
++/* Skeleton parser for Yacc-like parsing with Bison,
++   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software Foundation, Inc.
++   This program is free software; you can redistribute it and/or modify
++   it under the terms of the GNU General Public License as published by
++   the Free Software Foundation; either version 2, or (at your option)
++   any later version.
++
++   This program is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++   GNU General Public License for more details.
++
++   You should have received a copy of the GNU General Public License
++   along with this program; if not, write to the Free Software
++   Foundation, Inc., 59 Temple Place - Suite 330,
++   Boston, MA 02111-1307, USA.  */
++
++/* As a special exception, when this file is copied by Bison into a
++   Bison output file, you may use that output file without restriction.
++   This special exception was added by the Free Software Foundation
++   in version 1.24 of Bison.  */
++
++/* Tokens.  */
++#ifndef YYTOKENTYPE
++# define YYTOKENTYPE
++   /* Put the tokens into the symbol table, so that GDB and other debuggers
++      know about them.  */
++   enum yytokentype {
++     UNSIGNED_INT = 258,
++     STRING = 259,
++     RAWSTRING = 260,
++     STRINGCONCAT = 261,
++     STRINGCOMPARE = 262,
++     STRINGCOPY = 263,
++     STRINGLENGTH = 264,
++     IDENTIFIER = 265,
++     CHARCON = 266,
++     INCLUDE = 267,
++     FNSTRING = 268,
++     NE = 269,
++     LE = 270,
++     GE = 271,
++     EQ = 272,
++     OR = 273,
++     AND = 274,
++     PLPL = 275,
++     MIMI = 276,
++     IF = 277,
++     ELSE = 278,
++     SWITCH = 279,
++     CASE = 280,
++     DEFAULT = 281,
++     WHILE = 282,
++     DO = 283,
++     FOR = 284,
++     CBEGIN = 285,
++     CONST = 286,
++     TYPEDEF = 287,
++     VOID = 288,
++     INT = 289,
++     CHAR = 290,
++     CONTINUE = 291,
++     BREAK = 292,
++     RETURN = 293,
++     COUT = 294,
++     LTLT = 295,
++     ENDL = 296,
++     CIN = 297,
++     GTGT = 298,
++     MAIN = 299,
++     MONITOR = 300,
++     INIT = 301,
++     ATOMIC = 302,
++     SEND = 303,
++     RECEIVE = 304,
++     BROADCAST = 305,
++     EXTERN = 306,
++     SSCANF = 307,
++     SPRINTF = 308,
++     LOWER_THAN_ELSE = 309
++   };
++#endif
++#define UNSIGNED_INT 258
++#define STRING 259
++#define RAWSTRING 260
++#define STRINGCONCAT 261
++#define STRINGCOMPARE 262
++#define STRINGCOPY 263
++#define STRINGLENGTH 264
++#define IDENTIFIER 265
++#define CHARCON 266
++#define INCLUDE 267
++#define FNSTRING 268
++#define NE 269
++#define LE 270
++#define GE 271
++#define EQ 272
++#define OR 273
++#define AND 274
++#define PLPL 275
++#define MIMI 276
++#define IF 277
++#define ELSE 278
++#define SWITCH 279
++#define CASE 280
++#define DEFAULT 281
++#define WHILE 282
++#define DO 283
++#define FOR 284
++#define CBEGIN 285
++#define CONST 286
++#define TYPEDEF 287
++#define VOID 288
++#define INT 289
++#define CHAR 290
++#define CONTINUE 291
++#define BREAK 292
++#define RETURN 293
++#define COUT 294
++#define LTLT 295
++#define ENDL 296
++#define CIN 297
++#define GTGT 298
++#define MAIN 299
++#define MONITOR 300
++#define INIT 301
++#define ATOMIC 302
++#define SEND 303
++#define RECEIVE 304
++#define BROADCAST 305
++#define EXTERN 306
++#define SSCANF 307
++#define SPRINTF 308
++#define LOWER_THAN_ELSE 309
++
++
++
++
++#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
++typedef int YYSTYPE;
++# define yystype YYSTYPE /* obsolescent; will be withdrawn */
++# define YYSTYPE_IS_DECLARED 1
++# define YYSTYPE_IS_TRIVIAL 1
++#endif
+ extern YYSTYPE yylval;
+-#endif /* not BISON_Y_TAB_H */
++
++
+diff -ur bacisrc/disasm/main.c bacisrc.ok/disasm/main.c
+--- bacisrc/disasm/main.c      2004-04-15 13:31:24.000000000 +0200
++++ bacisrc.ok/disasm/main.c   2005-10-26 22:11:03.000000000 +0200
+@@ -42,7 +42,7 @@
+    global_init(argc,argv);
+    showing_source = source_wanted;
+    while  (lc <= last_code) {
+-      if (showing_source &&(dbg[dbix].lc <= lc))
++      if (dbg[dbix].lc <= lc)
+          show_source(disasm,lc,&cur_ifile,&showing_source,&dbix);
+       if (lc >= nextblock_lc) {
+          cur_block++;
+@@ -65,6 +65,9 @@
+ /*
+  *  $Log$
++ *  Revision 1.8  2004/06/10 22:05:18  bynum
++ *  remove showing_source bug at top of main
++ *
+  *  Revision 1.7  2001/07/13 19:34:36  bynum
+  *  add globtabs.h include
+  *
+diff -ur bacisrc/interp/bainterp.c bacisrc.ok/interp/bainterp.c
+--- bacisrc/interp/bainterp.c  2004-04-15 13:31:24.000000000 +0200
++++ bacisrc.ok/interp/bainterp.c       2005-10-26 22:11:03.000000000 +0200
+@@ -777,7 +777,7 @@
+          /* ANY proc can have a return address of 0, since it would   */
+          /* have to be called by a MARKSTACK/CALL pair.               */
+          if (ptab[curpr].pc != 0){
+-            /* retrieve static link from AR[3] */
++            /* retrieve dynamic link from AR[3] */
+             h2 = s[ saddr_check(curpr,ptab[curpr].b + 3)];
+             /* h2 now points to AR[caller] */
+             assert(s[h2+1] != -1);  /* does this ever happen?? */
+@@ -1123,6 +1123,9 @@
+ /*
+  *
+  *  $Log$
++ *  Revision 2.17  2005/06/19 21:31:38  bynum
++ *  fix comment in CALL instruction
++ *
+  *  Revision 2.16  2004/04/13 18:21:38  bynum
+  *  fix cross monitor calls
+  *
+diff -ur bacisrc/interp/baiutils.c bacisrc.ok/interp/baiutils.c
+--- bacisrc/interp/baiutils.c  2004-04-15 13:31:24.000000000 +0200
++++ bacisrc.ok/interp/baiutils.c       2005-10-26 22:11:03.000000000 +0200
+@@ -86,7 +86,6 @@
+ extern proctab ptab[];     /* the process table */
+ extern CODEBLOCK cbtab[];  /* code block table */
+ extern int last_cbtab;     /* index of last element cbtab */
+-extern int main_cbix;      /* cbtab index of main proc */
+ int main_dbix;             /* dbg index of the first byte of the main proc */
+ int main_b;                /* bottom of stackframe of main proc */
+@@ -386,9 +385,19 @@
+    int active, suspended, look, add, d;
+    if (ptab[0].active)  /* proc0 becomes inactive after CODEND stmt */
+       cpr = 0;          /* until that happens, proc0 is king        */
++   else if (ptab[cpr].atomic) {  
++     if (ptab[cpr].suspend >= 0) {  // suspended + atomic ==> deadlock
++       *pst = deadlock;
++#if defined(TCL)
++       colorwindows(cpr);
++#endif
++      }  /* if cpr is atomic and suspended */
++      // if cpr is atomic and not suspended, then let it run
++      // cpr will be returned below
++   }
+    else if (*stepcnt == 0){  /* time quantum expired */
+       d = PMAXP1;             /* must switch contexts */
+-      suspended = (active = 0);
++      suspended = -1;
+       look = __random(PMAXP1);
+       add = 1 + __random(PMAXM1); /* 1 <= add < PMAXP1 */
+       while ( ((!ptab[look].active) || (ptab[look].suspend>=0) ||
+@@ -403,7 +412,7 @@
+       } /* while */
+       if (d < 0) {  /* no runnable process was found */
+          /* choose most recently seen suspended proc, else m.r.seen active */
+-         cpr = (suspended ? suspended : active );
++         cpr = ((suspended >= 0) ? suspended : active );
+          *pst = deadlock;
+ #if defined(TCL)
+          colorwindows(cpr);
+@@ -411,22 +420,10 @@
+       }
+       else {   /* we found someone to run */
+          *stepcnt = __random(STEPMAXP1);
+-         /* if the thread we picked is atomic and suspended, the */
+-         /* we have deadlock                                     */
+-         if (ptab[cpr].atomic){
+-            if (ptab[cpr].suspend >= 0) {
+-               *pst = deadlock;
+-#if defined(TCL)
+-               colorwindows(cpr);
+-#endif
+-            }  /* if cpr is suspended */
+-         }
+-         else {  /* cpr is not atomic, let it run */
+-            cpr = look; 
++         cpr = look; 
+ #if defined(TCL)
+-            colorwindows(cpr);
++         colorwindows(cpr);
+ #endif
+-         }  /* else cpr is not atomic */
+       }  /* else a runnable proc was found */
+    }  /* *stepcnt was 0, time for a context switch */
+    else /* no context switch -- count down current proc's quantum */
+@@ -516,7 +513,7 @@
+             sprintf(buf,"  %c",tmp);
+          break;
+       case  strings:
+-         sprintf(buf,"  %s",(char *) s[tmp]);
++         sprintf(buf,"  %s",(char *) &s[sta]);
+       default: ;
+    }  /* switch */
+    while (*p) p++;   /* find the end */
+@@ -765,6 +762,7 @@
+ {
+    int pc, dbgix;
+    time_t x;
++   int lno;
+    int pc_to_dbgix(int);
+ #if defined(SunOS)
+    extern time_t time(time_t*);
+@@ -773,8 +771,10 @@
+    pc = ptab[curpr].pc;
+    dbgix = pc_to_dbgix(pc);
+    time(&x);
++   lno = dbg[dbgix].flno;
++   if (lno < 0) lno = -lno;
+    sprintf(out_buf,"\n%s\n Process %d, loc %d, line %d of %s\n %s",hdr,curpr,
+-      pc,dbg[dbgix].flno,inputfile[dbg[dbgix].fix].fname,ctime(&x));
++      pc,lno,inputfile[dbg[dbgix].fix].fname,ctime(&x));
+    /* ctime inserts a newline '\n' */
+ #if defined(TCL)
+    tcl_1printf(out_buf,DATAWIN);
+@@ -823,7 +823,8 @@
+ #else
+          fputs(out_buf,stdout);
+ #endif
+-   show_vars(0,0);
++   /*show_vars(0,0);*/
++   show_vars(0,1);
+    sprintf(out_buf,
+       "\nMainproc Variables \ntype  name         stack loc  value\n");
+ #if defined(TCL)
+@@ -1123,12 +1124,6 @@
+    int ix;           /* loop counter */
+    int block0_vsize; /* size of outer block */
+-
+-   if (btab[1].vsize > STMAX - STKINCR * PMAX) {
+-      fprintf(stderr,"Stack required is too great to run. Abort!\n");
+-      exit(1);
+-   }
+-
+    charl = ' ';    /* lowest char ord */ 
+    charh = '~';    /* highest character ordinal */
+@@ -1144,14 +1139,12 @@
+       exit(1);
+    }
+    /* establish stack frame for main pgm */ 
+-   block0_vsize = btab[0].vsize;
+    ptab[0].b = main_b = block0_vsize;
+    s[main_b] = 0;                 /* main proc result */
+    s[main_b+1] = 0;               /* main proc return address */
+    s[main_b+2] = 0;               /* main proc static link */
+    s[main_b+3] = -1;              /* main proc dynamic link */
+    s[main_b+4] = btab[0].lastpar; /* tab index of main proc temp stored here */
+-   ptab[0].tabix = s[main_b+4];   /* need to store in ptab, too */
+    /* set tab index of main proc */
+    main_tix = ptab[0].tabix = s[main_b+4]; 
+    /* initialize display of main proc */
+@@ -1167,8 +1160,6 @@
+          ptab[0].t,STMAX);
+       exit(1);
+    }
+-   /* zero out the local variable storage of the main proc */
+-   for (ix = main_b+5; ix <= ptab[0].t; ix++) s[ix] = 0;
+    ptab[0].pc = tab[main_tix].adr;  /* set entry point */
+    ptab[0].active = 1;              /* main proc is active */
+    ptab[0].suspend = NOT_SUSPENDED; /* main proc is not suspended */
+@@ -1178,7 +1169,7 @@
+    ptab[0].first_spc = ptab[0].last_spc = -1;
+    /* main proc gets what's left over after allocating the stack to  */
+    /* the other procs                                                */
+-   ptab[0].stacksize = STMAX - PMAX * STKINCR;
++   ptab[0].stacksize = STMAX - block0_vsize - PMAX * STKINCR;
+    /* show main proc startup information, if necessary */
+    if (initAR_db) {
+@@ -1191,8 +1182,8 @@
+       show_AR(ptab[0].b,ptab[0].t);
+    }
+-   for (ix = 0; ix < last_dbg; ix++)
+-      if (dbg[ix].lc == cbtab[main_cbix].adr) {
++   for (ix = 0; ix <= last_dbg; ix++)
++      if (dbg[ix].lc == tab[main_tix].adr) {
+          main_dbix = ix;
+          break;
+       }
+@@ -1421,7 +1412,6 @@
+          inputfile[dbg[jx].fix].fname);
+       strcpy(buf,tmp_buf);
+    }
+-   strcat(buf,"\n");
+ }  /* list_breakpoint */
+ int get_breakindex(int ix)
+@@ -1552,10 +1542,11 @@
+    char* prompt = "(h = help)>";
+    int i, dbgix, b, t, pc, pc2, oldpc;
+    int cbix;
++   int tlno;
+    int count;
+    int dummy;
+    char prev_cmd, cmd;
+-   static int lno = -1;
++   static int lno = 1;
+    prev_cmd = 's';
+    while (reading_cmds && *singlestep) {
+@@ -1711,13 +1702,16 @@
+             break;
+          case 'w':
+             switch (word[0][1]) {
++               case '\0':
+                case '\n':
+                   pc = ptab[curpr].pc;
+                   printf("Current process # %d: %s  pc = %d  b = %d  t = %d\n",
+                      curpr,tab[ptab[curpr].tabix].name, pc,
+                      ptab[curpr].b, ptab[curpr].t);
+                   dbgix = pc_to_dbgix(pc);
+-                  printf("   line %d of %s\n",dbg[dbgix].flno,
++                  tlno = dbg[dbgix].flno;
++                  if (tlno < 0) tlno = - tlno;
++                  printf("   line %d of %s\n",tlno,
+                      inputfile[dbg[dbgix].fix].fname);
+                   break;
+                case 'c':
+@@ -1868,6 +1862,7 @@
+          if (i == parm_cnt) return i;
+          op_addr = saddr_check(curpr,s[parm_offset]);
+          parm_offset++;
++         tempbuf[0] = '\0';
+          switch (*fp) {
+             case 'd': 
+                if (next_word(tempbuf,&sp)< 0) return i;
+@@ -1937,14 +1932,16 @@
+    i = 0;
+    parm_offset = scan_strix + 1;
+    while(*fp) {
+-      while((*fp)&&(*fp != '%')) {
++      while(*fp) {
+          /* copy non-format stuff directly into output buffer */
++         if (*fp == '\\') fp++;  // copy escaped char directly
++         else if (*fp == '%') break;
+          *bp = *fp;
+          fp++; bp++;
+       }
+       /* if there's format left, use it */
+       if (*fp == '%') {
+-         if (i == parm_cnt) return;
++         if (i > parm_cnt) break;
+          /* must check for %q -- it's a BACI special */
+          if (*(fp+1) == 'q') {
+             if (i <= parm_cnt)  {
+@@ -2435,145 +2432,5 @@
+ /*
+- *
+- *  $Log$
+- *  Revision 2.18  2001/07/21 19:28:59  bynum
+- *  remove atoi from SunOS extern declarations
+- *
+- *  Revision 2.17  2001/07/20 13:17:40  bynum
+- *  surround atoi declaration with if !defined(DOS)
+- *
+- *  Revision 2.16  2001/07/20 13:12:33  bynum
+- *  change to __randomize()
+- *
+- *  Revision 2.15  2001/07/13 19:35:43  bynum
+- *  add stdlib.h include for exit, add globtabs.h include
+- *
+- *  Revision 2.14  2001/03/15 17:53:36  bynum
+- *  in chooseproc, change add = 1 + __random(PMAXM1)
+- *
+- *  Revision 2.13  2000/08/04 17:35:41  bynum
+- *  replace last_dbg_ix with last_dbg
+- *
+- *  Revision 2.12  2000/08/03 21:11:10  bynum
+- *  change all random and urandom calls to __random and __urandom
+- *
+- *  Revision 2.11  2000/06/14 20:40:26  bynum
+- *  To debugger, add 'r' cmd to reload pcode file and 'o' cmd to load a
+- *  new pcode file
+- *
+- *  Revision 2.10  2000/06/07 17:48:39  bynum
+- *  incorporate the code from the BACI GUI directory
+- *
+- *  Revision 1.21  1999/09/07 16:30:59  bynum
+- *  add case for global vbls in get_stack_addr
+- *
+- *  Revision 1.20  1999/08/12 15:33:23  bynum
+- *  add declaration of extern time() in a #if defined(SunOS) bracket
+- *
+- *  Revision 1.19  1999/08/12 14:45:33  bynum
+- *  In TCL verrsion, change to statically allocated infile array, add
+- *  TCLread_file_info proc to read the file info into the static array
+- *  (replacing the library read_file_info proc), fix errors in get_stac_addr
+- *  proc (thanks to Brad Taylor), add write_header timestamp proc, delete
+- *  stopcmd proc, in runinit add while (Tk_DoOneEvent(TK_NO_WAIT)); loops
+- *  to ensure that X events are taken care of (avoids SEGVs)
+- *
+- *  Revision 1.18  1999/07/29 16:14:25  bynum
+- *  change runinit, init_interperet, global_init, global_tcl_init so that
+- *  a gui user can rerun a pcode file, add checks of calculated ptab data
+- *  in init_interpreter, allow inclusion of .pco in filename
+- *
+- *  Revision 1.17  1999/07/28 19:19:39  bynum
+- *  add commenting, add breakpoint handling procs, fix errors in user
+- *  interface
+- *
+- *  Revision 1.16  1998/08/18 14:08:43  bynum
+- *  remove curpr global, move into parmlist of many functions, add
+- *  functions to display arrays, add init_process_displays to fix
+- *  global scope bug
+- *
+- *  Revision 1.15  1998/07/16 18:24:27  bynum
+- *  add code to support handling of breakpoints in the gui version
+- *
+- *  Revision 1.14  1998/06/26 15:46:05  bynum
+- *  switch from insertFile call in runinit to loadAllFiles to implement loading
+- *  multiple files
+- *
+- *  Revision 1.13  1998/06/26 13:15:49  bynum
+- *  add parms to chooseproc, switch from tcl_printf(*,0) to tcl_1printf(*,0)
+- *
+- *  Revision 1.12  1998/06/05 12:25:54  bynum
+- *  get rid of tcl_writeln proc, switch from tcl_printf to tcl_1printf
+- *  for output to proc0 window, use automatically allocated buffers
+- *  in the tcl_printf, tcl_1printf, tcl_putnum, tcl_putchar procs
+- *  (too many people using tcl_buffer!!)
+- *
+- *  Revision 1.11  1998/05/29 19:35:11  bynum
+- *  change to pc_to_dbix() call from current_dbix(), implement setting
+- *  breakpoints by source lines in debugger, implement listing source file
+- *  in debugger
+- *
+- *  Revision 1.10  1998/05/28 16:23:01  bynum
+- *  move tcl_ procs from main.c, add if defined(TCL) code, change
+- *  debugging output to include pnn proc no, add getInfile proc
+- *
+- *  Revision 1.9  1998/05/26 13:36:33  bynum
+- *  incorporate tcl_printf() and other tcl functions from main.c
+- *  bring Vince's code into agreement with the 5/98 BACI code so that
+- *  both gui and std interpreter can be built from the same source files
+- *
+- * Revision 2.7  1997/10/24  09:34:35  bynum
+- * add semicolon to empty default case, fix off-by-one in clock_tick(xpc)
+- *
+- * Revision 2.6  1997/10/23  13:26:47  bynum
+- * change breakpoint machinery to display a "logical" breakpoint index
+- *
+- * Revision 2.5  1997/10/19  07:06:06  bynum
+- * make sscanf declaration acceptable to LINUX
+- *
+- *  Revision 2.4  1997/09/05 16:39:02  bynum
+- *  fix cpfmt() proc
+- *
+- * Revision 2.3  1997/09/04  10:57:43  bynum
+- * add sprintf, sscanf
+- *
+- * Revision 2.2  1997/07/10  17:20:14  bynum
+- * improve write_process_table output
+- *
+- * Revision 2.1  1997/07/02  13:41:15  bynum
+- * move interpreter utils from bainterp.c here, add debugger utils
+- *
+- * Revision 2.0  1997/06/30  06:59:21  bynum
+- * first version with level 0 globals
+- *
+- * Revision 1.8  1997/03/25  14:55:59  bynum
+- * ncorporate name changes from the include directory, add fprintf prototype
+- *
+- * Revision 1.7  1996/03/07  09:32:41  bynum
+- * remove 'filename_line' declaration
+- *
+- * Revision 1.6  1995/11/20  16:07:26  bynum
+- * change "magic phrase" that intepreter looks for, change interpreter
+- * flag
+- *
+- * Revision 1.5  1995/09/07  14:53:40  bynum
+- * remove baiglobs.h include, tweak pgm name flag slightly
+- *
+- * Revision 1.4  1995/09/07  14:42:00  bynum
+- * move code to read the global tables to the ../lib/read_tables.c file,
+- * change includes to conform to new structure of ../include directory
+- * change from K&R proc headers to ANSI C headers
+- *
+- * Revision 1.3  1995/08/29  15:57:20  bynum
+- * add -p option message in 'show_help', add code to create the interp
+- * program name string automatically from the date string
+- *
+- * Revision 1.2  1995/07/06  14:33:15  bynum
+- * add 'atomic' field
+- *
+- * Revision 1.1  1995/06/22  06:51:31  bynum
+- * Initial revision
+- *
+- *
++ *  $Id$
+  */
+diff -ur bacisrc/interp/main.c bacisrc.ok/interp/main.c
+--- bacisrc/interp/main.c      2004-04-15 13:31:24.000000000 +0200
++++ bacisrc.ok/interp/main.c   2005-10-26 22:11:03.000000000 +0200
+@@ -19,7 +19,7 @@
+ #if defined(TCL)
+    /* GUI interpreter */
+ #include "tcl.h"
+-#include <tk.h>
++#include "tk.h"
+ #include <stdlib.h>
+ #include <string.h>
+ #include "../include/bacicnty.h"
+@@ -107,21 +107,21 @@
+       exit(1);
+    }
+    /* Create commands and common variables */
+-   Tcl_CreateCommand(interp, "run", runinit, (ClientData) NULL, 
++   Tcl_CreateCommand(interp, "run", (Tcl_CmdProc *) runinit, (ClientData) NULL, 
+       (Tcl_CmdDeleteProc *) NULL);
+-   Tcl_CreateCommand(interp, "getInfile", getInfile, (ClientData) NULL, 
+-      (Tcl_CmdDeleteProc *) NULL);
+-   Tcl_CreateCommand(interp, "getBreakpoint", getBreakpoint, (ClientData) NULL, 
+-      (Tcl_CmdDeleteProc *) NULL);
+-   Tcl_CreateCommand(interp, "setBreakpoint", setBreakpoint, (ClientData) NULL, 
+-      (Tcl_CmdDeleteProc *) NULL);
+-   Tcl_CreateCommand(interp, "unsetBreakpoint", unsetBreakpoint, 
++   Tcl_CreateCommand(interp, "getInfile", (Tcl_CmdProc*) getInfile, 
++      (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL);
++   Tcl_CreateCommand(interp, "getBreakpoint", (Tcl_CmdProc *) getBreakpoint, 
++      (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL);
++   Tcl_CreateCommand(interp, "setBreakpoint", (Tcl_CmdProc *) setBreakpoint, 
++      (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL);
++   Tcl_CreateCommand(interp, "unsetBreakpoint", (Tcl_CmdProc *) unsetBreakpoint, 
+       (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL);
+-   Tcl_CreateCommand(interp, "LinenoToPC", LinenoToPC, 
++   Tcl_CreateCommand(interp, "LinenoToPC", (Tcl_CmdProc *) LinenoToPC, 
+       (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL);
+-   Tcl_CreateCommand(interp, "LineHasBreak", LineHasBreak, 
++   Tcl_CreateCommand(interp, "LineHasBreak", (Tcl_CmdProc *) LineHasBreak, 
+       (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL);
+-   Tcl_CreateCommand(interp, "WriteData", WriteData, 
++   Tcl_CreateCommand(interp, "WriteData", (Tcl_CmdProc *) WriteData, 
+       (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL);
+   
+    Tcl_LinkVar(interp, "tinitAR_db", (char *) &initAR_db, TCL_LINK_INT);
+diff -ur bacisrc/interp/Makefile bacisrc.ok/interp/Makefile
+--- bacisrc/interp/Makefile    2004-04-15 13:31:24.000000000 +0200
++++ bacisrc.ok/interp/Makefile 2005-10-26 22:11:03.000000000 +0200
+@@ -1,15 +1,34 @@
+ # makefile for BenAri Concurrent Pascal PCODE Interpreter in C
+ #
++##  Particularize to your Tcl, Tk installation
++##  For Suse
++LTCL = -ltcl8.4
++LTK = -ltk8.4
++TCLINCDIR = $(HOME)/tcl8.4.10/generic 
++TKINCDIR  = $(HOME)/tk8.4.10/generic
++## For RedHat workstation 3
++#LTCL = -ltcl8.3
++#LTK = -ltk8.3
++#TCLINCDIR = /usr/local/tcl/generic
++#TKINCDIR  = /usr/local/tk/generic
++## For Cygwin
++#LTCL = -ltcl8.4
++#LTK = -ltk8.4
++#TCLINCDIR = /usr/include/
++#TKINCDIR  = /usr/include
++#
++#
+ OBJS=main.o bainterp.o baiutils.o random.o date.o ../lib/globtabs.o
+ INCDIR = ../include
+ INCLS=$(INCDIR)/globdata.h $(INCDIR)/bacicnty.h \
+-         $(INCDIR)/disutils.h $(INCDIR)/genutil.h $(INCDIR)/readtab.h random.h
++         $(INCDIR)/disutils.h $(INCDIR)/genutil.h $(INCDIR)/readtab.h random.h 
+ CC=gcc
++CFLAGS=-Wall -g $(DEFINES) -I$(INCDIR)
+ #CC=cc
+-CFLAGS= -Wall -g
+-#CFLAGS=-Wall -g $(DEFINES) -I$(INCDIR)
++#CFLAGS= -Wall -g
+ #CFLAGS=-g $(DEFINES) -I$(INCDIR)
+ LIBDIR= ../lib
++UNAMECMD=`uname -s | sed -e 's/CYGWIN_.*/CYGWIN/'`
+ which:
+       @echo "What do you want to make for `uname -s`?"
+@@ -19,32 +38,38 @@
+ gui:
+       make clean
+-      make "OS=`uname -s`" whichgui
++      make "OS=$(UNAMECMD)" whichgui
+ whichgui:
+       $(LIBDIR)/checkLastOS '*.o'
+       make $(OS)gui
+-Darwingui:
+-      make "DEFINES=-DMACOSX -DTCL" "LLIBS=-ltk -ltcl -lX11 -ldl -lm" \
+-      "INCDIRS=-I$(INCDIR)" \
++CYGWINgui:
++      make "DEFINES=-DLinux -DTCL" "LLIBS=$(LTCL) $(LTK) -lX11 -lm" \
++      "INCDIRS= -I$(INCDIR) -I$(TCLINCDIR) -I$(TKINCDIR)" \
+       "LDFLAGS= -L/usr/lib -L/usr/local/lib -L/usr/X11R6/lib" \
+       guibainterp
+-Linuxgui:
+-      make "DEFINES=-DLinux -DTCL" "LLIBS=-ltk -ltcl -lX11 -ldl -lm" \
+-      "INCDIRS=-I$(INCDIR)" \
++Darwingui:
++      make "DEFINES=-DMACOSX -DTCL" "LLIBS=$(LTCL) $(LTK) -lX11 -ldl -lm" \
++      "INCDIRS= -I$(INCDIR) -I$(TCLINCDIR) -I$(TKINCDIR)" \
+       "LDFLAGS= -L/usr/lib -L/usr/local/lib -L/usr/X11R6/lib" \
+       guibainterp
+-SunOSgui:
+-      make "DEFINES=-DSunOS -DTCL -DTcl7_5" "LLIBS=-ltk8.0 -ltcl8.0 -lX11 -lm" \
++IRIXgui:
++      make "DEFINES=-DIRIX -DTCL" "LLIBS=-ltkx -ltclx -lX11 -lm" \
+       "INCDIRS=-I$(INCDIR) -I/usr/local/include" \
+       "LDFLAGS= -L/usr/lib -L/usr/local/lib -L/usr/X11R6/lib" \
+       guibainterp
+-IRIXgui:
+-      make "DEFINES=-DIRIX -DTCL" "LLIBS=-ltkx -ltclx -lX11 -lm" \
++Linuxgui:
++      make "DEFINES=-DLinux -DTCL" "LLIBS=$(LTCL) $(LTK) -lX11 -lm" \
++      "INCDIRS= -I$(INCDIR) -I$(TCLINCDIR) -I$(TKINCDIR)" \
++      "LDFLAGS= -L/usr/lib -L/usr/local/lib -L/usr/X11R6/lib" \
++      guibainterp
++
++SunOSgui:
++      make "DEFINES=-DSunOS -DTCL -DTcl7_5" "LLIBS=-ltk8.0 -ltcl8.0 -lX11 -lm" \
+       "INCDIRS=-I$(INCDIR) -I/usr/local/include" \
+       "LDFLAGS= -L/usr/lib -L/usr/local/lib -L/usr/X11R6/lib" \
+       guibainterp
+@@ -102,29 +127,7 @@
+       rm -f main.o bainterp.o baiutils.o random.o ../lib/makedate
+ # 
+-# 
+-#   $Log$
+-#   Revision 2.0  2000/06/07 17:54:14  bynum
+-#   switch to Makefile from the BACI GUI directory
+-#
+-#   Revision 1.1  1999/08/12 15:57:22  bynum
+-#   Initial revision
+-#
+-# Revision 1.5  1996/03/07  09:38:07  bynum
+-# correct 'makedate' call
+-#
+-# Revision 1.4  1996/03/07  09:33:36  bynum
+-# change file name to 'Makefile', add 'date.o' target
+-#
+-# Revision 1.3  1995/09/14  13:36:42  bynum
+-# add cd to lib directory in bainterp target
+-#
+-# Revision 1.2  1995/09/07  14:45:03  bynum
+-# add references to ../lib directory and add library reference in
+-# the final compilation step, change bpcinter.c to main.c
+-#
+-# Revision 1.1  1995/06/22  06:49:19  bynum
+-# Initial revision
+-#
+-# 
++#   $Id$
+ #
++
++
+diff -ur bacisrc/lib/compdata.c bacisrc.ok/lib/compdata.c
+--- bacisrc/lib/compdata.c     2004-04-15 13:31:23.000000000 +0200
++++ bacisrc.ok/lib/compdata.c  2005-10-26 22:11:03.000000000 +0200
+@@ -18,7 +18,6 @@
+ int   errcount;   /* count of parsing errors */
+-int   first_stringerr;
+ int   first_parmcterr;
+ /* for the expression subtrees of the parsetree */
+@@ -28,6 +27,9 @@
+ /*
+  *
+  *  $Log$
++ *  Revision 1.9  2004/07/21 19:13:03  bynum
++ *  get rid of first_stringerr var
++ *
+  *  Revision 1.8  2001/07/21 17:26:12  bynum
+  *  replace ../include in bacicnty.h include
+  *
+diff -ur bacisrc/lib/computil.c bacisrc.ok/lib/computil.c
+--- bacisrc/lib/computil.c     2004-04-15 13:31:23.000000000 +0200
++++ bacisrc.ok/lib/computil.c  2005-10-26 22:11:03.000000000 +0200
+@@ -103,7 +103,7 @@
+    j = btab[display[vislevel]].last; /* name is at "vislevel" static level */
+    l = j;
+    while (strcmp(tab[j].name,tmpid)) j = tab[j].link;
+-   if ((j != 0)&&(tab[j].lev == vislevel)) {
++   if (j != 0) {
+       sprintf(ubuf,"Duplicate identifier '%s' at level %d",tmpid,vislevel);
+       yyerror(ubuf);
+       return(0);
+@@ -257,6 +257,7 @@
+       if (expr[i].free){
+          expr[i].obj = constant;
+          expr[i].typ = notyp;
++         expr[i].tix = -1;
+          expr[i].adr = expr[i].ref = 0; 
+          expr[i].lev = expr[i].normal = expr[i].result_used = 0;
+          expr[i].arelt = expr[i].isval = expr[i].free = 0;
+@@ -713,9 +714,15 @@
+    /* was stored                                                     */
+ {
++   char buf[512];
+    extern char laststring[];
+    int t;
+    int slen, oldsx, newsx;
++   int i;
++   int len = strlen(str);
++   /* first ASCII-ize the string */
++   for (i = 0; i< len; i++)
++      if (!isascii(str[i])) str[i] = '?';
+    if (*sx > 0) {
+       t = 0;
+       while (t < *sx) {
+@@ -775,7 +782,7 @@
+    char name[30];
+    char what[30];
+    name[0] = '\0';
+-   for(ix = 0; ix < last_tab; ix++) {
++   for(ix = 0; ix <= last_tab; ix++) {
+       switch (tab[ix].obj) {
+          case ext_procedure:
+             strcpy(name,tab[ix].name);
+@@ -892,6 +899,23 @@
+    fclose(pcode);
+ }  /*  of write_pcode */ 
++void check_expr_list()
++{
++   extern int last_predeclared;
++   int i;
++   printf("List of in-use exprs\n");
++   for (i = 0; i < EXPRSIZE; i++)
++      if (!expr[i].free) {
++         printf("Expression %d in use:  obj %s  type %s  tix %d name %s\n",
++            i,objnames[expr[i].obj],typenames[expr[i].typ],
++            expr[i].tix-last_predeclared,
++            tab[expr[i].tix].name);
++         printf("    adr %x   ref %d  lev %d  arelt %d  isval %d  result_used %d\n",
++            expr[i].adr,expr[i].ref,expr[i].lev,expr[i].arelt,expr[i].isval,
++            expr[i].result_used);
++      }
++}
++
+   /* main pgm for the BenAri Compilers */
+ int main(int argc,char **argv)
+@@ -920,12 +944,16 @@
+    }
+    write_pcode(pcode_fname,comp_pname,filename_line);
+    fprintf(stderr,"Compilation listing is stored in %s\n",list_fname);
++   /*check_expr_list(); uncomment to check for non-free expr's */
+    return(retval);
+ }
+ /*
+  *
+  *  $Log$
++ *  Revision 1.22  2004/07/21 19:10:18  bynum
++ *  correct minor errors, add check_expr_list(), ascii-ize input strings
++ *
+  *  Revision 1.21  2003/11/01 13:48:08  bynum
+  *  Moti's bug fix for read(a[i])
+  *
+diff -ur bacisrc/lib/disutils.c bacisrc.ok/lib/disutils.c
+--- bacisrc/lib/disutils.c     2004-04-15 13:31:23.000000000 +0200
++++ bacisrc.ok/lib/disutils.c  2005-10-26 22:11:03.000000000 +0200
+@@ -14,7 +14,6 @@
+ int last_cbtab;
+ extern int last_tab;
+-int main_cbix;    /* index of the cbtab[] entry for main proc */
+ int build_cbtab()
+    /* 
+@@ -50,11 +49,6 @@
+          }
+       }
+    }
+-   for (ix = 0; ix < cbix; ix++)
+-      if (tab[cbtab[ix].tix].obj == mainproc) {
+-         main_cbix = ix;
+-         break;
+-      }
+    return cbix;
+ }  /* build_cbtab */
+@@ -85,10 +79,16 @@
+ {
+    int jx;
+    int ix;
++   int mon;
+    if ((offset == 0)&&(level > 0))
+       return tabix;   /* function return value */
+    ix = find_var(tabix,level,offset);
+    if (ix > 0) return ix;
++   mon = tab[tabix].mon;
++   if (mon > 0) { // if a mon proc, then look in the monitor next
++      ix = find_var(mon,level,offset);
++      if (ix > 0) return ix;
++   }
+    for (jx = 0; jx <= last_cbtab; jx++) {
+       if ((tab[cbtab[jx].tix].lev < tab[tabix].lev) ||
+           (tab[cbtab[jx].tix].obj == outerblock))  {
+@@ -328,7 +328,7 @@
+       strcat(dl,"WRITELN\n");
+       break;  /* 63 */
+   case WHICH_PROC:   /* 71, which_proc */
+-      strcat(dl,"WHICHPROC, push # current process\n");
++      strcat(dl,"WHICH_PROC, push # current process\n");
+       break;
+   case SUSPEND:   /* 72, suspend */
+       strcat(dl,"SUSPEND current process\n");
+@@ -435,6 +435,15 @@
+ /*
+  *  $Log$
++ *  Revision 1.15  2005/06/19 21:24:01  bynum
++ *  get rid of main_cbix variable
++ *
++ *  Revision 1.14  2005/06/19 20:59:08  bynum
++ *  correct WHICH_PROC output
++ *
++ *  Revision 1.13  2004/07/21 19:12:10  bynum
++ *  add check of enclosing monitor when required in search_var()
++ *
+  *  Revision 1.12  2003/05/07 21:54:47  bynum
+  *  change disassembler output slightly
+  *
+diff -ur bacisrc/lib/globdata.c bacisrc.ok/lib/globdata.c
+--- bacisrc/lib/globdata.c     2004-04-15 13:31:23.000000000 +0200
++++ bacisrc.ok/lib/globdata.c  2005-10-26 22:11:03.000000000 +0200
+@@ -15,7 +15,7 @@
+    /* used with -c option when there is no main() proc */
+ TYPENAME typenames[]    = {"notyp","int","bool","char","bsem",
+-                           "sem","cond","array"};
++                           "sem","cond","array","","","rawstr","string"};
+ OBJNAME objnames[]      = {"constant","variable","type","procedure",
+                            "function","monitor"};
+@@ -26,6 +26,12 @@
+ /*
+  *
+  *  $Log$
++ *  Revision 1.11  2005/10/26 20:04:48  bynum
++ *  change typenames entries
++ *
++ *  Revision 1.10  2005/06/19 21:01:37  bynum
++ *  add rawstring and string to typenames array
++ *
+  *  Revision 1.9  2001/07/21 17:28:52  bynum
+  *  add ../include to bacicnty.h include
+  *
This page took 0.659649 seconds and 4 git commands to generate.