LCOV - code coverage report
Current view: top level - home/branden/src/GIT/groff/build/src/preproc/pic - pic.cpp (source / functions) Hit Total Coverage
Test: GNU roff Lines: 368 656 56.1 %
Date: 2026-01-16 17:51:41 Functions: 2 2 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* A Bison parser, made by GNU Bison 3.7.5.  */
       2             : 
       3             : /* Bison implementation for Yacc-like parsers in C
       4             : 
       5             :    Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation,
       6             :    Inc.
       7             : 
       8             :    This program is free software: you can redistribute it and/or modify
       9             :    it under the terms of the GNU General Public License as published by
      10             :    the Free Software Foundation, either version 3 of the License, or
      11             :    (at your option) any later version.
      12             : 
      13             :    This program is distributed in the hope that it will be useful,
      14             :    but WITHOUT ANY WARRANTY; without even the implied warranty of
      15             :    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      16             :    GNU General Public License for more details.
      17             : 
      18             :    You should have received a copy of the GNU General Public License
      19             :    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
      20             : 
      21             : /* As a special exception, you may create a larger work that contains
      22             :    part or all of the Bison parser skeleton and distribute that work
      23             :    under terms of your choice, so long as that work isn't itself a
      24             :    parser generator using the skeleton or a modified version thereof
      25             :    as a parser skeleton.  Alternatively, if you modify or redistribute
      26             :    the parser skeleton itself, you may (at your option) remove this
      27             :    special exception, which will cause the skeleton and the resulting
      28             :    Bison output files to be licensed under the GNU General Public
      29             :    License without this special exception.
      30             : 
      31             :    This special exception was added by the Free Software Foundation in
      32             :    version 2.2 of Bison.  */
      33             : 
      34             : /* C LALR(1) parser skeleton written by Richard Stallman, by
      35             :    simplifying the original so-called "semantic" parser.  */
      36             : 
      37             : /* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
      38             :    especially those whose name start with YY_ or yy_.  They are
      39             :    private implementation details that can be changed or removed.  */
      40             : 
      41             : /* All symbols defined below should begin with yy or YY, to avoid
      42             :    infringing on user name space.  This should be done even for local
      43             :    variables, as they might otherwise be expanded by user macros.
      44             :    There are some unavoidable exceptions within include files to
      45             :    define necessary library symbols; they are noted "INFRINGES ON
      46             :    USER NAME SPACE" below.  */
      47             : 
      48             : /* Identify Bison output, and Bison version.  */
      49             : #define YYBISON 30705
      50             : 
      51             : /* Bison version string.  */
      52             : #define YYBISON_VERSION "3.7.5"
      53             : 
      54             : /* Skeleton name.  */
      55             : #define YYSKELETON_NAME "yacc.c"
      56             : 
      57             : /* Pure parsers.  */
      58             : #define YYPURE 0
      59             : 
      60             : /* Push parsers.  */
      61             : #define YYPUSH 0
      62             : 
      63             : /* Pull parsers.  */
      64             : #define YYPULL 1
      65             : 
      66             : 
      67             : 
      68             : 
      69             : /* First part of user prologue.  */
      70             : #line 19 "../src/preproc/pic/pic.ypp"
      71             : 
      72             : #ifdef HAVE_CONFIG_H
      73             : #include <config.h>
      74             : #endif
      75             : 
      76             : #include <assert.h>
      77             : #include <errno.h> // EDOM, ERANGE, errno
      78             : #include <math.h> // atan2(), cos(), floor(), fmod(), log10(), pow(),
      79             :                   // sin(), sqrt()
      80             : #include <stdcountof.h>
      81             : #include <stdio.h> // fflush(), fprintf(), snprintf(), sprintf(), stderr
      82             : #include <stdlib.h> // rand(), srand(), system()
      83             : #include <string.h> // strcat(), strchr(), strcmp(), strcpy(), strlen()
      84             : 
      85             : #ifdef NEED_DECLARATION_RAND
      86             : #undef rand
      87             : extern "C" {
      88             :   int rand();
      89             : }
      90             : #endif /* NEED_DECLARATION_RAND */
      91             : 
      92             : #ifdef NEED_DECLARATION_SRAND
      93             : #undef srand
      94             : extern "C" {
      95             : #ifdef RET_TYPE_SRAND_IS_VOID
      96             :   void srand(unsigned int);
      97             : #else
      98             :   int srand(unsigned int);
      99             : #endif
     100             : }
     101             : #endif /* NEED_DECLARATION_SRAND */
     102             : 
     103             : #include "pic.h"
     104             : #include "ptable.h"
     105             : #include "object.h"
     106             : 
     107             : extern int delim_flag;
     108             : extern void copy_rest_thru(const char *, const char *);
     109             : extern void copy_file_thru(const char *, const char *, const char *);
     110             : extern void push_body(const char *);
     111             : extern void do_for(char *var, double from, double to,
     112             :                    int by_is_multiplicative, double by, char *body);
     113             : extern void do_lookahead();
     114             : 
     115             : /* Maximum number of characters produced by printf("%g") */
     116             : #define GDIGITS 14
     117             : 
     118             : int yylex();
     119             : void yyerror(const char *);
     120             : 
     121             : void reset(const char *nm);
     122             : void reset_all();
     123             : 
     124             : place *lookup_label(const char *);
     125             : void define_label(const char *label, const place *pl);
     126             : 
     127             : direction current_direction;
     128             : position current_position;
     129             : 
     130             : implement_ptable(place)
     131             : 
     132             : PTABLE(place) top_table;
     133             : 
     134             : PTABLE(place) *current_table = &top_table;
     135             : saved_state *current_saved_state = 0 /* nullptr */;
     136             : 
     137             : object_list olist;
     138             : 
     139             : const char *ordinal_postfix(int n);
     140             : const char *object_type_name(object_type type);
     141             : char *format_number(const char *fmt, double n);
     142             : char *do_sprintf(const char *fmt, const double *v, int nv);
     143             : 
     144             : 
     145             : #line 146 "src/preproc/pic/pic.cpp"
     146             : 
     147             : # ifndef YY_CAST
     148             : #  ifdef __cplusplus
     149             : #   define YY_CAST(Type, Val) static_cast<Type> (Val)
     150             : #   define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val)
     151             : #  else
     152             : #   define YY_CAST(Type, Val) ((Type) (Val))
     153             : #   define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val))
     154             : #  endif
     155             : # endif
     156             : # ifndef YY_NULLPTR
     157             : #  if defined __cplusplus
     158             : #   if 201103L <= __cplusplus
     159             : #    define YY_NULLPTR nullptr
     160             : #   else
     161             : #    define YY_NULLPTR 0
     162             : #   endif
     163             : #  else
     164             : #   define YY_NULLPTR ((void*)0)
     165             : #  endif
     166             : # endif
     167             : 
     168             : /* Use api.header.include to #include this header
     169             :    instead of duplicating it here.  */
     170             : #ifndef YY_YY_SRC_PREPROC_PIC_PIC_HPP_INCLUDED
     171             : # define YY_YY_SRC_PREPROC_PIC_PIC_HPP_INCLUDED
     172             : /* Debug traces.  */
     173             : #ifndef YYDEBUG
     174             : # define YYDEBUG 0
     175             : #endif
     176             : #if YYDEBUG
     177             : extern int yydebug;
     178             : #endif
     179             : 
     180             : /* Token kinds.  */
     181             : #ifndef YYTOKENTYPE
     182             : # define YYTOKENTYPE
     183             :   enum yytokentype
     184             :   {
     185             :     YYEMPTY = -2,
     186             :     YYEOF = 0,                     /* "end of file"  */
     187             :     YYerror = 256,                 /* error  */
     188             :     YYUNDEF = 257,                 /* "invalid token"  */
     189             :     LABEL = 258,                   /* LABEL  */
     190             :     VARIABLE = 259,                /* VARIABLE  */
     191             :     NUMBER = 260,                  /* NUMBER  */
     192             :     TEXT = 261,                    /* TEXT  */
     193             :     COMMAND_LINE = 262,            /* COMMAND_LINE  */
     194             :     DELIMITED = 263,               /* DELIMITED  */
     195             :     ORDINAL = 264,                 /* ORDINAL  */
     196             :     TH = 265,                      /* TH  */
     197             :     LEFT_ARROW_HEAD = 266,         /* LEFT_ARROW_HEAD  */
     198             :     RIGHT_ARROW_HEAD = 267,        /* RIGHT_ARROW_HEAD  */
     199             :     DOUBLE_ARROW_HEAD = 268,       /* DOUBLE_ARROW_HEAD  */
     200             :     LAST = 269,                    /* LAST  */
     201             :     BOX = 270,                     /* BOX  */
     202             :     CIRCLE = 271,                  /* CIRCLE  */
     203             :     ELLIPSE = 272,                 /* ELLIPSE  */
     204             :     ARC = 273,                     /* ARC  */
     205             :     LINE = 274,                    /* LINE  */
     206             :     POLYGON = 275,                 /* POLYGON  */
     207             :     ARROW = 276,                   /* ARROW  */
     208             :     MOVE = 277,                    /* MOVE  */
     209             :     SPLINE = 278,                  /* SPLINE  */
     210             :     HEIGHT = 279,                  /* HEIGHT  */
     211             :     RADIUS = 280,                  /* RADIUS  */
     212             :     FIGNAME = 281,                 /* FIGNAME  */
     213             :     WIDTH = 282,                   /* WIDTH  */
     214             :     DIAMETER = 283,                /* DIAMETER  */
     215             :     UP = 284,                      /* UP  */
     216             :     DOWN = 285,                    /* DOWN  */
     217             :     RIGHT = 286,                   /* RIGHT  */
     218             :     LEFT = 287,                    /* LEFT  */
     219             :     FROM = 288,                    /* FROM  */
     220             :     TO = 289,                      /* TO  */
     221             :     AT = 290,                      /* AT  */
     222             :     WITH = 291,                    /* WITH  */
     223             :     BY = 292,                      /* BY  */
     224             :     THEN = 293,                    /* THEN  */
     225             :     SOLID = 294,                   /* SOLID  */
     226             :     DOTTED = 295,                  /* DOTTED  */
     227             :     DASHED = 296,                  /* DASHED  */
     228             :     CHOP = 297,                    /* CHOP  */
     229             :     SAME = 298,                    /* SAME  */
     230             :     INVISIBLE = 299,               /* INVISIBLE  */
     231             :     LJUST = 300,                   /* LJUST  */
     232             :     RJUST = 301,                   /* RJUST  */
     233             :     ABOVE = 302,                   /* ABOVE  */
     234             :     BELOW = 303,                   /* BELOW  */
     235             :     OF = 304,                      /* OF  */
     236             :     THE = 305,                     /* THE  */
     237             :     WAY = 306,                     /* WAY  */
     238             :     BETWEEN = 307,                 /* BETWEEN  */
     239             :     AND = 308,                     /* AND  */
     240             :     HERE = 309,                    /* HERE  */
     241             :     DOT_N = 310,                   /* DOT_N  */
     242             :     DOT_E = 311,                   /* DOT_E  */
     243             :     DOT_W = 312,                   /* DOT_W  */
     244             :     DOT_S = 313,                   /* DOT_S  */
     245             :     DOT_NE = 314,                  /* DOT_NE  */
     246             :     DOT_SE = 315,                  /* DOT_SE  */
     247             :     DOT_NW = 316,                  /* DOT_NW  */
     248             :     DOT_SW = 317,                  /* DOT_SW  */
     249             :     DOT_C = 318,                   /* DOT_C  */
     250             :     DOT_MID = 319,                 /* DOT_MID  */
     251             :     DOT_V = 320,                   /* DOT_V  */
     252             :     DOT_START = 321,               /* DOT_START  */
     253             :     DOT_END = 322,                 /* DOT_END  */
     254             :     DOT_X = 323,                   /* DOT_X  */
     255             :     DOT_Y = 324,                   /* DOT_Y  */
     256             :     DOT_HT = 325,                  /* DOT_HT  */
     257             :     DOT_WID = 326,                 /* DOT_WID  */
     258             :     DOT_RAD = 327,                 /* DOT_RAD  */
     259             :     SIN = 328,                     /* SIN  */
     260             :     COS = 329,                     /* COS  */
     261             :     ATAN2 = 330,                   /* ATAN2  */
     262             :     LOG = 331,                     /* LOG  */
     263             :     EXP = 332,                     /* EXP  */
     264             :     SQRT = 333,                    /* SQRT  */
     265             :     K_MAX = 334,                   /* K_MAX  */
     266             :     K_MIN = 335,                   /* K_MIN  */
     267             :     INT = 336,                     /* INT  */
     268             :     RAND = 337,                    /* RAND  */
     269             :     SRAND = 338,                   /* SRAND  */
     270             :     COPY = 339,                    /* COPY  */
     271             :     THRU = 340,                    /* THRU  */
     272             :     TOP = 341,                     /* TOP  */
     273             :     BOTTOM = 342,                  /* BOTTOM  */
     274             :     UPPER = 343,                   /* UPPER  */
     275             :     LOWER = 344,                   /* LOWER  */
     276             :     SH = 345,                      /* SH  */
     277             :     PRINT = 346,                   /* PRINT  */
     278             :     CW = 347,                      /* CW  */
     279             :     CCW = 348,                     /* CCW  */
     280             :     FOR = 349,                     /* FOR  */
     281             :     DO = 350,                      /* DO  */
     282             :     IF = 351,                      /* IF  */
     283             :     ELSE = 352,                    /* ELSE  */
     284             :     ANDAND = 353,                  /* ANDAND  */
     285             :     OROR = 354,                    /* OROR  */
     286             :     NOTEQUAL = 355,                /* NOTEQUAL  */
     287             :     EQUALEQUAL = 356,              /* EQUALEQUAL  */
     288             :     LESSEQUAL = 357,               /* LESSEQUAL  */
     289             :     GREATEREQUAL = 358,            /* GREATEREQUAL  */
     290             :     LEFT_CORNER = 359,             /* LEFT_CORNER  */
     291             :     RIGHT_CORNER = 360,            /* RIGHT_CORNER  */
     292             :     NORTH = 361,                   /* NORTH  */
     293             :     SOUTH = 362,                   /* SOUTH  */
     294             :     EAST = 363,                    /* EAST  */
     295             :     WEST = 364,                    /* WEST  */
     296             :     CENTER = 365,                  /* CENTER  */
     297             :     END = 366,                     /* END  */
     298             :     START = 367,                   /* START  */
     299             :     RESET = 368,                   /* RESET  */
     300             :     UNTIL = 369,                   /* UNTIL  */
     301             :     PLOT = 370,                    /* PLOT  */
     302             :     THICKNESS = 371,               /* THICKNESS  */
     303             :     FILL = 372,                    /* FILL  */
     304             :     COLORED = 373,                 /* COLORED  */
     305             :     OUTLINED = 374,                /* OUTLINED  */
     306             :     SHADED = 375,                  /* SHADED  */
     307             :     XSLANTED = 376,                /* XSLANTED  */
     308             :     YSLANTED = 377,                /* YSLANTED  */
     309             :     ALIGNED = 378,                 /* ALIGNED  */
     310             :     SPRINTF = 379,                 /* SPRINTF  */
     311             :     COMMAND = 380,                 /* COMMAND  */
     312             :     DEFINE = 381,                  /* DEFINE  */
     313             :     UNDEF = 382                    /* UNDEF  */
     314             :   };
     315             :   typedef enum yytokentype yytoken_kind_t;
     316             : #endif
     317             : /* Token kinds.  */
     318             : #define YYEMPTY -2
     319             : #define YYEOF 0
     320             : #define YYerror 256
     321             : #define YYUNDEF 257
     322             : #define LABEL 258
     323             : #define VARIABLE 259
     324             : #define NUMBER 260
     325             : #define TEXT 261
     326             : #define COMMAND_LINE 262
     327             : #define DELIMITED 263
     328             : #define ORDINAL 264
     329             : #define TH 265
     330             : #define LEFT_ARROW_HEAD 266
     331             : #define RIGHT_ARROW_HEAD 267
     332             : #define DOUBLE_ARROW_HEAD 268
     333             : #define LAST 269
     334             : #define BOX 270
     335             : #define CIRCLE 271
     336             : #define ELLIPSE 272
     337             : #define ARC 273
     338             : #define LINE 274
     339             : #define POLYGON 275
     340             : #define ARROW 276
     341             : #define MOVE 277
     342             : #define SPLINE 278
     343             : #define HEIGHT 279
     344             : #define RADIUS 280
     345             : #define FIGNAME 281
     346             : #define WIDTH 282
     347             : #define DIAMETER 283
     348             : #define UP 284
     349             : #define DOWN 285
     350             : #define RIGHT 286
     351             : #define LEFT 287
     352             : #define FROM 288
     353             : #define TO 289
     354             : #define AT 290
     355             : #define WITH 291
     356             : #define BY 292
     357             : #define THEN 293
     358             : #define SOLID 294
     359             : #define DOTTED 295
     360             : #define DASHED 296
     361             : #define CHOP 297
     362             : #define SAME 298
     363             : #define INVISIBLE 299
     364             : #define LJUST 300
     365             : #define RJUST 301
     366             : #define ABOVE 302
     367             : #define BELOW 303
     368             : #define OF 304
     369             : #define THE 305
     370             : #define WAY 306
     371             : #define BETWEEN 307
     372             : #define AND 308
     373             : #define HERE 309
     374             : #define DOT_N 310
     375             : #define DOT_E 311
     376             : #define DOT_W 312
     377             : #define DOT_S 313
     378             : #define DOT_NE 314
     379             : #define DOT_SE 315
     380             : #define DOT_NW 316
     381             : #define DOT_SW 317
     382             : #define DOT_C 318
     383             : #define DOT_MID 319
     384             : #define DOT_V 320
     385             : #define DOT_START 321
     386             : #define DOT_END 322
     387             : #define DOT_X 323
     388             : #define DOT_Y 324
     389             : #define DOT_HT 325
     390             : #define DOT_WID 326
     391             : #define DOT_RAD 327
     392             : #define SIN 328
     393             : #define COS 329
     394             : #define ATAN2 330
     395             : #define LOG 331
     396             : #define EXP 332
     397             : #define SQRT 333
     398             : #define K_MAX 334
     399             : #define K_MIN 335
     400             : #define INT 336
     401             : #define RAND 337
     402             : #define SRAND 338
     403             : #define COPY 339
     404             : #define THRU 340
     405             : #define TOP 341
     406             : #define BOTTOM 342
     407             : #define UPPER 343
     408             : #define LOWER 344
     409             : #define SH 345
     410             : #define PRINT 346
     411             : #define CW 347
     412             : #define CCW 348
     413             : #define FOR 349
     414             : #define DO 350
     415             : #define IF 351
     416             : #define ELSE 352
     417             : #define ANDAND 353
     418             : #define OROR 354
     419             : #define NOTEQUAL 355
     420             : #define EQUALEQUAL 356
     421             : #define LESSEQUAL 357
     422             : #define GREATEREQUAL 358
     423             : #define LEFT_CORNER 359
     424             : #define RIGHT_CORNER 360
     425             : #define NORTH 361
     426             : #define SOUTH 362
     427             : #define EAST 363
     428             : #define WEST 364
     429             : #define CENTER 365
     430             : #define END 366
     431             : #define START 367
     432             : #define RESET 368
     433             : #define UNTIL 369
     434             : #define PLOT 370
     435             : #define THICKNESS 371
     436             : #define FILL 372
     437             : #define COLORED 373
     438             : #define OUTLINED 374
     439             : #define SHADED 375
     440             : #define XSLANTED 376
     441             : #define YSLANTED 377
     442             : #define ALIGNED 378
     443             : #define SPRINTF 379
     444             : #define COMMAND 380
     445             : #define DEFINE 381
     446             : #define UNDEF 382
     447             : 
     448             : /* Value type.  */
     449             : #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
     450             : union YYSTYPE
     451             : {
     452             : #line 96 "../src/preproc/pic/pic.ypp"
     453             : 
     454             :         char *str;
     455             :         int n;
     456             :         double x;
     457             :         struct pair_s { double x, y; } pair;
     458             :         struct if_data_s { double x; char *body; } if_data;
     459             :         struct lstr_s { char *str; const char *filename; int lineno; } lstr;
     460             :         struct dv_s { double *v; int nv; int maxv; } dv;
     461             :         struct by_s { double val; int is_multiplicative; } by;
     462             :         place pl;
     463             :         object *obj;
     464             :         corner crn;
     465             :         vertex ver;
     466             :         path *pth;
     467             :         object_spec *spec;
     468             :         saved_state *pstate;
     469             :         graphics_state state;
     470             :         object_type obtype;
     471             : 
     472             : #line 473 "src/preproc/pic/pic.cpp"
     473             : 
     474             : };
     475             : typedef union YYSTYPE YYSTYPE;
     476             : # define YYSTYPE_IS_TRIVIAL 1
     477             : # define YYSTYPE_IS_DECLARED 1
     478             : #endif
     479             : 
     480             : 
     481             : extern YYSTYPE yylval;
     482             : 
     483             : int yyparse (void);
     484             : 
     485             : #endif /* !YY_YY_SRC_PREPROC_PIC_PIC_HPP_INCLUDED  */
     486             : /* Symbol kind.  */
     487             : enum yysymbol_kind_t
     488             : {
     489             :   YYSYMBOL_YYEMPTY = -2,
     490             :   YYSYMBOL_YYEOF = 0,                      /* "end of file"  */
     491             :   YYSYMBOL_YYerror = 1,                    /* error  */
     492             :   YYSYMBOL_YYUNDEF = 2,                    /* "invalid token"  */
     493             :   YYSYMBOL_LABEL = 3,                      /* LABEL  */
     494             :   YYSYMBOL_VARIABLE = 4,                   /* VARIABLE  */
     495             :   YYSYMBOL_NUMBER = 5,                     /* NUMBER  */
     496             :   YYSYMBOL_TEXT = 6,                       /* TEXT  */
     497             :   YYSYMBOL_COMMAND_LINE = 7,               /* COMMAND_LINE  */
     498             :   YYSYMBOL_DELIMITED = 8,                  /* DELIMITED  */
     499             :   YYSYMBOL_ORDINAL = 9,                    /* ORDINAL  */
     500             :   YYSYMBOL_TH = 10,                        /* TH  */
     501             :   YYSYMBOL_LEFT_ARROW_HEAD = 11,           /* LEFT_ARROW_HEAD  */
     502             :   YYSYMBOL_RIGHT_ARROW_HEAD = 12,          /* RIGHT_ARROW_HEAD  */
     503             :   YYSYMBOL_DOUBLE_ARROW_HEAD = 13,         /* DOUBLE_ARROW_HEAD  */
     504             :   YYSYMBOL_LAST = 14,                      /* LAST  */
     505             :   YYSYMBOL_BOX = 15,                       /* BOX  */
     506             :   YYSYMBOL_CIRCLE = 16,                    /* CIRCLE  */
     507             :   YYSYMBOL_ELLIPSE = 17,                   /* ELLIPSE  */
     508             :   YYSYMBOL_ARC = 18,                       /* ARC  */
     509             :   YYSYMBOL_LINE = 19,                      /* LINE  */
     510             :   YYSYMBOL_POLYGON = 20,                   /* POLYGON  */
     511             :   YYSYMBOL_ARROW = 21,                     /* ARROW  */
     512             :   YYSYMBOL_MOVE = 22,                      /* MOVE  */
     513             :   YYSYMBOL_SPLINE = 23,                    /* SPLINE  */
     514             :   YYSYMBOL_HEIGHT = 24,                    /* HEIGHT  */
     515             :   YYSYMBOL_RADIUS = 25,                    /* RADIUS  */
     516             :   YYSYMBOL_FIGNAME = 26,                   /* FIGNAME  */
     517             :   YYSYMBOL_WIDTH = 27,                     /* WIDTH  */
     518             :   YYSYMBOL_DIAMETER = 28,                  /* DIAMETER  */
     519             :   YYSYMBOL_UP = 29,                        /* UP  */
     520             :   YYSYMBOL_DOWN = 30,                      /* DOWN  */
     521             :   YYSYMBOL_RIGHT = 31,                     /* RIGHT  */
     522             :   YYSYMBOL_LEFT = 32,                      /* LEFT  */
     523             :   YYSYMBOL_FROM = 33,                      /* FROM  */
     524             :   YYSYMBOL_TO = 34,                        /* TO  */
     525             :   YYSYMBOL_AT = 35,                        /* AT  */
     526             :   YYSYMBOL_WITH = 36,                      /* WITH  */
     527             :   YYSYMBOL_BY = 37,                        /* BY  */
     528             :   YYSYMBOL_THEN = 38,                      /* THEN  */
     529             :   YYSYMBOL_SOLID = 39,                     /* SOLID  */
     530             :   YYSYMBOL_DOTTED = 40,                    /* DOTTED  */
     531             :   YYSYMBOL_DASHED = 41,                    /* DASHED  */
     532             :   YYSYMBOL_CHOP = 42,                      /* CHOP  */
     533             :   YYSYMBOL_SAME = 43,                      /* SAME  */
     534             :   YYSYMBOL_INVISIBLE = 44,                 /* INVISIBLE  */
     535             :   YYSYMBOL_LJUST = 45,                     /* LJUST  */
     536             :   YYSYMBOL_RJUST = 46,                     /* RJUST  */
     537             :   YYSYMBOL_ABOVE = 47,                     /* ABOVE  */
     538             :   YYSYMBOL_BELOW = 48,                     /* BELOW  */
     539             :   YYSYMBOL_OF = 49,                        /* OF  */
     540             :   YYSYMBOL_THE = 50,                       /* THE  */
     541             :   YYSYMBOL_WAY = 51,                       /* WAY  */
     542             :   YYSYMBOL_BETWEEN = 52,                   /* BETWEEN  */
     543             :   YYSYMBOL_AND = 53,                       /* AND  */
     544             :   YYSYMBOL_HERE = 54,                      /* HERE  */
     545             :   YYSYMBOL_DOT_N = 55,                     /* DOT_N  */
     546             :   YYSYMBOL_DOT_E = 56,                     /* DOT_E  */
     547             :   YYSYMBOL_DOT_W = 57,                     /* DOT_W  */
     548             :   YYSYMBOL_DOT_S = 58,                     /* DOT_S  */
     549             :   YYSYMBOL_DOT_NE = 59,                    /* DOT_NE  */
     550             :   YYSYMBOL_DOT_SE = 60,                    /* DOT_SE  */
     551             :   YYSYMBOL_DOT_NW = 61,                    /* DOT_NW  */
     552             :   YYSYMBOL_DOT_SW = 62,                    /* DOT_SW  */
     553             :   YYSYMBOL_DOT_C = 63,                     /* DOT_C  */
     554             :   YYSYMBOL_DOT_MID = 64,                   /* DOT_MID  */
     555             :   YYSYMBOL_DOT_V = 65,                     /* DOT_V  */
     556             :   YYSYMBOL_DOT_START = 66,                 /* DOT_START  */
     557             :   YYSYMBOL_DOT_END = 67,                   /* DOT_END  */
     558             :   YYSYMBOL_DOT_X = 68,                     /* DOT_X  */
     559             :   YYSYMBOL_DOT_Y = 69,                     /* DOT_Y  */
     560             :   YYSYMBOL_DOT_HT = 70,                    /* DOT_HT  */
     561             :   YYSYMBOL_DOT_WID = 71,                   /* DOT_WID  */
     562             :   YYSYMBOL_DOT_RAD = 72,                   /* DOT_RAD  */
     563             :   YYSYMBOL_SIN = 73,                       /* SIN  */
     564             :   YYSYMBOL_COS = 74,                       /* COS  */
     565             :   YYSYMBOL_ATAN2 = 75,                     /* ATAN2  */
     566             :   YYSYMBOL_LOG = 76,                       /* LOG  */
     567             :   YYSYMBOL_EXP = 77,                       /* EXP  */
     568             :   YYSYMBOL_SQRT = 78,                      /* SQRT  */
     569             :   YYSYMBOL_K_MAX = 79,                     /* K_MAX  */
     570             :   YYSYMBOL_K_MIN = 80,                     /* K_MIN  */
     571             :   YYSYMBOL_INT = 81,                       /* INT  */
     572             :   YYSYMBOL_RAND = 82,                      /* RAND  */
     573             :   YYSYMBOL_SRAND = 83,                     /* SRAND  */
     574             :   YYSYMBOL_COPY = 84,                      /* COPY  */
     575             :   YYSYMBOL_THRU = 85,                      /* THRU  */
     576             :   YYSYMBOL_TOP = 86,                       /* TOP  */
     577             :   YYSYMBOL_BOTTOM = 87,                    /* BOTTOM  */
     578             :   YYSYMBOL_UPPER = 88,                     /* UPPER  */
     579             :   YYSYMBOL_LOWER = 89,                     /* LOWER  */
     580             :   YYSYMBOL_SH = 90,                        /* SH  */
     581             :   YYSYMBOL_PRINT = 91,                     /* PRINT  */
     582             :   YYSYMBOL_CW = 92,                        /* CW  */
     583             :   YYSYMBOL_CCW = 93,                       /* CCW  */
     584             :   YYSYMBOL_FOR = 94,                       /* FOR  */
     585             :   YYSYMBOL_DO = 95,                        /* DO  */
     586             :   YYSYMBOL_IF = 96,                        /* IF  */
     587             :   YYSYMBOL_ELSE = 97,                      /* ELSE  */
     588             :   YYSYMBOL_ANDAND = 98,                    /* ANDAND  */
     589             :   YYSYMBOL_OROR = 99,                      /* OROR  */
     590             :   YYSYMBOL_NOTEQUAL = 100,                 /* NOTEQUAL  */
     591             :   YYSYMBOL_EQUALEQUAL = 101,               /* EQUALEQUAL  */
     592             :   YYSYMBOL_LESSEQUAL = 102,                /* LESSEQUAL  */
     593             :   YYSYMBOL_GREATEREQUAL = 103,             /* GREATEREQUAL  */
     594             :   YYSYMBOL_LEFT_CORNER = 104,              /* LEFT_CORNER  */
     595             :   YYSYMBOL_RIGHT_CORNER = 105,             /* RIGHT_CORNER  */
     596             :   YYSYMBOL_NORTH = 106,                    /* NORTH  */
     597             :   YYSYMBOL_SOUTH = 107,                    /* SOUTH  */
     598             :   YYSYMBOL_EAST = 108,                     /* EAST  */
     599             :   YYSYMBOL_WEST = 109,                     /* WEST  */
     600             :   YYSYMBOL_CENTER = 110,                   /* CENTER  */
     601             :   YYSYMBOL_END = 111,                      /* END  */
     602             :   YYSYMBOL_START = 112,                    /* START  */
     603             :   YYSYMBOL_RESET = 113,                    /* RESET  */
     604             :   YYSYMBOL_UNTIL = 114,                    /* UNTIL  */
     605             :   YYSYMBOL_PLOT = 115,                     /* PLOT  */
     606             :   YYSYMBOL_THICKNESS = 116,                /* THICKNESS  */
     607             :   YYSYMBOL_FILL = 117,                     /* FILL  */
     608             :   YYSYMBOL_COLORED = 118,                  /* COLORED  */
     609             :   YYSYMBOL_OUTLINED = 119,                 /* OUTLINED  */
     610             :   YYSYMBOL_SHADED = 120,                   /* SHADED  */
     611             :   YYSYMBOL_XSLANTED = 121,                 /* XSLANTED  */
     612             :   YYSYMBOL_YSLANTED = 122,                 /* YSLANTED  */
     613             :   YYSYMBOL_ALIGNED = 123,                  /* ALIGNED  */
     614             :   YYSYMBOL_SPRINTF = 124,                  /* SPRINTF  */
     615             :   YYSYMBOL_COMMAND = 125,                  /* COMMAND  */
     616             :   YYSYMBOL_DEFINE = 126,                   /* DEFINE  */
     617             :   YYSYMBOL_UNDEF = 127,                    /* UNDEF  */
     618             :   YYSYMBOL_128_ = 128,                     /* '.'  */
     619             :   YYSYMBOL_129_ = 129,                     /* '('  */
     620             :   YYSYMBOL_130_ = 130,                     /* '`'  */
     621             :   YYSYMBOL_131_ = 131,                     /* '['  */
     622             :   YYSYMBOL_132_ = 132,                     /* ','  */
     623             :   YYSYMBOL_133_ = 133,                     /* '<'  */
     624             :   YYSYMBOL_134_ = 134,                     /* '>'  */
     625             :   YYSYMBOL_135_ = 135,                     /* '+'  */
     626             :   YYSYMBOL_136_ = 136,                     /* '-'  */
     627             :   YYSYMBOL_137_ = 137,                     /* '*'  */
     628             :   YYSYMBOL_138_ = 138,                     /* '/'  */
     629             :   YYSYMBOL_139_ = 139,                     /* '%'  */
     630             :   YYSYMBOL_140_ = 140,                     /* '!'  */
     631             :   YYSYMBOL_141_ = 141,                     /* '^'  */
     632             :   YYSYMBOL_142_ = 142,                     /* ';'  */
     633             :   YYSYMBOL_143_ = 143,                     /* '='  */
     634             :   YYSYMBOL_144_ = 144,                     /* ':'  */
     635             :   YYSYMBOL_145_ = 145,                     /* '{'  */
     636             :   YYSYMBOL_146_ = 146,                     /* '}'  */
     637             :   YYSYMBOL_147_ = 147,                     /* ']'  */
     638             :   YYSYMBOL_148_ = 148,                     /* ')'  */
     639             :   YYSYMBOL_149_ = 149,                     /* '\''  */
     640             :   YYSYMBOL_YYACCEPT = 150,                 /* $accept  */
     641             :   YYSYMBOL_top = 151,                      /* top  */
     642             :   YYSYMBOL_element_list = 152,             /* element_list  */
     643             :   YYSYMBOL_middle_element_list = 153,      /* middle_element_list  */
     644             :   YYSYMBOL_optional_separator = 154,       /* optional_separator  */
     645             :   YYSYMBOL_separator = 155,                /* separator  */
     646             :   YYSYMBOL_placeless_element = 156,        /* placeless_element  */
     647             :   YYSYMBOL_157_1 = 157,                    /* $@1  */
     648             :   YYSYMBOL_158_2 = 158,                    /* $@2  */
     649             :   YYSYMBOL_159_3 = 159,                    /* $@3  */
     650             :   YYSYMBOL_160_4 = 160,                    /* $@4  */
     651             :   YYSYMBOL_161_5 = 161,                    /* $@5  */
     652             :   YYSYMBOL_162_6 = 162,                    /* $@6  */
     653             :   YYSYMBOL_163_7 = 163,                    /* $@7  */
     654             :   YYSYMBOL_macro_name = 164,               /* macro_name  */
     655             :   YYSYMBOL_reset_variables = 165,          /* reset_variables  */
     656             :   YYSYMBOL_print_args = 166,               /* print_args  */
     657             :   YYSYMBOL_print_arg = 167,                /* print_arg  */
     658             :   YYSYMBOL_simple_if = 168,                /* simple_if  */
     659             :   YYSYMBOL_169_8 = 169,                    /* $@8  */
     660             :   YYSYMBOL_until = 170,                    /* until  */
     661             :   YYSYMBOL_any_expr = 171,                 /* any_expr  */
     662             :   YYSYMBOL_text_expr = 172,                /* text_expr  */
     663             :   YYSYMBOL_optional_by = 173,              /* optional_by  */
     664             :   YYSYMBOL_element = 174,                  /* element  */
     665             :   YYSYMBOL_175_9 = 175,                    /* @9  */
     666             :   YYSYMBOL_176_10 = 176,                   /* $@10  */
     667             :   YYSYMBOL_optional_element = 177,         /* optional_element  */
     668             :   YYSYMBOL_object_spec = 178,              /* object_spec  */
     669             :   YYSYMBOL_179_11 = 179,                   /* @11  */
     670             :   YYSYMBOL_text = 180,                     /* text  */
     671             :   YYSYMBOL_sprintf_args = 181,             /* sprintf_args  */
     672             :   YYSYMBOL_position = 182,                 /* position  */
     673             :   YYSYMBOL_position_not_place = 183,       /* position_not_place  */
     674             :   YYSYMBOL_between = 184,                  /* between  */
     675             :   YYSYMBOL_expr_pair = 185,                /* expr_pair  */
     676             :   YYSYMBOL_place = 186,                    /* place  */
     677             :   YYSYMBOL_label = 187,                    /* label  */
     678             :   YYSYMBOL_ordinal = 188,                  /* ordinal  */
     679             :   YYSYMBOL_optional_ordinal_last = 189,    /* optional_ordinal_last  */
     680             :   YYSYMBOL_nth_primitive = 190,            /* nth_primitive  */
     681             :   YYSYMBOL_object_type = 191,              /* object_type  */
     682             :   YYSYMBOL_label_path = 192,               /* label_path  */
     683             :   YYSYMBOL_relative_path = 193,            /* relative_path  */
     684             :   YYSYMBOL_path = 194,                     /* path  */
     685             :   YYSYMBOL_corner = 195,                   /* corner  */
     686             :   YYSYMBOL_vertex = 196,                   /* vertex  */
     687             :   YYSYMBOL_expr = 197,                     /* expr  */
     688             :   YYSYMBOL_expr_lower_than = 198,          /* expr_lower_than  */
     689             :   YYSYMBOL_expr_not_lower_than = 199       /* expr_not_lower_than  */
     690             : };
     691             : typedef enum yysymbol_kind_t yysymbol_kind_t;
     692             : 
     693             : 
     694             : 
     695             : 
     696             : #ifdef short
     697             : # undef short
     698             : #endif
     699             : 
     700             : /* On compilers that do not define __PTRDIFF_MAX__ etc., make sure
     701             :    <limits.h> and (if available) <stdint.h> are included
     702             :    so that the code can choose integer types of a good width.  */
     703             : 
     704             : #ifndef __PTRDIFF_MAX__
     705             : # include <limits.h> /* INFRINGES ON USER NAME SPACE */
     706             : # if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
     707             : #  include <stdint.h> /* INFRINGES ON USER NAME SPACE */
     708             : #  define YY_STDINT_H
     709             : # endif
     710             : #endif
     711             : 
     712             : /* Narrow types that promote to a signed type and that can represent a
     713             :    signed or unsigned integer of at least N bits.  In tables they can
     714             :    save space and decrease cache pressure.  Promoting to a signed type
     715             :    helps avoid bugs in integer arithmetic.  */
     716             : 
     717             : #ifdef __INT_LEAST8_MAX__
     718             : typedef __INT_LEAST8_TYPE__ yytype_int8;
     719             : #elif defined YY_STDINT_H
     720             : typedef int_least8_t yytype_int8;
     721             : #else
     722             : typedef signed char yytype_int8;
     723             : #endif
     724             : 
     725             : #ifdef __INT_LEAST16_MAX__
     726             : typedef __INT_LEAST16_TYPE__ yytype_int16;
     727             : #elif defined YY_STDINT_H
     728             : typedef int_least16_t yytype_int16;
     729             : #else
     730             : typedef short yytype_int16;
     731             : #endif
     732             : 
     733             : /* Work around bug in HP-UX 11.23, which defines these macros
     734             :    incorrectly for preprocessor constants.  This workaround can likely
     735             :    be removed in 2023, as HPE has promised support for HP-UX 11.23
     736             :    (aka HP-UX 11i v2) only through the end of 2022; see Table 2 of
     737             :    <https://h20195.www2.hpe.com/V2/getpdf.aspx/4AA4-7673ENW.pdf>.  */
     738             : #ifdef __hpux
     739             : # undef UINT_LEAST8_MAX
     740             : # undef UINT_LEAST16_MAX
     741             : # define UINT_LEAST8_MAX 255
     742             : # define UINT_LEAST16_MAX 65535
     743             : #endif
     744             : 
     745             : #if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__
     746             : typedef __UINT_LEAST8_TYPE__ yytype_uint8;
     747             : #elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \
     748             :        && UINT_LEAST8_MAX <= INT_MAX)
     749             : typedef uint_least8_t yytype_uint8;
     750             : #elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX
     751             : typedef unsigned char yytype_uint8;
     752             : #else
     753             : typedef short yytype_uint8;
     754             : #endif
     755             : 
     756             : #if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__
     757             : typedef __UINT_LEAST16_TYPE__ yytype_uint16;
     758             : #elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \
     759             :        && UINT_LEAST16_MAX <= INT_MAX)
     760             : typedef uint_least16_t yytype_uint16;
     761             : #elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX
     762             : typedef unsigned short yytype_uint16;
     763             : #else
     764             : typedef int yytype_uint16;
     765             : #endif
     766             : 
     767             : #ifndef YYPTRDIFF_T
     768             : # if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__
     769             : #  define YYPTRDIFF_T __PTRDIFF_TYPE__
     770             : #  define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__
     771             : # elif defined PTRDIFF_MAX
     772             : #  ifndef ptrdiff_t
     773             : #   include <stddef.h> /* INFRINGES ON USER NAME SPACE */
     774             : #  endif
     775             : #  define YYPTRDIFF_T ptrdiff_t
     776             : #  define YYPTRDIFF_MAXIMUM PTRDIFF_MAX
     777             : # else
     778             : #  define YYPTRDIFF_T long
     779             : #  define YYPTRDIFF_MAXIMUM LONG_MAX
     780             : # endif
     781             : #endif
     782             : 
     783             : #ifndef YYSIZE_T
     784             : # ifdef __SIZE_TYPE__
     785             : #  define YYSIZE_T __SIZE_TYPE__
     786             : # elif defined size_t
     787             : #  define YYSIZE_T size_t
     788             : # elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
     789             : #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
     790             : #  define YYSIZE_T size_t
     791             : # else
     792             : #  define YYSIZE_T unsigned
     793             : # endif
     794             : #endif
     795             : 
     796             : #define YYSIZE_MAXIMUM                                  \
     797             :   YY_CAST (YYPTRDIFF_T,                                 \
     798             :            (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1)  \
     799             :             ? YYPTRDIFF_MAXIMUM                         \
     800             :             : YY_CAST (YYSIZE_T, -1)))
     801             : 
     802             : #define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X))
     803             : 
     804             : 
     805             : /* Stored state numbers (used for stacks). */
     806             : typedef yytype_int16 yy_state_t;
     807             : 
     808             : /* State numbers in computations.  */
     809             : typedef int yy_state_fast_t;
     810             : 
     811             : #ifndef YY_
     812             : # if defined YYENABLE_NLS && YYENABLE_NLS
     813             : #  if ENABLE_NLS
     814             : #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
     815             : #   define YY_(Msgid) dgettext ("bison-runtime", Msgid)
     816             : #  endif
     817             : # endif
     818             : # ifndef YY_
     819             : #  define YY_(Msgid) Msgid
     820             : # endif
     821             : #endif
     822             : 
     823             : 
     824             : #ifndef YY_ATTRIBUTE_PURE
     825             : # if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__)
     826             : #  define YY_ATTRIBUTE_PURE __attribute__ ((__pure__))
     827             : # else
     828             : #  define YY_ATTRIBUTE_PURE
     829             : # endif
     830             : #endif
     831             : 
     832             : #ifndef YY_ATTRIBUTE_UNUSED
     833             : # if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__)
     834             : #  define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__))
     835             : # else
     836             : #  define YY_ATTRIBUTE_UNUSED
     837             : # endif
     838             : #endif
     839             : 
     840             : /* Suppress unused-variable warnings by "using" E.  */
     841             : #if ! defined lint || defined __GNUC__
     842             : # define YY_USE(E) ((void) (E))
     843             : #else
     844             : # define YY_USE(E) /* empty */
     845             : #endif
     846             : 
     847             : #if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
     848             : /* Suppress an incorrect diagnostic about yylval being uninitialized.  */
     849             : # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN                            \
     850             :     _Pragma ("GCC diagnostic push")                                     \
     851             :     _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")              \
     852             :     _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
     853             : # define YY_IGNORE_MAYBE_UNINITIALIZED_END      \
     854             :     _Pragma ("GCC diagnostic pop")
     855             : #else
     856             : # define YY_INITIAL_VALUE(Value) Value
     857             : #endif
     858             : #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
     859             : # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
     860             : # define YY_IGNORE_MAYBE_UNINITIALIZED_END
     861             : #endif
     862             : #ifndef YY_INITIAL_VALUE
     863             : # define YY_INITIAL_VALUE(Value) /* Nothing. */
     864             : #endif
     865             : 
     866             : #if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__
     867             : # define YY_IGNORE_USELESS_CAST_BEGIN                          \
     868             :     _Pragma ("GCC diagnostic push")                            \
     869             :     _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"")
     870             : # define YY_IGNORE_USELESS_CAST_END            \
     871             :     _Pragma ("GCC diagnostic pop")
     872             : #endif
     873             : #ifndef YY_IGNORE_USELESS_CAST_BEGIN
     874             : # define YY_IGNORE_USELESS_CAST_BEGIN
     875             : # define YY_IGNORE_USELESS_CAST_END
     876             : #endif
     877             : 
     878             : 
     879             : #define YY_ASSERT(E) ((void) (0 && (E)))
     880             : 
     881             : #if !defined yyoverflow
     882             : 
     883             : /* The parser invokes alloca or malloc; define the necessary symbols.  */
     884             : 
     885             : # ifdef YYSTACK_USE_ALLOCA
     886             : #  if YYSTACK_USE_ALLOCA
     887             : #   ifdef __GNUC__
     888             : #    define YYSTACK_ALLOC __builtin_alloca
     889             : #   elif defined __BUILTIN_VA_ARG_INCR
     890             : #    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
     891             : #   elif defined _AIX
     892             : #    define YYSTACK_ALLOC __alloca
     893             : #   elif defined _MSC_VER
     894             : #    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
     895             : #    define alloca _alloca
     896             : #   else
     897             : #    define YYSTACK_ALLOC alloca
     898             : #    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
     899             : #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
     900             :       /* Use EXIT_SUCCESS as a witness for stdlib.h.  */
     901             : #     ifndef EXIT_SUCCESS
     902             : #      define EXIT_SUCCESS 0
     903             : #     endif
     904             : #    endif
     905             : #   endif
     906             : #  endif
     907             : # endif
     908             : 
     909             : # ifdef YYSTACK_ALLOC
     910             :    /* Pacify GCC's 'empty if-body' warning.  */
     911             : #  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
     912             : #  ifndef YYSTACK_ALLOC_MAXIMUM
     913             :     /* The OS might guarantee only one guard page at the bottom of the stack,
     914             :        and a page size can be as small as 4096 bytes.  So we cannot safely
     915             :        invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
     916             :        to allow for a few compiler-allocated temporary stack slots.  */
     917             : #   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
     918             : #  endif
     919             : # else
     920             : #  define YYSTACK_ALLOC YYMALLOC
     921             : #  define YYSTACK_FREE YYFREE
     922             : #  ifndef YYSTACK_ALLOC_MAXIMUM
     923             : #   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
     924             : #  endif
     925             : #  if (defined __cplusplus && ! defined EXIT_SUCCESS \
     926             :        && ! ((defined YYMALLOC || defined malloc) \
     927             :              && (defined YYFREE || defined free)))
     928             : #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
     929             : #   ifndef EXIT_SUCCESS
     930             : #    define EXIT_SUCCESS 0
     931             : #   endif
     932             : #  endif
     933             : #  ifndef YYMALLOC
     934             : #   define YYMALLOC malloc
     935             : #   if ! defined malloc && ! defined EXIT_SUCCESS
     936             : void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
     937             : #   endif
     938             : #  endif
     939             : #  ifndef YYFREE
     940             : #   define YYFREE free
     941             : #   if ! defined free && ! defined EXIT_SUCCESS
     942             : void free (void *); /* INFRINGES ON USER NAME SPACE */
     943             : #   endif
     944             : #  endif
     945             : # endif
     946             : #endif /* !defined yyoverflow */
     947             : 
     948             : #if (! defined yyoverflow \
     949             :      && (! defined __cplusplus \
     950             :          || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
     951             : 
     952             : /* A type that is properly aligned for any stack member.  */
     953             : union yyalloc
     954             : {
     955             :   yy_state_t yyss_alloc;
     956             :   YYSTYPE yyvs_alloc;
     957             : };
     958             : 
     959             : /* The size of the maximum gap between one aligned stack and the next.  */
     960             : # define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1)
     961             : 
     962             : /* The size of an array large to enough to hold all stacks, each with
     963             :    N elements.  */
     964             : # define YYSTACK_BYTES(N) \
     965             :      ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \
     966             :       + YYSTACK_GAP_MAXIMUM)
     967             : 
     968             : # define YYCOPY_NEEDED 1
     969             : 
     970             : /* Relocate STACK from its old location to the new one.  The
     971             :    local variables YYSIZE and YYSTACKSIZE give the old and new number of
     972             :    elements in the stack, and YYPTR gives the new location of the
     973             :    stack.  Advance YYPTR to a properly aligned location for the next
     974             :    stack.  */
     975             : # define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \
     976             :     do                                                                  \
     977             :       {                                                                 \
     978             :         YYPTRDIFF_T yynewbytes;                                         \
     979             :         YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
     980             :         Stack = &yyptr->Stack_alloc;                                    \
     981             :         yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \
     982             :         yyptr += yynewbytes / YYSIZEOF (*yyptr);                        \
     983             :       }                                                                 \
     984             :     while (0)
     985             : 
     986             : #endif
     987             : 
     988             : #if defined YYCOPY_NEEDED && YYCOPY_NEEDED
     989             : /* Copy COUNT objects from SRC to DST.  The source and destination do
     990             :    not overlap.  */
     991             : # ifndef YYCOPY
     992             : #  if defined __GNUC__ && 1 < __GNUC__
     993             : #   define YYCOPY(Dst, Src, Count) \
     994             :       __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src)))
     995             : #  else
     996             : #   define YYCOPY(Dst, Src, Count)              \
     997             :       do                                        \
     998             :         {                                       \
     999             :           YYPTRDIFF_T yyi;                      \
    1000             :           for (yyi = 0; yyi < (Count); yyi++)   \
    1001             :             (Dst)[yyi] = (Src)[yyi];            \
    1002             :         }                                       \
    1003             :       while (0)
    1004             : #  endif
    1005             : # endif
    1006             : #endif /* !YYCOPY_NEEDED */
    1007             : 
    1008             : /* YYFINAL -- State number of the termination state.  */
    1009             : #define YYFINAL  6
    1010             : /* YYLAST -- Last index in YYTABLE.  */
    1011             : #define YYLAST   2745
    1012             : 
    1013             : /* YYNTOKENS -- Number of terminals.  */
    1014             : #define YYNTOKENS  150
    1015             : /* YYNNTS -- Number of nonterminals.  */
    1016             : #define YYNNTS  50
    1017             : /* YYNRULES -- Number of rules.  */
    1018             : #define YYNRULES  269
    1019             : /* YYNSTATES -- Number of states.  */
    1020             : #define YYNSTATES  471
    1021             : 
    1022             : /* YYMAXUTOK -- Last valid token kind.  */
    1023             : #define YYMAXUTOK   382
    1024             : 
    1025             : 
    1026             : /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
    1027             :    as returned by yylex, with out-of-bounds checking.  */
    1028             : #define YYTRANSLATE(YYX)                                \
    1029             :   (0 <= (YYX) && (YYX) <= YYMAXUTOK                     \
    1030             :    ? YY_CAST (yysymbol_kind_t, yytranslate[YYX])        \
    1031             :    : YYSYMBOL_YYUNDEF)
    1032             : 
    1033             : /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
    1034             :    as returned by yylex.  */
    1035             : static const yytype_uint8 yytranslate[] =
    1036             : {
    1037             :        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    1038             :        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    1039             :        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    1040             :        2,     2,     2,   140,     2,     2,     2,   139,     2,   149,
    1041             :      129,   148,   137,   135,   132,   136,   128,   138,     2,     2,
    1042             :        2,     2,     2,     2,     2,     2,     2,     2,   144,   142,
    1043             :      133,   143,   134,     2,     2,     2,     2,     2,     2,     2,
    1044             :        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    1045             :        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    1046             :        2,   131,     2,   147,   141,     2,   130,     2,     2,     2,
    1047             :        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    1048             :        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    1049             :        2,     2,     2,   145,     2,   146,     2,     2,     2,     2,
    1050             :        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    1051             :        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    1052             :        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    1053             :        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    1054             :        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    1055             :        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    1056             :        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    1057             :        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    1058             :        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    1059             :        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    1060             :        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    1061             :        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    1062             :        2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
    1063             :        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    1064             :       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    1065             :       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
    1066             :       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
    1067             :       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
    1068             :       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
    1069             :       65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
    1070             :       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
    1071             :       85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
    1072             :       95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
    1073             :      105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
    1074             :      115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
    1075             :      125,   126,   127
    1076             : };
    1077             : 
    1078             : #if YYDEBUG
    1079             :   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
    1080             : static const yytype_int16 yyrline[] =
    1081             : {
    1082             :        0,   311,   311,   312,   321,   326,   328,   332,   334,   338,
    1083             :      339,   343,   351,   356,   368,   370,   372,   374,   376,   381,
    1084             :      386,   393,   392,   408,   416,   418,   415,   429,   431,   428,
    1085             :      441,   440,   449,   458,   457,   471,   472,   477,   478,   482,
    1086             :      487,   492,   500,   502,   521,   528,   530,   541,   540,   552,
    1087             :      553,   558,   560,   565,   571,   577,   579,   581,   583,   585,
    1088             :      587,   589,   596,   600,   605,   613,   627,   633,   641,   648,
    1089             :      654,   647,   663,   673,   674,   679,   681,   683,   685,   690,
    1090             :      697,   704,   711,   718,   725,   730,   737,   745,   744,   771,
    1091             :      777,   783,   789,   795,   814,   821,   828,   835,   842,   849,
    1092             :      856,   863,   870,   877,   892,   904,   910,   918,   927,   934,
    1093             :      959,   963,   969,   975,   981,   987,   992,   998,  1004,  1010,
    1094             :     1017,  1026,  1033,  1049,  1066,  1071,  1076,  1081,  1086,  1091,
    1095             :     1096,  1101,  1109,  1119,  1129,  1139,  1149,  1155,  1163,  1165,
    1096             :     1177,  1182,  1204,  1206,  1212,  1221,  1223,  1228,  1233,  1238,
    1097             :     1243,  1248,  1253,  1259,  1264,  1272,  1273,  1277,  1282,  1288,
    1098             :     1290,  1296,  1303,  1309,  1315,  1322,  1331,  1341,  1343,  1352,
    1099             :     1354,  1362,  1364,  1369,  1384,  1402,  1404,  1406,  1408,  1410,
    1100             :     1412,  1414,  1416,  1418,  1420,  1425,  1427,  1435,  1439,  1441,
    1101             :     1449,  1451,  1457,  1463,  1469,  1475,  1484,  1486,  1488,  1490,
    1102             :     1492,  1494,  1496,  1498,  1500,  1502,  1504,  1506,  1508,  1510,
    1103             :     1512,  1514,  1516,  1518,  1520,  1522,  1524,  1526,  1528,  1530,
    1104             :     1532,  1534,  1536,  1538,  1540,  1542,  1544,  1546,  1551,  1556,
    1105             :     1561,  1567,  1576,  1578,  1583,  1588,  1596,  1598,  1605,  1612,
    1106             :     1619,  1626,  1633,  1635,  1637,  1639,  1647,  1655,  1668,  1670,
    1107             :     1672,  1681,  1690,  1703,  1712,  1721,  1730,  1732,  1734,  1736,
    1108             :     1743,  1749,  1754,  1756,  1758,  1760,  1762,  1764,  1766,  1768
    1109             : };
    1110             : #endif
    1111             : 
    1112             : /** Accessing symbol of state STATE.  */
    1113             : #define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State])
    1114             : 
    1115             : #if YYDEBUG || 0
    1116             : /* The user-facing name of the symbol whose (internal) number is
    1117             :    YYSYMBOL.  No bounds checking.  */
    1118             : static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED;
    1119             : 
    1120             : /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
    1121             :    First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
    1122             : static const char *const yytname[] =
    1123             : {
    1124             :   "\"end of file\"", "error", "\"invalid token\"", "LABEL", "VARIABLE",
    1125             :   "NUMBER", "TEXT", "COMMAND_LINE", "DELIMITED", "ORDINAL", "TH",
    1126             :   "LEFT_ARROW_HEAD", "RIGHT_ARROW_HEAD", "DOUBLE_ARROW_HEAD", "LAST",
    1127             :   "BOX", "CIRCLE", "ELLIPSE", "ARC", "LINE", "POLYGON", "ARROW", "MOVE",
    1128             :   "SPLINE", "HEIGHT", "RADIUS", "FIGNAME", "WIDTH", "DIAMETER", "UP",
    1129             :   "DOWN", "RIGHT", "LEFT", "FROM", "TO", "AT", "WITH", "BY", "THEN",
    1130             :   "SOLID", "DOTTED", "DASHED", "CHOP", "SAME", "INVISIBLE", "LJUST",
    1131             :   "RJUST", "ABOVE", "BELOW", "OF", "THE", "WAY", "BETWEEN", "AND", "HERE",
    1132             :   "DOT_N", "DOT_E", "DOT_W", "DOT_S", "DOT_NE", "DOT_SE", "DOT_NW",
    1133             :   "DOT_SW", "DOT_C", "DOT_MID", "DOT_V", "DOT_START", "DOT_END", "DOT_X",
    1134             :   "DOT_Y", "DOT_HT", "DOT_WID", "DOT_RAD", "SIN", "COS", "ATAN2", "LOG",
    1135             :   "EXP", "SQRT", "K_MAX", "K_MIN", "INT", "RAND", "SRAND", "COPY", "THRU",
    1136             :   "TOP", "BOTTOM", "UPPER", "LOWER", "SH", "PRINT", "CW", "CCW", "FOR",
    1137             :   "DO", "IF", "ELSE", "ANDAND", "OROR", "NOTEQUAL", "EQUALEQUAL",
    1138             :   "LESSEQUAL", "GREATEREQUAL", "LEFT_CORNER", "RIGHT_CORNER", "NORTH",
    1139             :   "SOUTH", "EAST", "WEST", "CENTER", "END", "START", "RESET", "UNTIL",
    1140             :   "PLOT", "THICKNESS", "FILL", "COLORED", "OUTLINED", "SHADED", "XSLANTED",
    1141             :   "YSLANTED", "ALIGNED", "SPRINTF", "COMMAND", "DEFINE", "UNDEF", "'.'",
    1142             :   "'('", "'`'", "'['", "','", "'<'", "'>'", "'+'", "'-'", "'*'", "'/'",
    1143             :   "'%'", "'!'", "'^'", "';'", "'='", "':'", "'{'", "'}'", "']'", "')'",
    1144             :   "'\\''", "$accept", "top", "element_list", "middle_element_list",
    1145             :   "optional_separator", "separator", "placeless_element", "$@1", "$@2",
    1146             :   "$@3", "$@4", "$@5", "$@6", "$@7", "macro_name", "reset_variables",
    1147             :   "print_args", "print_arg", "simple_if", "$@8", "until", "any_expr",
    1148             :   "text_expr", "optional_by", "element", "@9", "$@10", "optional_element",
    1149             :   "object_spec", "@11", "text", "sprintf_args", "position",
    1150             :   "position_not_place", "between", "expr_pair", "place", "label",
    1151             :   "ordinal", "optional_ordinal_last", "nth_primitive", "object_type",
    1152             :   "label_path", "relative_path", "path", "corner", "vertex", "expr",
    1153             :   "expr_lower_than", "expr_not_lower_than", YY_NULLPTR
    1154             : };
    1155             : 
    1156             : static const char *
    1157             : yysymbol_name (yysymbol_kind_t yysymbol)
    1158             : {
    1159             :   return yytname[yysymbol];
    1160             : }
    1161             : #endif
    1162             : 
    1163             : #ifdef YYPRINT
    1164             : /* YYTOKNUM[NUM] -- (External) token number corresponding to the
    1165             :    (internal) symbol number NUM (which must be that of a token).  */
    1166             : static const yytype_int16 yytoknum[] =
    1167             : {
    1168             :        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
    1169             :      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
    1170             :      275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
    1171             :      285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
    1172             :      295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
    1173             :      305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
    1174             :      315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
    1175             :      325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
    1176             :      335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
    1177             :      345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
    1178             :      355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
    1179             :      365,   366,   367,   368,   369,   370,   371,   372,   373,   374,
    1180             :      375,   376,   377,   378,   379,   380,   381,   382,    46,    40,
    1181             :       96,    91,    44,    60,    62,    43,    45,    42,    47,    37,
    1182             :       33,    94,    59,    61,    58,   123,   125,    93,    41,    39
    1183             : };
    1184             : #endif
    1185             : 
    1186             : #define YYPACT_NINF (-148)
    1187             : 
    1188             : #define yypact_value_is_default(Yyn) \
    1189             :   ((Yyn) == YYPACT_NINF)
    1190             : 
    1191             : #define YYTABLE_NINF (-211)
    1192             : 
    1193             : #define yytable_value_is_error(Yyn) \
    1194             :   0
    1195             : 
    1196             :   /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    1197             :      STATE-NUM.  */
    1198             : static const yytype_int16 yypact[] =
    1199             : {
    1200             :     -139,  -148,     9,  -148,   742,  -120,  -148,  -117,   -84,  -148,
    1201             :     -148,  -148,  -148,  -148,  -148,  -148,  -148,  -148,  -148,  -148,
    1202             :     -108,  -148,  -148,  -148,  -148,     5,  -148,  1080,    20,  1167,
    1203             :       35,  1602,   -81,  1080,  -148,  -148,  -139,  -148,     8,   -40,
    1204             :     -148,   865,  -148,  -148,  -139,  1167,   -78,   138,   -18,  -148,
    1205             :       66,  -148,  -148,  -148,  -148,  -148,  -148,  -148,  -148,  -148,
    1206             :     -148,  -148,  -148,  -148,  -148,  -148,  -148,  -148,  1689,  1776,
    1207             :     -148,  -148,   -45,   -35,   -33,   -31,   -29,   -24,   -22,   -20,
    1208             :        6,    26,    29,  -148,  -148,    21,   182,  -148,  -148,  -148,
    1209             :     -148,  -148,  -148,  -148,  -148,  -148,  1254,  1167,  1602,  1602,
    1210             :     1080,  -148,  -148,    31,  -148,  -148,   295,  2451,    62,   285,
    1211             :     -148,    40,   111,  2352,  -148,   -47,   -32,  1167,  1167,   145,
    1212             :       48,    74,   295,  2553,  -148,  -148,  2233,   188,  1080,  -139,
    1213             :     -139,  -148,   706,  -148,   232,  -148,  -148,  -148,  -148,  1602,
    1214             :     1602,  1602,  1602,  2213,  2213,  2038,  2126,  1863,  1863,  1863,
    1215             :     1428,  1950,  -148,  -148,  2213,  2213,  2213,  -148,  -148,  -148,
    1216             :     -148,  -148,  -148,  -148,  -148,  1602,  2213,    10,    10,    10,
    1217             :     1602,  1602,  -148,  -148,  2562,   575,  -148,  1167,  -148,  -148,
    1218             :     -148,  -148,   230,  -148,  1167,  2562,  1167,  2562,  1167,  1167,
    1219             :     1167,  1167,  1167,  1167,  1167,  1167,  1167,   437,  1167,  -148,
    1220             :     -148,  -148,  -148,  -148,  -148,  -148,  -148,   103,   153,   112,
    1221             :      -51,  2364,   135,   261,   149,   149,  -148,  1950,  1950,  -148,
    1222             :     -148,  -148,  -148,  -148,   304,  -148,  -148,  -148,  -148,  -148,
    1223             :     -148,  -148,  -148,  -148,  -148,  -148,  -148,   164,  -148,  -148,
    1224             :       52,   186,    52,   268,  -148,  1602,  1602,  1602,  1602,  1602,
    1225             :     1602,  1602,  1602,  1602,  1602,  1602,  1602,  1602,  1602,  1602,
    1226             :     1863,  1863,  1602,  -148,   149,  -148,  1167,  1167,    10,    10,
    1227             :     1167,  1167,  -148,  -148,   172,   742,   176,  -148,  -148,   324,
    1228             :     2562,  2562,  2562,  2562,  2562,  2562,  2562,  2562,    31,  2352,
    1229             :       31,    31,  2464,   308,   308,   343,   993,    31,  2320,  -148,
    1230             :     -148,    40,   111,  1341,  -148,  2509,  2562,  2562,  2562,  2562,
    1231             :     2562,  -148,  -148,  -148,  2562,  2562,  -117,   -84,    95,   106,
    1232             :     -148,    31,    81,   272,  -148,   339,  -148,  2482,  2491,   200,
    1233             :      206,   223,   209,   210,   211,   228,   244,   220,  -148,   233,
    1234             :      234,  -148,  1863,  1950,  1950,  -148,  -148,  1863,  1863,  -148,
    1235             :     -148,  -148,  -148,  -148,   186,   186,   327,   347,  2577,   419,
    1236             :      419,   120,   120,  2562,   120,   120,   143,   143,   149,   149,
    1237             :      149,   149,   -48,   177,   236,   372,  -148,   347,   288,  2604,
    1238             :     -148,  -148,  -148,   347,   288,  2604,  -119,  -148,  -148,  -148,
    1239             :     -148,  -148,  2333,  2333,  -148,   251,   384,  -148,   112,  2535,
    1240             :     -148,   274,  -148,  -148,  -148,  -148,  1167,  -148,  -148,  -148,
    1241             :     1167,  1167,  -148,  -148,  -148,   -73,   241,   242,   -43,   217,
    1242             :      340,  1863,  1863,  1602,  -148,  1602,  -148,   742,  -148,  -148,
    1243             :     2333,  -148,   274,   385,  -148,   245,   249,   252,  -148,  -148,
    1244             :     -148,  1863,  1863,  -148,    31,  -102,   677,  2562,  -148,  -148,
    1245             :      253,  -148,  -148,  -148,  -148,  -148,   114,   131,  -148,  1515,
    1246             :      307,  -148,  -148,   255,  1602,  2562,  -148,  -148,  2562,   391,
    1247             :     -148
    1248             : };
    1249             : 
    1250             :   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
    1251             :      Performed when YYTABLE does not specify something else to do.  Zero
    1252             :      means the default is an error.  */
    1253             : static const yytype_int16 yydefact[] =
    1254             : {
    1255             :        7,     9,     0,     3,     2,     8,     1,     0,     0,   138,
    1256             :       18,    75,    76,    77,    78,    79,    80,    81,    82,    83,
    1257             :        0,    14,    15,    17,    16,     0,    21,     0,     0,     0,
    1258             :       36,     0,     0,     0,    87,    69,     7,    72,    35,    32,
    1259             :        5,    65,    84,    10,     7,     0,     0,     0,    23,    27,
    1260             :        0,   166,   235,   236,   169,   171,   210,   209,   165,   196,
    1261             :      197,   198,   199,   200,   201,   202,   203,   204,     0,     0,
    1262             :      205,   206,     0,     0,     0,     0,     0,     0,     0,     0,
    1263             :        0,     0,     0,   207,   208,     0,     0,   215,   216,   221,
    1264             :      222,   223,   224,   225,   227,   226,     0,     0,     0,     0,
    1265             :       20,    42,    45,    46,   142,   145,   143,   159,     0,     0,
    1266             :      167,     0,     0,    44,   232,   233,     0,     0,     0,     0,
    1267             :       52,     0,     0,    51,   233,    39,    85,     0,    19,     7,
    1268             :        7,     4,     8,    40,     0,    33,   126,   127,   128,     0,
    1269             :        0,     0,     0,    94,    96,    98,   100,     0,     0,     0,
    1270             :        0,     0,   109,   110,   111,   113,   122,   124,   125,   132,
    1271             :      133,   134,   135,   129,   130,     0,   115,     0,     0,     0,
    1272             :        0,     0,   137,   131,    93,     0,    12,     0,    38,    37,
    1273             :       11,    24,     0,    22,     0,   230,     0,   228,     0,     0,
    1274             :        0,     0,     0,     0,     0,     0,     0,     0,     0,   213,
    1275             :      211,   217,   219,   214,   212,   218,   220,     0,     0,   145,
    1276             :      143,    51,   233,     0,   248,   269,    43,     0,     0,   237,
    1277             :      238,   239,   240,   241,     0,   160,   161,   184,   172,   175,
    1278             :      176,   177,   178,   179,   180,   181,   182,     0,   173,   174,
    1279             :        0,   162,     0,     0,   155,     0,     0,     0,     0,     0,
    1280             :        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    1281             :        0,     0,     0,    61,   269,    47,     0,     0,     0,     0,
    1282             :        0,     0,    86,   140,     0,     0,     0,     6,    41,     0,
    1283             :       89,    90,    91,    92,    95,    97,    99,   101,   102,     0,
    1284             :      103,   104,   166,   169,   171,     0,     0,   107,   188,   190,
    1285             :      105,   187,   106,     0,   108,     0,   112,   114,   123,   136,
    1286             :      116,   120,   121,   119,   117,   118,   166,   235,   210,   209,
    1287             :       66,     0,    67,    68,    13,     0,    28,    51,    51,     0,
    1288             :        0,     0,     0,     0,     0,     0,     0,     0,   260,     0,
    1289             :        0,   249,     0,     0,     0,   158,   144,     0,     0,   170,
    1290             :      146,   148,   168,   183,   163,   164,     0,   267,   268,   266,
    1291             :      265,   262,   264,   157,   234,   263,   242,   243,   244,   245,
    1292             :      246,   247,     0,     0,     0,     0,    55,    56,    58,    59,
    1293             :       54,    53,    57,   267,    60,   268,     0,    88,    70,    34,
    1294             :      195,   187,     0,     0,   185,     0,     0,   189,     0,    51,
    1295             :       25,    49,   231,   229,   250,   251,     0,   253,   254,   255,
    1296             :        0,     0,   258,   259,   261,     0,   146,   148,     0,     0,
    1297             :        0,     0,     0,     0,    48,     0,   139,    73,   194,   193,
    1298             :        0,   186,    49,     0,    29,     0,     0,     0,   150,   147,
    1299             :      149,     0,     0,   156,   151,     0,    62,   141,    74,    71,
    1300             :        0,    26,    50,   252,   256,   257,   151,     0,   153,     0,
    1301             :        0,   191,   152,   153,     0,    63,    30,   154,    64,     0,
    1302             :       31
    1303             : };
    1304             : 
    1305             :   /* YYPGOTO[NTERM-NUM].  */
    1306             : static const yytype_int16 yypgoto[] =
    1307             : {
    1308             :     -148,  -148,   148,  -148,     2,   368,  -148,  -148,  -148,  -148,
    1309             :     -148,  -148,  -148,  -148,  -148,  -148,   373,   -77,  -148,  -148,
    1310             :      -23,    11,   -90,  -148,  -131,  -148,  -148,  -148,  -148,  -148,
    1311             :        4,  -148,    14,   235,   194,   -49,     3,   -86,  -148,  -148,
    1312             :     -148,   -83,  -148,  -147,  -148,  -100,   -92,   -27,  -148,    37
    1313             : };
    1314             : 
    1315             :   /* YYDEFGOTO[NTERM-NUM].  */
    1316             : static const yytype_int16 yydefgoto[] =
    1317             : {
    1318             :        0,     2,     3,    36,   275,     5,    37,    50,   325,   432,
    1319             :      182,   401,   469,   279,   180,    38,   100,   101,    39,   375,
    1320             :      434,   207,   120,   460,    40,   130,   427,   449,    41,   129,
    1321             :      121,   386,   103,   104,   260,   105,   122,   107,   108,   109,
    1322             :      110,   238,   298,   299,   300,   111,   112,   123,   114,   124
    1323             : };
    1324             : 
    1325             :   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
    1326             :      positive, shift that token.  If negative, reduce the rule whose
    1327             :      number is the opposite.  If YYTABLE_NINF, syntax error.  */
    1328             : static const yytype_int16 yytable[] =
    1329             : {
    1330             :      113,   277,     4,     1,   126,   421,   113,   225,    42,     6,
    1331             :      441,    48,   133,   425,   174,   226,     9,   219,   220,   221,
    1332             :      222,   223,    43,   216,   116,   241,   239,    44,   263,   426,
    1333             :      106,   102,   458,   217,   218,    47,   106,   102,   131,   125,
    1334             :      119,   185,   187,    51,   320,   173,   175,   209,   127,    54,
    1335             :      301,   216,   199,   200,    55,    51,   176,   135,   302,    45,
    1336             :       46,    54,   217,   218,   115,   177,    55,   181,   227,   211,
    1337             :      115,   214,   215,   113,   183,   438,   228,   229,   230,   231,
    1338             :      232,   233,   234,   235,   188,   236,   261,   217,   218,   240,
    1339             :       49,   264,   217,   218,   189,   -17,   190,   346,   191,   210,
    1340             :      192,   113,   304,   106,   102,   193,   -16,   194,   213,   195,
    1341             :      208,   262,   280,   281,   282,   283,   284,   285,   286,   287,
    1342             :      289,   289,   289,   289,   305,   201,   202,   306,   307,   308,
    1343             :      272,   106,   102,   212,    32,   196,    42,   115,   309,   310,
    1344             :      134,   178,   179,   314,   315,   390,   266,   267,   289,   395,
    1345             :      106,   106,   106,   106,   354,   197,   355,   327,   198,   328,
    1346             :      242,   288,   290,   291,   297,   115,   217,   218,   350,   351,
    1347             :       97,   311,   312,   313,   268,   269,   376,   378,   323,    42,
    1348             :      382,   384,    97,   265,   115,   115,   115,   115,   324,   321,
    1349             :      305,   305,   391,   237,   273,   213,   301,   213,   397,   329,
    1350             :      330,   331,   332,   333,   334,   335,   336,   337,   339,   340,
    1351             :      392,   393,   115,   203,   204,   241,  -142,  -142,   357,   358,
    1352             :      359,   360,   361,   362,   363,   364,   365,   366,   367,   368,
    1353             :      369,   370,   371,   289,   289,   374,   278,   -17,   326,   377,
    1354             :      379,   -17,   -17,   383,   385,   428,   429,   209,   -16,   217,
    1355             :      218,   341,   -16,   -16,   398,   254,   255,   256,   257,   258,
    1356             :      345,   259,   462,   106,   106,   463,   217,   218,   348,   211,
    1357             :      423,   349,   380,   381,   372,   373,   399,   274,   276,    42,
    1358             :      256,   257,   258,   450,   259,   342,   205,   206,   343,   344,
    1359             :      259,   227,   391,   391,   416,   417,   448,   115,   115,   210,
    1360             :      229,   230,   231,   232,   233,   234,   235,   352,   236,   422,
    1361             :      208,   353,   217,   218,   224,   289,   305,   305,   356,   387,
    1362             :      289,   289,   388,   229,   230,   231,   232,   233,   234,   235,
    1363             :      391,   236,   389,   212,   245,   246,   247,   248,   249,   250,
    1364             :      219,   220,   221,   222,   223,   106,   394,   400,   404,   442,
    1365             :      106,   106,   217,   218,   405,   406,   415,   407,   408,   409,
    1366             :      410,   418,   419,   219,   220,   221,   222,   223,   412,   252,
    1367             :      253,   254,   255,   256,   257,   258,   411,   259,   420,   115,
    1368             :      424,   413,   414,   430,   115,   115,   266,   431,   433,   439,
    1369             :      440,   452,   443,   453,   289,   289,   446,   454,   447,   470,
    1370             :      455,   461,   466,   467,   132,   347,   128,  -143,  -143,   451,
    1371             :      322,     0,     0,     0,   289,   289,   237,   435,     0,     0,
    1372             :        0,   436,   437,     0,   106,   106,     0,     0,     0,     0,
    1373             :        0,    42,   465,     0,     0,   444,   445,   468,     0,   237,
    1374             :       51,    52,    53,     9,   106,   106,    54,   247,   248,   249,
    1375             :      250,    55,     0,     0,     0,   456,   457,     0,   115,   115,
    1376             :        0,     0,     0,     0,     0,     0,     0,     0,    56,    57,
    1377             :        0,     0,     0,     0,     0,     0,     0,     0,   115,   115,
    1378             :      252,   253,   254,   255,   256,   257,   258,     0,   259,     0,
    1379             :        0,    58,    59,    60,    61,    62,    63,    64,    65,    66,
    1380             :       67,    68,    69,    70,    71,     0,     0,     0,     0,     0,
    1381             :       72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
    1382             :       82,   249,   250,    83,    84,    85,    86,     0,     0,     0,
    1383             :        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    1384             :        0,    87,    88,    89,    90,    91,    92,    93,    94,    95,
    1385             :        0,     0,   252,   253,   254,   255,   256,   257,   258,     0,
    1386             :      259,    32,     0,     0,     0,     0,   117,    97,     0,     0,
    1387             :        0,     0,     0,    98,     0,     0,     0,   118,   316,   317,
    1388             :       53,     9,    10,     0,    54,   338,     0,     0,     0,    55,
    1389             :       11,    12,    13,    14,    15,    16,    17,    18,    19,     0,
    1390             :        0,    20,     0,     0,    21,    22,   318,   319,     0,     0,
    1391             :        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    1392             :        0,     0,     0,     0,     0,     0,     0,     0,     0,    58,
    1393             :       59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
    1394             :       69,    70,    71,     0,     0,     0,     0,     0,    72,    73,
    1395             :       74,    75,    76,    77,    78,    79,    80,    81,    82,    25,
    1396             :        0,    83,    84,    85,    86,    26,    27,     0,     0,    28,
    1397             :        0,    29,     0,     0,     0,     0,     0,     0,     0,    87,
    1398             :       88,    89,    90,    91,    92,    93,    94,    95,    30,     0,
    1399             :       31,     0,     0,     0,     0,     0,     0,     0,     0,    32,
    1400             :       33,     0,     0,     0,    96,    97,    34,     0,     0,     7,
    1401             :        8,    98,     9,    10,   459,    99,     0,     0,     0,     0,
    1402             :       35,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    1403             :        0,     0,    20,     0,     0,    21,    22,    23,    24,     0,
    1404             :        0,     0,     0,     0,     0,     7,     8,     0,     9,    10,
    1405             :        0,     0,     0,     0,     0,     0,     0,    11,    12,    13,
    1406             :       14,    15,    16,    17,    18,    19,     0,     0,    20,     0,
    1407             :        0,    21,    22,    23,    24,   245,   246,   247,   248,   249,
    1408             :      250,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    1409             :       25,     0,     0,     0,     0,     0,    26,    27,     0,     0,
    1410             :       28,     0,    29,     0,     0,     0,     0,     0,     0,     0,
    1411             :      252,   253,   254,   255,   256,   257,   258,     0,   259,    30,
    1412             :        0,    31,     0,     0,     0,     0,    25,     0,     0,     0,
    1413             :       32,    33,    26,    27,     0,     0,    28,    34,    29,     0,
    1414             :        0,     0,     0,     0,     0,     0,     0,     0,    43,     0,
    1415             :        0,    35,     0,     0,     0,    30,     0,    31,     0,     0,
    1416             :        0,     0,     0,     0,     0,     0,    32,    33,    51,    52,
    1417             :       53,     9,     0,    34,    54,     0,   136,   137,   138,    55,
    1418             :        0,     0,     0,     0,     0,     0,     0,    35,     0,   139,
    1419             :      140,     0,   141,   142,   143,   144,   145,   146,   147,   148,
    1420             :      149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
    1421             :      159,   160,   161,   162,     0,     0,     0,     0,     0,    58,
    1422             :       59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
    1423             :       69,    70,    71,     0,     0,     0,     0,     0,    72,    73,
    1424             :       74,    75,    76,    77,    78,    79,    80,    81,    82,     0,
    1425             :        0,    83,    84,    85,    86,     0,     0,   163,   164,     0,
    1426             :        0,     0,     0,     0,     0,     0,     0,     0,     0,    87,
    1427             :       88,    89,    90,    91,    92,    93,    94,    95,     0,     0,
    1428             :        0,   165,   166,   167,   168,   169,   170,   171,   172,    32,
    1429             :        0,     0,     0,     0,   117,    97,    51,    52,    53,     9,
    1430             :        0,    98,    54,     0,     0,    99,     0,    55,     0,     0,
    1431             :        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    1432             :        0,     0,     0,     0,    56,    57,     0,     0,     0,     0,
    1433             :        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    1434             :        0,     0,     0,     0,     0,     0,     0,    58,    59,    60,
    1435             :       61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
    1436             :       71,     0,     0,     0,     0,     0,    72,    73,    74,    75,
    1437             :       76,    77,    78,    79,    80,    81,    82,     0,     0,    83,
    1438             :       84,    85,    86,    51,    52,    53,     9,     0,     0,    54,
    1439             :        0,     0,     0,     0,    55,     0,     0,    87,    88,    89,
    1440             :       90,    91,    92,    93,    94,    95,     0,     0,     0,     0,
    1441             :        0,    56,    57,     0,     0,     0,     0,    32,     0,     0,
    1442             :        0,   295,    96,    97,     0,     0,     0,     0,     0,    98,
    1443             :        0,     0,     0,   118,    58,    59,    60,    61,    62,    63,
    1444             :       64,    65,    66,    67,    68,    69,    70,    71,     0,     0,
    1445             :        0,     0,     0,    72,    73,    74,    75,    76,    77,    78,
    1446             :       79,    80,    81,    82,     0,     0,    83,    84,    85,    86,
    1447             :       51,    52,    53,     9,     0,     0,    54,     0,     0,     0,
    1448             :        0,    55,     0,     0,    87,    88,    89,    90,    91,    92,
    1449             :       93,    94,    95,     0,     0,     0,     0,     0,    56,    57,
    1450             :        0,     0,     0,     0,    32,     0,     0,     0,     0,    96,
    1451             :       97,     0,     0,     0,     0,     0,    98,     0,     0,     0,
    1452             :       99,    58,    59,    60,    61,    62,    63,    64,    65,    66,
    1453             :       67,    68,    69,    70,    71,     0,     0,     0,     0,     0,
    1454             :       72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
    1455             :       82,     0,     0,    83,    84,    85,    86,    51,    52,    53,
    1456             :        9,     0,     0,    54,     0,     0,     0,     0,    55,     0,
    1457             :        0,    87,    88,    89,    90,    91,    92,    93,    94,    95,
    1458             :        0,     0,     0,     0,     0,    56,    57,     0,     0,     0,
    1459             :        0,    32,     0,     0,     0,     0,   117,    97,     0,     0,
    1460             :        0,     0,     0,    98,     0,     0,     0,   118,    58,    59,
    1461             :       60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
    1462             :       70,    71,     0,     0,     0,     0,     0,    72,    73,    74,
    1463             :       75,    76,    77,    78,    79,    80,    81,    82,     0,     0,
    1464             :       83,    84,    85,    86,    51,    52,    53,     9,     0,     0,
    1465             :       54,     0,     0,     0,     0,    55,     0,     0,    87,    88,
    1466             :       89,    90,    91,    92,    93,    94,    95,     0,     0,     0,
    1467             :        0,     0,    56,    57,     0,     0,     0,     0,    32,     0,
    1468             :        0,     0,     0,    96,    97,     0,     0,     0,     0,     0,
    1469             :       98,     0,     0,     0,   118,    58,    59,    60,    61,    62,
    1470             :       63,    64,    65,    66,    67,    68,    69,    70,    71,     0,
    1471             :        0,     0,     0,     0,    72,    73,    74,    75,    76,    77,
    1472             :       78,    79,    80,    81,    82,     0,     0,    83,    84,    85,
    1473             :       86,   292,    52,    53,     0,     0,     0,   293,     0,     0,
    1474             :        0,     0,   294,     0,     0,    87,    88,    89,    90,    91,
    1475             :       92,    93,    94,    95,     0,     0,     0,     0,     0,    56,
    1476             :       57,     0,     0,     0,     0,    32,     0,     0,     0,     0,
    1477             :      303,    97,     0,     0,     0,     0,     0,    98,     0,     0,
    1478             :        0,   118,    58,    59,    60,    61,    62,    63,    64,    65,
    1479             :       66,    67,    68,    69,    70,    71,     0,     0,     0,     0,
    1480             :        0,    72,    73,    74,    75,    76,    77,    78,    79,    80,
    1481             :       81,    82,     0,     0,    83,    84,    85,    86,    51,    52,
    1482             :       53,     0,     0,     0,    54,     0,     0,     0,     0,    55,
    1483             :        0,     0,    87,    88,    89,    90,    91,    92,    93,    94,
    1484             :       95,     0,     0,     0,     0,     0,    56,    57,     0,     0,
    1485             :        0,     0,     0,     0,     0,     0,   295,   296,    97,     0,
    1486             :        0,     0,     0,     0,    98,     0,     0,     0,    99,    58,
    1487             :       59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
    1488             :       69,    70,    71,     0,     0,     0,     0,     0,    72,    73,
    1489             :       74,    75,    76,    77,    78,    79,    80,    81,    82,     0,
    1490             :        0,    83,    84,    85,    86,    51,    52,    53,     0,     0,
    1491             :        0,    54,     0,     0,     0,     0,    55,     0,     0,    87,
    1492             :       88,    89,    90,    91,    92,    93,    94,    95,     0,     0,
    1493             :        0,     0,     0,    56,    57,     0,     0,     0,     0,     0,
    1494             :        0,     0,     0,     0,   117,    97,     0,     0,     0,     0,
    1495             :        0,    98,   464,     0,     0,    99,    58,    59,    60,    61,
    1496             :       62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
    1497             :        0,     0,     0,     0,     0,    72,    73,    74,    75,    76,
    1498             :       77,    78,    79,    80,    81,    82,     0,     0,    83,    84,
    1499             :       85,    86,    51,    52,    53,     0,     0,     0,    54,     0,
    1500             :        0,     0,     0,    55,     0,     0,    87,    88,    89,    90,
    1501             :       91,    92,    93,    94,    95,     0,     0,     0,     0,     0,
    1502             :       56,    57,     0,     0,     0,     0,     0,     0,     0,     0,
    1503             :        0,   117,    97,     0,     0,     0,     0,     0,    98,     0,
    1504             :        0,     0,    99,    58,    59,    60,    61,    62,    63,    64,
    1505             :       65,    66,    67,    68,    69,    70,    71,     0,     0,     0,
    1506             :        0,     0,    72,    73,    74,    75,    76,    77,    78,    79,
    1507             :       80,    81,    82,     0,     0,    83,    84,    85,    86,    51,
    1508             :       52,    53,     0,     0,     0,    54,     0,     0,     0,     0,
    1509             :       55,     0,     0,    87,    88,    89,    90,    91,    92,    93,
    1510             :       94,    95,     0,     0,     0,     0,     0,    56,    57,     0,
    1511             :        0,     0,     0,     0,     0,     0,     0,     0,   117,   184,
    1512             :        0,     0,     0,     0,     0,    98,     0,     0,     0,    99,
    1513             :       58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
    1514             :       68,    69,    70,    71,     0,     0,     0,     0,     0,    72,
    1515             :       73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
    1516             :        0,     0,    83,    84,    85,    86,    51,    52,    53,     0,
    1517             :        0,     0,    54,     0,     0,     0,     0,    55,     0,     0,
    1518             :       87,    88,    89,    90,    91,    92,    93,    94,    95,     0,
    1519             :        0,     0,     0,     0,    56,    57,     0,     0,     0,     0,
    1520             :        0,     0,     0,     0,     0,   117,   186,     0,     0,     0,
    1521             :        0,     0,    98,     0,     0,     0,    99,    58,    59,    60,
    1522             :       61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
    1523             :       71,     0,     0,     0,     0,     0,    72,    73,    74,    75,
    1524             :       76,    77,    78,    79,    80,    81,    82,     0,     0,    83,
    1525             :       84,    85,    86,    51,    52,    53,     0,     0,     0,    54,
    1526             :        0,     0,     0,     0,    55,     0,     0,    87,    88,    89,
    1527             :       90,    91,    92,    93,    94,    95,     0,     0,     0,     0,
    1528             :        0,    56,    57,     0,     0,     0,     0,     0,     0,     0,
    1529             :        0,     0,    96,    97,     0,     0,     0,     0,     0,    98,
    1530             :        0,     0,     0,    99,    58,    59,    60,    61,    62,    63,
    1531             :       64,    65,    66,    67,    68,    69,    70,    71,     0,     0,
    1532             :        0,     0,     0,    72,    73,    74,    75,    76,    77,    78,
    1533             :       79,    80,    81,    82,     0,     0,    83,    84,    85,    86,
    1534             :        0,    51,    52,    53,     0,     0,     0,    54,     0,     0,
    1535             :        0,     0,    55,     0,    87,    88,    89,    90,    91,    92,
    1536             :       93,    94,    95,     0,     0,     0,     0,     0,     0,     0,
    1537             :        0,     0,     0,     0,     0,     0,     0,     0,     0,   303,
    1538             :       97,     0,     0,     0,     0,     0,    98,  -210,     0,     0,
    1539             :       99,     0,    58,    59,    60,    61,    62,    63,    64,    65,
    1540             :       66,    67,    68,    69,    70,    71,     0,     0,     0,     0,
    1541             :        0,    72,    73,    74,    75,    76,    77,    78,    79,    80,
    1542             :       81,    82,     0,     0,    83,    84,    85,    86,     0,    51,
    1543             :       52,    53,     0,     0,     0,    54,     0,     0,     0,     0,
    1544             :       55,     0,    87,    88,    89,    90,    91,    92,    93,    94,
    1545             :       95,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    1546             :        0,     0,     0,     0,     0,     0,     0,   117,    97,     0,
    1547             :        0,     0,     0,     0,    98,  -209,     0,     0,    99,     0,
    1548             :       58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
    1549             :       68,    69,    70,    71,     0,     0,     0,     0,     0,    72,
    1550             :       73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
    1551             :        0,     0,    83,    84,    85,    86,    51,    52,    53,     0,
    1552             :        0,     0,    54,     0,     0,     0,     0,    55,     0,     0,
    1553             :       87,    88,    89,    90,    91,    92,    93,    94,    95,     9,
    1554             :        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    1555             :        0,     0,     0,     0,     0,   117,    97,     0,     0,     0,
    1556             :        0,     0,    98,     0,     0,     0,    99,    58,    59,    60,
    1557             :       61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
    1558             :       71,     0,     0,     0,     0,     0,    72,    73,    74,    75,
    1559             :       76,    77,    78,    79,    80,    81,    82,     0,     0,    83,
    1560             :       84,    85,    86,     0,     0,     0,     0,     0,     0,     0,
    1561             :        0,     0,     0,     0,     0,     0,     0,    87,    88,    89,
    1562             :       90,    91,    92,    93,    94,    95,     0,     0,     0,     0,
    1563             :        0,   245,   246,   247,   248,   249,   250,     0,     0,     0,
    1564             :        0,     0,   117,    97,     0,     0,     0,     0,     0,    98,
    1565             :        0,    56,    57,    99,     0,     0,     0,    32,     0,     0,
    1566             :        0,     0,     0,     0,    56,    57,   252,   253,   254,   255,
    1567             :      256,   257,   258,     0,   259,    59,    60,    61,    62,    63,
    1568             :       64,    65,    66,    67,     0,     0,    70,    71,    59,    60,
    1569             :       61,    62,    63,    64,    65,    66,    67,     0,     0,    70,
    1570             :       71,   243,     0,     0,   244,     0,    83,    84,    85,    86,
    1571             :        0,     0,     0,   243,     0,     0,   244,     0,     0,    83,
    1572             :       84,    85,    86,     0,    87,    88,    89,    90,    91,    92,
    1573             :       93,    94,    95,     0,     0,     0,     0,    87,    88,    89,
    1574             :       90,    91,    92,    93,    94,    95,     0,     0,   396,     0,
    1575             :      245,   246,   247,   248,   249,   250,     0,     0,     0,     0,
    1576             :        0,   295,   270,   271,   247,   248,   249,   250,     0,     0,
    1577             :        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    1578             :        0,     0,     0,     0,   251,   252,   253,   254,   255,   256,
    1579             :      257,   258,     0,   259,     0,     0,   251,   252,   253,   254,
    1580             :      255,   256,   257,   258,     0,   259,    59,    60,    61,    62,
    1581             :       63,    64,    65,    66,    67,    68,    69,    70,    71,    59,
    1582             :       60,    61,    62,    63,    64,    65,    66,    67,     0,     0,
    1583             :       70,    71,     0,     0,     0,     0,     0,    83,    84,    85,
    1584             :       86,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    1585             :       83,    84,    85,    86,     0,    87,    88,    89,    90,    91,
    1586             :       92,    93,    94,    95,     0,     0,     0,     0,    87,    88,
    1587             :       89,    90,    91,    92,    93,    94,    95,     0,     0,   224,
    1588             :      270,   271,   247,   248,   249,   250,     0,     0,     0,   270,
    1589             :      271,   247,   248,   249,   250,     0,     0,     0,     0,     0,
    1590             :        0,     0,     0,     0,     0,     0,     0,   245,   246,   247,
    1591             :      248,   249,   250,     0,     0,   252,   253,   254,   255,   256,
    1592             :      257,   258,     0,   259,   252,   253,   254,   255,   256,   257,
    1593             :      258,   402,   259,   270,   271,   247,   248,   249,   250,     0,
    1594             :      403,   251,   252,   253,   254,   255,   256,   257,   258,     0,
    1595             :      259,   270,   271,   247,   248,   249,   250,     0,     0,     0,
    1596             :      245,   246,   247,   248,   249,   250,     0,   251,   252,   253,
    1597             :      254,   255,   256,   257,   258,   245,   259,   247,   248,   249,
    1598             :      250,     0,     0,     0,     0,     0,   252,   253,   254,   255,
    1599             :      256,   257,   258,     0,   259,   252,   253,   254,   255,   256,
    1600             :      257,   258,   270,   259,   247,   248,   249,   250,     0,     0,
    1601             :      252,   253,   254,   255,   256,   257,   258,     0,   259,     0,
    1602             :        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    1603             :        0,     0,     0,     0,     0,     0,     0,   252,   253,   254,
    1604             :      255,   256,   257,   258,     0,   259
    1605             : };
    1606             : 
    1607             : static const yytype_int16 yycheck[] =
    1608             : {
    1609             :       27,   132,     0,   142,    31,    53,    33,   107,     4,     0,
    1610             :       53,     6,     4,   132,    41,   107,     6,    68,    69,    70,
    1611             :       71,    72,   142,   100,     4,   111,   109,   144,   118,   148,
    1612             :       27,    27,   134,   135,   136,   143,    33,    33,    36,     4,
    1613             :       29,    68,    69,     3,   175,    41,    44,    96,   129,     9,
    1614             :      150,   128,    31,    32,    14,     3,    45,    97,   150,   143,
    1615             :      144,     9,   135,   136,    27,   143,    14,    85,     6,    96,
    1616             :       33,    98,    99,   100,     8,   148,    14,    15,    16,    17,
    1617             :       18,    19,    20,    21,   129,    23,   133,   135,   136,    49,
    1618             :       85,   118,   135,   136,   129,     0,   129,   148,   129,    96,
    1619             :      129,   128,   151,   100,   100,   129,     0,   129,    97,   129,
    1620             :       96,   143,   139,   140,   141,   142,   143,   144,   145,   146,
    1621             :      147,   148,   149,   150,   151,   104,   105,   154,   155,   156,
    1622             :      126,   128,   128,    96,   124,   129,   132,   100,   165,   166,
    1623             :      132,     3,     4,   170,   171,   292,    98,    99,   175,   296,
    1624             :      147,   148,   149,   150,   240,   129,   242,   184,   129,   186,
    1625             :       49,   147,   148,   149,   150,   128,   135,   136,   217,   218,
    1626             :      130,   167,   168,   169,   100,   101,   266,   267,   175,   175,
    1627             :      270,   271,   130,    38,   147,   148,   149,   150,   177,   175,
    1628             :      217,   218,   292,   131,     6,   184,   296,   186,   298,   188,
    1629             :      189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
    1630             :      293,   294,   175,    31,    32,   301,   135,   136,   245,   246,
    1631             :      247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
    1632             :      257,   258,   259,   260,   261,   262,     4,   142,     8,   266,
    1633             :      267,   146,   147,   270,   271,   392,   393,   296,   142,   135,
    1634             :      136,   148,   146,   147,   303,   135,   136,   137,   138,   139,
    1635             :      148,   141,   148,   260,   261,   134,   135,   136,   133,   296,
    1636             :       34,    10,   268,   269,   260,   261,   303,   129,   130,   275,
    1637             :      137,   138,   139,   430,   141,   132,   104,   105,   135,   136,
    1638             :      141,     6,   392,   393,   343,   344,   427,   260,   261,   296,
    1639             :       15,    16,    17,    18,    19,    20,    21,     3,    23,   132,
    1640             :      296,   147,   135,   136,   128,   342,   343,   344,    50,   147,
    1641             :      347,   348,   146,    15,    16,    17,    18,    19,    20,    21,
    1642             :      430,    23,     8,   296,    98,    99,   100,   101,   102,   103,
    1643             :       68,    69,    70,    71,    72,   342,     3,     8,   148,   132,
    1644             :      347,   348,   135,   136,   148,   132,   342,   148,   148,   148,
    1645             :      132,   347,   348,    68,    69,    70,    71,    72,   148,   133,
    1646             :      134,   135,   136,   137,   138,   139,   132,   141,    51,   342,
    1647             :        8,   148,   148,   132,   347,   348,    98,     3,   114,   148,
    1648             :      148,     6,    52,   148,   421,   422,   423,   148,   425,     8,
    1649             :      148,   148,    95,   148,    36,   211,    33,   135,   136,   432,
    1650             :      175,    -1,    -1,    -1,   441,   442,   131,   406,    -1,    -1,
    1651             :       -1,   410,   411,    -1,   421,   422,    -1,    -1,    -1,    -1,
    1652             :       -1,   427,   459,    -1,    -1,   421,   422,   464,    -1,   131,
    1653             :        3,     4,     5,     6,   441,   442,     9,   100,   101,   102,
    1654             :      103,    14,    -1,    -1,    -1,   441,   442,    -1,   421,   422,
    1655             :       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    31,    32,
    1656             :       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   441,   442,
    1657             :      133,   134,   135,   136,   137,   138,   139,    -1,   141,    -1,
    1658             :       -1,    54,    55,    56,    57,    58,    59,    60,    61,    62,
    1659             :       63,    64,    65,    66,    67,    -1,    -1,    -1,    -1,    -1,
    1660             :       73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
    1661             :       83,   102,   103,    86,    87,    88,    89,    -1,    -1,    -1,
    1662             :       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    1663             :       -1,   104,   105,   106,   107,   108,   109,   110,   111,   112,
    1664             :       -1,    -1,   133,   134,   135,   136,   137,   138,   139,    -1,
    1665             :      141,   124,    -1,    -1,    -1,    -1,   129,   130,    -1,    -1,
    1666             :       -1,    -1,    -1,   136,    -1,    -1,    -1,   140,     3,     4,
    1667             :        5,     6,     7,    -1,     9,   148,    -1,    -1,    -1,    14,
    1668             :       15,    16,    17,    18,    19,    20,    21,    22,    23,    -1,
    1669             :       -1,    26,    -1,    -1,    29,    30,    31,    32,    -1,    -1,
    1670             :       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    1671             :       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    54,
    1672             :       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
    1673             :       65,    66,    67,    -1,    -1,    -1,    -1,    -1,    73,    74,
    1674             :       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
    1675             :       -1,    86,    87,    88,    89,    90,    91,    -1,    -1,    94,
    1676             :       -1,    96,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   104,
    1677             :      105,   106,   107,   108,   109,   110,   111,   112,   113,    -1,
    1678             :      115,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   124,
    1679             :      125,    -1,    -1,    -1,   129,   130,   131,    -1,    -1,     3,
    1680             :        4,   136,     6,     7,    37,   140,    -1,    -1,    -1,    -1,
    1681             :      145,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    1682             :       -1,    -1,    26,    -1,    -1,    29,    30,    31,    32,    -1,
    1683             :       -1,    -1,    -1,    -1,    -1,     3,     4,    -1,     6,     7,
    1684             :       -1,    -1,    -1,    -1,    -1,    -1,    -1,    15,    16,    17,
    1685             :       18,    19,    20,    21,    22,    23,    -1,    -1,    26,    -1,
    1686             :       -1,    29,    30,    31,    32,    98,    99,   100,   101,   102,
    1687             :      103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    1688             :       84,    -1,    -1,    -1,    -1,    -1,    90,    91,    -1,    -1,
    1689             :       94,    -1,    96,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    1690             :      133,   134,   135,   136,   137,   138,   139,    -1,   141,   113,
    1691             :       -1,   115,    -1,    -1,    -1,    -1,    84,    -1,    -1,    -1,
    1692             :      124,   125,    90,    91,    -1,    -1,    94,   131,    96,    -1,
    1693             :       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   142,    -1,
    1694             :       -1,   145,    -1,    -1,    -1,   113,    -1,   115,    -1,    -1,
    1695             :       -1,    -1,    -1,    -1,    -1,    -1,   124,   125,     3,     4,
    1696             :        5,     6,    -1,   131,     9,    -1,    11,    12,    13,    14,
    1697             :       -1,    -1,    -1,    -1,    -1,    -1,    -1,   145,    -1,    24,
    1698             :       25,    -1,    27,    28,    29,    30,    31,    32,    33,    34,
    1699             :       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
    1700             :       45,    46,    47,    48,    -1,    -1,    -1,    -1,    -1,    54,
    1701             :       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
    1702             :       65,    66,    67,    -1,    -1,    -1,    -1,    -1,    73,    74,
    1703             :       75,    76,    77,    78,    79,    80,    81,    82,    83,    -1,
    1704             :       -1,    86,    87,    88,    89,    -1,    -1,    92,    93,    -1,
    1705             :       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   104,
    1706             :      105,   106,   107,   108,   109,   110,   111,   112,    -1,    -1,
    1707             :       -1,   116,   117,   118,   119,   120,   121,   122,   123,   124,
    1708             :       -1,    -1,    -1,    -1,   129,   130,     3,     4,     5,     6,
    1709             :       -1,   136,     9,    -1,    -1,   140,    -1,    14,    -1,    -1,
    1710             :       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    1711             :       -1,    -1,    -1,    -1,    31,    32,    -1,    -1,    -1,    -1,
    1712             :       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    1713             :       -1,    -1,    -1,    -1,    -1,    -1,    -1,    54,    55,    56,
    1714             :       57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
    1715             :       67,    -1,    -1,    -1,    -1,    -1,    73,    74,    75,    76,
    1716             :       77,    78,    79,    80,    81,    82,    83,    -1,    -1,    86,
    1717             :       87,    88,    89,     3,     4,     5,     6,    -1,    -1,     9,
    1718             :       -1,    -1,    -1,    -1,    14,    -1,    -1,   104,   105,   106,
    1719             :      107,   108,   109,   110,   111,   112,    -1,    -1,    -1,    -1,
    1720             :       -1,    31,    32,    -1,    -1,    -1,    -1,   124,    -1,    -1,
    1721             :       -1,   128,   129,   130,    -1,    -1,    -1,    -1,    -1,   136,
    1722             :       -1,    -1,    -1,   140,    54,    55,    56,    57,    58,    59,
    1723             :       60,    61,    62,    63,    64,    65,    66,    67,    -1,    -1,
    1724             :       -1,    -1,    -1,    73,    74,    75,    76,    77,    78,    79,
    1725             :       80,    81,    82,    83,    -1,    -1,    86,    87,    88,    89,
    1726             :        3,     4,     5,     6,    -1,    -1,     9,    -1,    -1,    -1,
    1727             :       -1,    14,    -1,    -1,   104,   105,   106,   107,   108,   109,
    1728             :      110,   111,   112,    -1,    -1,    -1,    -1,    -1,    31,    32,
    1729             :       -1,    -1,    -1,    -1,   124,    -1,    -1,    -1,    -1,   129,
    1730             :      130,    -1,    -1,    -1,    -1,    -1,   136,    -1,    -1,    -1,
    1731             :      140,    54,    55,    56,    57,    58,    59,    60,    61,    62,
    1732             :       63,    64,    65,    66,    67,    -1,    -1,    -1,    -1,    -1,
    1733             :       73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
    1734             :       83,    -1,    -1,    86,    87,    88,    89,     3,     4,     5,
    1735             :        6,    -1,    -1,     9,    -1,    -1,    -1,    -1,    14,    -1,
    1736             :       -1,   104,   105,   106,   107,   108,   109,   110,   111,   112,
    1737             :       -1,    -1,    -1,    -1,    -1,    31,    32,    -1,    -1,    -1,
    1738             :       -1,   124,    -1,    -1,    -1,    -1,   129,   130,    -1,    -1,
    1739             :       -1,    -1,    -1,   136,    -1,    -1,    -1,   140,    54,    55,
    1740             :       56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
    1741             :       66,    67,    -1,    -1,    -1,    -1,    -1,    73,    74,    75,
    1742             :       76,    77,    78,    79,    80,    81,    82,    83,    -1,    -1,
    1743             :       86,    87,    88,    89,     3,     4,     5,     6,    -1,    -1,
    1744             :        9,    -1,    -1,    -1,    -1,    14,    -1,    -1,   104,   105,
    1745             :      106,   107,   108,   109,   110,   111,   112,    -1,    -1,    -1,
    1746             :       -1,    -1,    31,    32,    -1,    -1,    -1,    -1,   124,    -1,
    1747             :       -1,    -1,    -1,   129,   130,    -1,    -1,    -1,    -1,    -1,
    1748             :      136,    -1,    -1,    -1,   140,    54,    55,    56,    57,    58,
    1749             :       59,    60,    61,    62,    63,    64,    65,    66,    67,    -1,
    1750             :       -1,    -1,    -1,    -1,    73,    74,    75,    76,    77,    78,
    1751             :       79,    80,    81,    82,    83,    -1,    -1,    86,    87,    88,
    1752             :       89,     3,     4,     5,    -1,    -1,    -1,     9,    -1,    -1,
    1753             :       -1,    -1,    14,    -1,    -1,   104,   105,   106,   107,   108,
    1754             :      109,   110,   111,   112,    -1,    -1,    -1,    -1,    -1,    31,
    1755             :       32,    -1,    -1,    -1,    -1,   124,    -1,    -1,    -1,    -1,
    1756             :      129,   130,    -1,    -1,    -1,    -1,    -1,   136,    -1,    -1,
    1757             :       -1,   140,    54,    55,    56,    57,    58,    59,    60,    61,
    1758             :       62,    63,    64,    65,    66,    67,    -1,    -1,    -1,    -1,
    1759             :       -1,    73,    74,    75,    76,    77,    78,    79,    80,    81,
    1760             :       82,    83,    -1,    -1,    86,    87,    88,    89,     3,     4,
    1761             :        5,    -1,    -1,    -1,     9,    -1,    -1,    -1,    -1,    14,
    1762             :       -1,    -1,   104,   105,   106,   107,   108,   109,   110,   111,
    1763             :      112,    -1,    -1,    -1,    -1,    -1,    31,    32,    -1,    -1,
    1764             :       -1,    -1,    -1,    -1,    -1,    -1,   128,   129,   130,    -1,
    1765             :       -1,    -1,    -1,    -1,   136,    -1,    -1,    -1,   140,    54,
    1766             :       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
    1767             :       65,    66,    67,    -1,    -1,    -1,    -1,    -1,    73,    74,
    1768             :       75,    76,    77,    78,    79,    80,    81,    82,    83,    -1,
    1769             :       -1,    86,    87,    88,    89,     3,     4,     5,    -1,    -1,
    1770             :       -1,     9,    -1,    -1,    -1,    -1,    14,    -1,    -1,   104,
    1771             :      105,   106,   107,   108,   109,   110,   111,   112,    -1,    -1,
    1772             :       -1,    -1,    -1,    31,    32,    -1,    -1,    -1,    -1,    -1,
    1773             :       -1,    -1,    -1,    -1,   129,   130,    -1,    -1,    -1,    -1,
    1774             :       -1,   136,   137,    -1,    -1,   140,    54,    55,    56,    57,
    1775             :       58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
    1776             :       -1,    -1,    -1,    -1,    -1,    73,    74,    75,    76,    77,
    1777             :       78,    79,    80,    81,    82,    83,    -1,    -1,    86,    87,
    1778             :       88,    89,     3,     4,     5,    -1,    -1,    -1,     9,    -1,
    1779             :       -1,    -1,    -1,    14,    -1,    -1,   104,   105,   106,   107,
    1780             :      108,   109,   110,   111,   112,    -1,    -1,    -1,    -1,    -1,
    1781             :       31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    1782             :       -1,   129,   130,    -1,    -1,    -1,    -1,    -1,   136,    -1,
    1783             :       -1,    -1,   140,    54,    55,    56,    57,    58,    59,    60,
    1784             :       61,    62,    63,    64,    65,    66,    67,    -1,    -1,    -1,
    1785             :       -1,    -1,    73,    74,    75,    76,    77,    78,    79,    80,
    1786             :       81,    82,    83,    -1,    -1,    86,    87,    88,    89,     3,
    1787             :        4,     5,    -1,    -1,    -1,     9,    -1,    -1,    -1,    -1,
    1788             :       14,    -1,    -1,   104,   105,   106,   107,   108,   109,   110,
    1789             :      111,   112,    -1,    -1,    -1,    -1,    -1,    31,    32,    -1,
    1790             :       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   129,   130,
    1791             :       -1,    -1,    -1,    -1,    -1,   136,    -1,    -1,    -1,   140,
    1792             :       54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
    1793             :       64,    65,    66,    67,    -1,    -1,    -1,    -1,    -1,    73,
    1794             :       74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
    1795             :       -1,    -1,    86,    87,    88,    89,     3,     4,     5,    -1,
    1796             :       -1,    -1,     9,    -1,    -1,    -1,    -1,    14,    -1,    -1,
    1797             :      104,   105,   106,   107,   108,   109,   110,   111,   112,    -1,
    1798             :       -1,    -1,    -1,    -1,    31,    32,    -1,    -1,    -1,    -1,
    1799             :       -1,    -1,    -1,    -1,    -1,   129,   130,    -1,    -1,    -1,
    1800             :       -1,    -1,   136,    -1,    -1,    -1,   140,    54,    55,    56,
    1801             :       57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
    1802             :       67,    -1,    -1,    -1,    -1,    -1,    73,    74,    75,    76,
    1803             :       77,    78,    79,    80,    81,    82,    83,    -1,    -1,    86,
    1804             :       87,    88,    89,     3,     4,     5,    -1,    -1,    -1,     9,
    1805             :       -1,    -1,    -1,    -1,    14,    -1,    -1,   104,   105,   106,
    1806             :      107,   108,   109,   110,   111,   112,    -1,    -1,    -1,    -1,
    1807             :       -1,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    1808             :       -1,    -1,   129,   130,    -1,    -1,    -1,    -1,    -1,   136,
    1809             :       -1,    -1,    -1,   140,    54,    55,    56,    57,    58,    59,
    1810             :       60,    61,    62,    63,    64,    65,    66,    67,    -1,    -1,
    1811             :       -1,    -1,    -1,    73,    74,    75,    76,    77,    78,    79,
    1812             :       80,    81,    82,    83,    -1,    -1,    86,    87,    88,    89,
    1813             :       -1,     3,     4,     5,    -1,    -1,    -1,     9,    -1,    -1,
    1814             :       -1,    -1,    14,    -1,   104,   105,   106,   107,   108,   109,
    1815             :      110,   111,   112,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    1816             :       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   129,
    1817             :      130,    -1,    -1,    -1,    -1,    -1,   136,    49,    -1,    -1,
    1818             :      140,    -1,    54,    55,    56,    57,    58,    59,    60,    61,
    1819             :       62,    63,    64,    65,    66,    67,    -1,    -1,    -1,    -1,
    1820             :       -1,    73,    74,    75,    76,    77,    78,    79,    80,    81,
    1821             :       82,    83,    -1,    -1,    86,    87,    88,    89,    -1,     3,
    1822             :        4,     5,    -1,    -1,    -1,     9,    -1,    -1,    -1,    -1,
    1823             :       14,    -1,   104,   105,   106,   107,   108,   109,   110,   111,
    1824             :      112,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    1825             :       -1,    -1,    -1,    -1,    -1,    -1,    -1,   129,   130,    -1,
    1826             :       -1,    -1,    -1,    -1,   136,    49,    -1,    -1,   140,    -1,
    1827             :       54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
    1828             :       64,    65,    66,    67,    -1,    -1,    -1,    -1,    -1,    73,
    1829             :       74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
    1830             :       -1,    -1,    86,    87,    88,    89,     3,     4,     5,    -1,
    1831             :       -1,    -1,     9,    -1,    -1,    -1,    -1,    14,    -1,    -1,
    1832             :      104,   105,   106,   107,   108,   109,   110,   111,   112,     6,
    1833             :       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    1834             :       -1,    -1,    -1,    -1,    -1,   129,   130,    -1,    -1,    -1,
    1835             :       -1,    -1,   136,    -1,    -1,    -1,   140,    54,    55,    56,
    1836             :       57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
    1837             :       67,    -1,    -1,    -1,    -1,    -1,    73,    74,    75,    76,
    1838             :       77,    78,    79,    80,    81,    82,    83,    -1,    -1,    86,
    1839             :       87,    88,    89,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    1840             :       -1,    -1,    -1,    -1,    -1,    -1,    -1,   104,   105,   106,
    1841             :      107,   108,   109,   110,   111,   112,    -1,    -1,    -1,    -1,
    1842             :       -1,    98,    99,   100,   101,   102,   103,    -1,    -1,    -1,
    1843             :       -1,    -1,   129,   130,    -1,    -1,    -1,    -1,    -1,   136,
    1844             :       -1,    31,    32,   140,    -1,    -1,    -1,   124,    -1,    -1,
    1845             :       -1,    -1,    -1,    -1,    31,    32,   133,   134,   135,   136,
    1846             :      137,   138,   139,    -1,   141,    55,    56,    57,    58,    59,
    1847             :       60,    61,    62,    63,    -1,    -1,    66,    67,    55,    56,
    1848             :       57,    58,    59,    60,    61,    62,    63,    -1,    -1,    66,
    1849             :       67,    49,    -1,    -1,    52,    -1,    86,    87,    88,    89,
    1850             :       -1,    -1,    -1,    49,    -1,    -1,    52,    -1,    -1,    86,
    1851             :       87,    88,    89,    -1,   104,   105,   106,   107,   108,   109,
    1852             :      110,   111,   112,    -1,    -1,    -1,    -1,   104,   105,   106,
    1853             :      107,   108,   109,   110,   111,   112,    -1,    -1,   128,    -1,
    1854             :       98,    99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,
    1855             :       -1,   128,    98,    99,   100,   101,   102,   103,    -1,    -1,
    1856             :       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    1857             :       -1,    -1,    -1,    -1,   132,   133,   134,   135,   136,   137,
    1858             :      138,   139,    -1,   141,    -1,    -1,   132,   133,   134,   135,
    1859             :      136,   137,   138,   139,    -1,   141,    55,    56,    57,    58,
    1860             :       59,    60,    61,    62,    63,    64,    65,    66,    67,    55,
    1861             :       56,    57,    58,    59,    60,    61,    62,    63,    -1,    -1,
    1862             :       66,    67,    -1,    -1,    -1,    -1,    -1,    86,    87,    88,
    1863             :       89,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    1864             :       86,    87,    88,    89,    -1,   104,   105,   106,   107,   108,
    1865             :      109,   110,   111,   112,    -1,    -1,    -1,    -1,   104,   105,
    1866             :      106,   107,   108,   109,   110,   111,   112,    -1,    -1,   128,
    1867             :       98,    99,   100,   101,   102,   103,    -1,    -1,    -1,    98,
    1868             :       99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,    -1,
    1869             :       -1,    -1,    -1,    -1,    -1,    -1,    -1,    98,    99,   100,
    1870             :      101,   102,   103,    -1,    -1,   133,   134,   135,   136,   137,
    1871             :      138,   139,    -1,   141,   133,   134,   135,   136,   137,   138,
    1872             :      139,   149,   141,    98,    99,   100,   101,   102,   103,    -1,
    1873             :      149,   132,   133,   134,   135,   136,   137,   138,   139,    -1,
    1874             :      141,    98,    99,   100,   101,   102,   103,    -1,    -1,    -1,
    1875             :       98,    99,   100,   101,   102,   103,    -1,   132,   133,   134,
    1876             :      135,   136,   137,   138,   139,    98,   141,   100,   101,   102,
    1877             :      103,    -1,    -1,    -1,    -1,    -1,   133,   134,   135,   136,
    1878             :      137,   138,   139,    -1,   141,   133,   134,   135,   136,   137,
    1879             :      138,   139,    98,   141,   100,   101,   102,   103,    -1,    -1,
    1880             :      133,   134,   135,   136,   137,   138,   139,    -1,   141,    -1,
    1881             :       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    1882             :       -1,    -1,    -1,    -1,    -1,    -1,    -1,   133,   134,   135,
    1883             :      136,   137,   138,   139,    -1,   141
    1884             : };
    1885             : 
    1886             :   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
    1887             :      symbol of state STATE-NUM.  */
    1888             : static const yytype_uint8 yystos[] =
    1889             : {
    1890             :        0,   142,   151,   152,   154,   155,     0,     3,     4,     6,
    1891             :        7,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    1892             :       26,    29,    30,    31,    32,    84,    90,    91,    94,    96,
    1893             :      113,   115,   124,   125,   131,   145,   153,   156,   165,   168,
    1894             :      174,   178,   180,   142,   144,   143,   144,   143,     6,    85,
    1895             :      157,     3,     4,     5,     9,    14,    31,    32,    54,    55,
    1896             :       56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
    1897             :       66,    67,    73,    74,    75,    76,    77,    78,    79,    80,
    1898             :       81,    82,    83,    86,    87,    88,    89,   104,   105,   106,
    1899             :      107,   108,   109,   110,   111,   112,   129,   130,   136,   140,
    1900             :      166,   167,   180,   182,   183,   185,   186,   187,   188,   189,
    1901             :      190,   195,   196,   197,   198,   199,     4,   129,   140,   171,
    1902             :      172,   180,   186,   197,   199,     4,   197,   129,   166,   179,
    1903             :      175,   154,   155,     4,   132,    97,    11,    12,    13,    24,
    1904             :       25,    27,    28,    29,    30,    31,    32,    33,    34,    35,
    1905             :       36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
    1906             :       46,    47,    48,    92,    93,   116,   117,   118,   119,   120,
    1907             :      121,   122,   123,   180,   197,   154,   171,   143,     3,     4,
    1908             :      164,    85,   160,     8,   130,   197,   130,   197,   129,   129,
    1909             :      129,   129,   129,   129,   129,   129,   129,   129,   129,    31,
    1910             :       32,   104,   105,    31,    32,   104,   105,   171,   182,   185,
    1911             :      186,   197,   199,   171,   197,   197,   167,   135,   136,    68,
    1912             :       69,    70,    71,    72,   128,   195,   196,     6,    14,    15,
    1913             :       16,    17,    18,    19,    20,    21,    23,   131,   191,   191,
    1914             :       49,   187,    49,    49,    52,    98,    99,   100,   101,   102,
    1915             :      103,   132,   133,   134,   135,   136,   137,   138,   139,   141,
    1916             :      184,   133,   143,   172,   197,    38,    98,    99,   100,   101,
    1917             :       98,    99,   180,     6,   152,   154,   152,   174,     4,   163,
    1918             :      197,   197,   197,   197,   197,   197,   197,   197,   182,   197,
    1919             :      182,   182,     3,     9,    14,   128,   129,   182,   192,   193,
    1920             :      194,   195,   196,   129,   185,   197,   197,   197,   197,   197,
    1921             :      197,   180,   180,   180,   197,   197,     3,     4,    31,    32,
    1922             :      174,   182,   183,   186,   171,   158,     8,   197,   197,   171,
    1923             :      171,   171,   171,   171,   171,   171,   171,   171,   148,   171,
    1924             :      171,   148,   132,   135,   136,   148,   148,   184,   133,    10,
    1925             :      185,   185,     3,   147,   187,   187,    50,   197,   197,   197,
    1926             :      197,   197,   197,   197,   197,   197,   197,   197,   197,   197,
    1927             :      197,   197,   182,   182,   197,   169,   172,   197,   172,   197,
    1928             :      180,   180,   172,   197,   172,   197,   181,   147,   146,     8,
    1929             :      193,   195,   191,   191,     3,   193,   128,   195,   185,   197,
    1930             :        8,   161,   149,   149,   148,   148,   132,   148,   148,   148,
    1931             :      132,   132,   148,   148,   148,   182,   185,   185,   182,   182,
    1932             :       51,    53,   132,    34,     8,   132,   148,   176,   193,   193,
    1933             :      132,     3,   159,   114,   170,   171,   171,   171,   148,   148,
    1934             :      148,    53,   132,    52,   182,   182,   197,   197,   174,   177,
    1935             :      193,   170,     6,   148,   148,   148,   182,   182,   134,    37,
    1936             :      173,   148,   148,   134,   137,   197,    95,   148,   197,   162,
    1937             :        8
    1938             : };
    1939             : 
    1940             :   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
    1941             : static const yytype_uint8 yyr1[] =
    1942             : {
    1943             :        0,   150,   151,   151,   152,   153,   153,   154,   154,   155,
    1944             :      155,   156,   156,   156,   156,   156,   156,   156,   156,   156,
    1945             :      156,   157,   156,   156,   158,   159,   156,   160,   161,   156,
    1946             :      162,   156,   156,   163,   156,   156,   156,   164,   164,   165,
    1947             :      165,   165,   166,   166,   167,   167,   167,   169,   168,   170,
    1948             :      170,   171,   171,   172,   172,   172,   172,   172,   172,   172,
    1949             :      172,   172,   173,   173,   173,   174,   174,   174,   174,   175,
    1950             :      176,   174,   174,   177,   177,   178,   178,   178,   178,   178,
    1951             :      178,   178,   178,   178,   178,   178,   178,   179,   178,   178,
    1952             :      178,   178,   178,   178,   178,   178,   178,   178,   178,   178,
    1953             :      178,   178,   178,   178,   178,   178,   178,   178,   178,   178,
    1954             :      178,   178,   178,   178,   178,   178,   178,   178,   178,   178,
    1955             :      178,   178,   178,   178,   178,   178,   178,   178,   178,   178,
    1956             :      178,   178,   178,   178,   178,   178,   178,   178,   180,   180,
    1957             :      181,   181,   182,   182,   182,   183,   183,   183,   183,   183,
    1958             :      183,   183,   183,   183,   183,   184,   184,   185,   185,   186,
    1959             :      186,   186,   186,   186,   186,   186,   187,   187,   187,   188,
    1960             :      188,   189,   189,   190,   190,   191,   191,   191,   191,   191,
    1961             :      191,   191,   191,   191,   191,   192,   192,   193,   193,   193,
    1962             :      194,   194,   194,   194,   194,   194,   195,   195,   195,   195,
    1963             :      195,   195,   195,   195,   195,   195,   195,   195,   195,   195,
    1964             :      195,   195,   195,   195,   195,   195,   195,   195,   195,   195,
    1965             :      195,   195,   195,   195,   195,   195,   195,   195,   196,   196,
    1966             :      196,   196,   197,   197,   198,   199,   199,   199,   199,   199,
    1967             :      199,   199,   199,   199,   199,   199,   199,   199,   199,   199,
    1968             :      199,   199,   199,   199,   199,   199,   199,   199,   199,   199,
    1969             :      199,   199,   199,   199,   199,   199,   199,   199,   199,   199
    1970             : };
    1971             : 
    1972             :   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
    1973             : static const yytype_int8 yyr2[] =
    1974             : {
    1975             :        0,     2,     1,     1,     3,     1,     3,     0,     1,     1,
    1976             :        2,     3,     3,     4,     1,     1,     1,     1,     1,     2,
    1977             :        2,     0,     3,     2,     0,     0,     7,     0,     0,     6,
    1978             :        0,    10,     1,     0,     4,     1,     1,     1,     1,     2,
    1979             :        2,     3,     1,     2,     1,     1,     1,     0,     5,     0,
    1980             :        2,     1,     1,     3,     3,     3,     3,     3,     3,     3,
    1981             :        3,     2,     0,     2,     3,     1,     4,     4,     4,     0,
    1982             :        0,     6,     1,     0,     1,     1,     1,     1,     1,     1,
    1983             :        1,     1,     1,     1,     1,     2,     3,     0,     4,     3,
    1984             :        3,     3,     3,     2,     2,     3,     2,     3,     2,     3,
    1985             :        2,     3,     3,     3,     3,     3,     3,     3,     3,     2,
    1986             :        2,     2,     3,     2,     3,     2,     3,     3,     3,     3,
    1987             :        3,     3,     2,     3,     2,     2,     2,     2,     2,     2,
    1988             :        2,     2,     2,     2,     2,     2,     3,     2,     1,     5,
    1989             :        0,     3,     1,     1,     3,     1,     3,     5,     3,     5,
    1990             :        5,     5,     7,     6,     8,     1,     4,     3,     3,     1,
    1991             :        2,     2,     2,     3,     3,     1,     1,     1,     3,     1,
    1992             :        3,     1,     2,     2,     2,     1,     1,     1,     1,     1,
    1993             :        1,     1,     1,     2,     1,     2,     3,     1,     1,     2,
    1994             :        1,     5,     4,     3,     3,     2,     1,     1,     1,     1,
    1995             :        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
    1996             :        1,     2,     2,     2,     2,     1,     1,     2,     2,     2,
    1997             :        2,     1,     1,     1,     1,     1,     1,     1,     2,     4,
    1998             :        2,     4,     1,     1,     3,     1,     1,     2,     2,     2,
    1999             :        2,     2,     3,     3,     3,     3,     3,     3,     2,     3,
    2000             :        4,     4,     6,     4,     4,     4,     6,     6,     4,     4,
    2001             :        3,     4,     3,     3,     3,     3,     3,     3,     3,     2
    2002             : };
    2003             : 
    2004             : 
    2005             : enum { YYENOMEM = -2 };
    2006             : 
    2007             : #define yyerrok         (yyerrstatus = 0)
    2008             : #define yyclearin       (yychar = YYEMPTY)
    2009             : 
    2010             : #define YYACCEPT        goto yyacceptlab
    2011             : #define YYABORT         goto yyabortlab
    2012             : #define YYERROR         goto yyerrorlab
    2013             : 
    2014             : 
    2015             : #define YYRECOVERING()  (!!yyerrstatus)
    2016             : 
    2017             : #define YYBACKUP(Token, Value)                                    \
    2018             :   do                                                              \
    2019             :     if (yychar == YYEMPTY)                                        \
    2020             :       {                                                           \
    2021             :         yychar = (Token);                                         \
    2022             :         yylval = (Value);                                         \
    2023             :         YYPOPSTACK (yylen);                                       \
    2024             :         yystate = *yyssp;                                         \
    2025             :         goto yybackup;                                            \
    2026             :       }                                                           \
    2027             :     else                                                          \
    2028             :       {                                                           \
    2029             :         yyerror (YY_("syntax error: cannot back up")); \
    2030             :         YYERROR;                                                  \
    2031             :       }                                                           \
    2032             :   while (0)
    2033             : 
    2034             : /* Backward compatibility with an undocumented macro.
    2035             :    Use YYerror or YYUNDEF. */
    2036             : #define YYERRCODE YYUNDEF
    2037             : 
    2038             : 
    2039             : /* Enable debugging if requested.  */
    2040             : #if YYDEBUG
    2041             : 
    2042             : # ifndef YYFPRINTF
    2043             : #  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
    2044             : #  define YYFPRINTF fprintf
    2045             : # endif
    2046             : 
    2047             : # define YYDPRINTF(Args)                        \
    2048             : do {                                            \
    2049             :   if (yydebug)                                  \
    2050             :     YYFPRINTF Args;                             \
    2051             : } while (0)
    2052             : 
    2053             : /* This macro is provided for backward compatibility. */
    2054             : # ifndef YY_LOCATION_PRINT
    2055             : #  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
    2056             : # endif
    2057             : 
    2058             : 
    2059             : # define YY_SYMBOL_PRINT(Title, Kind, Value, Location)                    \
    2060             : do {                                                                      \
    2061             :   if (yydebug)                                                            \
    2062             :     {                                                                     \
    2063             :       YYFPRINTF (stderr, "%s ", Title);                                   \
    2064             :       yy_symbol_print (stderr,                                            \
    2065             :                   Kind, Value); \
    2066             :       YYFPRINTF (stderr, "\n");                                           \
    2067             :     }                                                                     \
    2068             : } while (0)
    2069             : 
    2070             : 
    2071             : /*-----------------------------------.
    2072             : | Print this symbol's value on YYO.  |
    2073             : `-----------------------------------*/
    2074             : 
    2075             : static void
    2076             : yy_symbol_value_print (FILE *yyo,
    2077             :                        yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep)
    2078             : {
    2079             :   FILE *yyoutput = yyo;
    2080             :   YY_USE (yyoutput);
    2081             :   if (!yyvaluep)
    2082             :     return;
    2083             : # ifdef YYPRINT
    2084             :   if (yykind < YYNTOKENS)
    2085             :     YYPRINT (yyo, yytoknum[yykind], *yyvaluep);
    2086             : # endif
    2087             :   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
    2088             :   YY_USE (yykind);
    2089             :   YY_IGNORE_MAYBE_UNINITIALIZED_END
    2090             : }
    2091             : 
    2092             : 
    2093             : /*---------------------------.
    2094             : | Print this symbol on YYO.  |
    2095             : `---------------------------*/
    2096             : 
    2097             : static void
    2098             : yy_symbol_print (FILE *yyo,
    2099             :                  yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep)
    2100             : {
    2101             :   YYFPRINTF (yyo, "%s %s (",
    2102             :              yykind < YYNTOKENS ? "token" : "nterm", yysymbol_name (yykind));
    2103             : 
    2104             :   yy_symbol_value_print (yyo, yykind, yyvaluep);
    2105             :   YYFPRINTF (yyo, ")");
    2106             : }
    2107             : 
    2108             : /*------------------------------------------------------------------.
    2109             : | yy_stack_print -- Print the state stack from its BOTTOM up to its |
    2110             : | TOP (included).                                                   |
    2111             : `------------------------------------------------------------------*/
    2112             : 
    2113             : static void
    2114             : yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop)
    2115             : {
    2116             :   YYFPRINTF (stderr, "Stack now");
    2117             :   for (; yybottom <= yytop; yybottom++)
    2118             :     {
    2119             :       int yybot = *yybottom;
    2120             :       YYFPRINTF (stderr, " %d", yybot);
    2121             :     }
    2122             :   YYFPRINTF (stderr, "\n");
    2123             : }
    2124             : 
    2125             : # define YY_STACK_PRINT(Bottom, Top)                            \
    2126             : do {                                                            \
    2127             :   if (yydebug)                                                  \
    2128             :     yy_stack_print ((Bottom), (Top));                           \
    2129             : } while (0)
    2130             : 
    2131             : 
    2132             : /*------------------------------------------------.
    2133             : | Report that the YYRULE is going to be reduced.  |
    2134             : `------------------------------------------------*/
    2135             : 
    2136             : static void
    2137             : yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp,
    2138             :                  int yyrule)
    2139             : {
    2140             :   int yylno = yyrline[yyrule];
    2141             :   int yynrhs = yyr2[yyrule];
    2142             :   int yyi;
    2143             :   YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n",
    2144             :              yyrule - 1, yylno);
    2145             :   /* The symbols being reduced.  */
    2146             :   for (yyi = 0; yyi < yynrhs; yyi++)
    2147             :     {
    2148             :       YYFPRINTF (stderr, "   $%d = ", yyi + 1);
    2149             :       yy_symbol_print (stderr,
    2150             :                        YY_ACCESSING_SYMBOL (+yyssp[yyi + 1 - yynrhs]),
    2151             :                        &yyvsp[(yyi + 1) - (yynrhs)]);
    2152             :       YYFPRINTF (stderr, "\n");
    2153             :     }
    2154             : }
    2155             : 
    2156             : # define YY_REDUCE_PRINT(Rule)          \
    2157             : do {                                    \
    2158             :   if (yydebug)                          \
    2159             :     yy_reduce_print (yyssp, yyvsp, Rule); \
    2160             : } while (0)
    2161             : 
    2162             : /* Nonzero means print parse trace.  It is left uninitialized so that
    2163             :    multiple parsers can coexist.  */
    2164             : int yydebug;
    2165             : #else /* !YYDEBUG */
    2166             : # define YYDPRINTF(Args) ((void) 0)
    2167             : # define YY_SYMBOL_PRINT(Title, Kind, Value, Location)
    2168             : # define YY_STACK_PRINT(Bottom, Top)
    2169             : # define YY_REDUCE_PRINT(Rule)
    2170             : #endif /* !YYDEBUG */
    2171             : 
    2172             : 
    2173             : /* YYINITDEPTH -- initial size of the parser's stacks.  */
    2174             : #ifndef YYINITDEPTH
    2175             : # define YYINITDEPTH 200
    2176             : #endif
    2177             : 
    2178             : /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
    2179             :    if the built-in stack extension method is used).
    2180             : 
    2181             :    Do not make this value too large; the results are undefined if
    2182             :    YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
    2183             :    evaluated with infinite-precision integer arithmetic.  */
    2184             : 
    2185             : #ifndef YYMAXDEPTH
    2186             : # define YYMAXDEPTH 10000
    2187             : #endif
    2188             : 
    2189             : 
    2190             : 
    2191             : 
    2192             : 
    2193             : 
    2194             : /*-----------------------------------------------.
    2195             : | Release the memory associated to this symbol.  |
    2196             : `-----------------------------------------------*/
    2197             : 
    2198             : static void
    2199         228 : yydestruct (const char *yymsg,
    2200             :             yysymbol_kind_t yykind, YYSTYPE *yyvaluep)
    2201             : {
    2202             :   YY_USE (yyvaluep);
    2203         228 :   if (!yymsg)
    2204           0 :     yymsg = "Deleting";
    2205             :   YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp);
    2206             : 
    2207             :   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
    2208             :   YY_USE (yykind);
    2209             :   YY_IGNORE_MAYBE_UNINITIALIZED_END
    2210         228 : }
    2211             : 
    2212             : 
    2213             : /* Lookahead token kind.  */
    2214             : int yychar;
    2215             : 
    2216             : /* The semantic value of the lookahead symbol.  */
    2217             : YYSTYPE yylval;
    2218             : /* Number of syntax errors so far.  */
    2219             : int yynerrs;
    2220             : 
    2221             : 
    2222             : 
    2223             : 
    2224             : /*----------.
    2225             : | yyparse.  |
    2226             : `----------*/
    2227             : 
    2228             : int
    2229         114 : yyparse (void)
    2230             : {
    2231         114 :     yy_state_fast_t yystate = 0;
    2232             :     /* Number of tokens to shift before error messages enabled.  */
    2233         114 :     int yyerrstatus = 0;
    2234             : 
    2235             :     /* Refer to the stacks through separate pointers, to allow yyoverflow
    2236             :        to reallocate them elsewhere.  */
    2237             : 
    2238             :     /* Their size.  */
    2239         114 :     YYPTRDIFF_T yystacksize = YYINITDEPTH;
    2240             : 
    2241             :     /* The state stack: array, bottom, top.  */
    2242             :     yy_state_t yyssa[YYINITDEPTH];
    2243         114 :     yy_state_t *yyss = yyssa;
    2244         114 :     yy_state_t *yyssp = yyss;
    2245             : 
    2246             :     /* The semantic value stack: array, bottom, top.  */
    2247             :     YYSTYPE yyvsa[YYINITDEPTH];
    2248         114 :     YYSTYPE *yyvs = yyvsa;
    2249         114 :     YYSTYPE *yyvsp = yyvs;
    2250             : 
    2251             :   int yyn;
    2252             :   /* The return value of yyparse.  */
    2253             :   int yyresult;
    2254             :   /* Lookahead symbol kind.  */
    2255         114 :   yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY;
    2256             :   /* The variables used to return semantic value and location from the
    2257             :      action routines.  */
    2258             :   YYSTYPE yyval;
    2259             : 
    2260             : 
    2261             : 
    2262             : #define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
    2263             : 
    2264             :   /* The number of symbols on the RHS of the reduced rule.
    2265             :      Keep to zero when no symbol should be popped.  */
    2266         114 :   int yylen = 0;
    2267             : 
    2268             :   YYDPRINTF ((stderr, "Starting parse\n"));
    2269             : 
    2270         114 :   yychar = YYEMPTY; /* Cause a token to be read.  */
    2271         114 :   goto yysetstate;
    2272             : 
    2273             : 
    2274             : /*------------------------------------------------------------.
    2275             : | yynewstate -- push a new state, which is found in yystate.  |
    2276             : `------------------------------------------------------------*/
    2277       49129 : yynewstate:
    2278             :   /* In all cases, when you get here, the value and location stacks
    2279             :      have just been pushed.  So pushing a state here evens the stacks.  */
    2280       49129 :   yyssp++;
    2281             : 
    2282             : 
    2283             : /*--------------------------------------------------------------------.
    2284             : | yysetstate -- set current state (the top of the stack) to yystate.  |
    2285             : `--------------------------------------------------------------------*/
    2286       49243 : yysetstate:
    2287             :   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
    2288             :   YY_ASSERT (0 <= yystate && yystate < YYNSTATES);
    2289             :   YY_IGNORE_USELESS_CAST_BEGIN
    2290       49243 :   *yyssp = YY_CAST (yy_state_t, yystate);
    2291             :   YY_IGNORE_USELESS_CAST_END
    2292             :   YY_STACK_PRINT (yyss, yyssp);
    2293             : 
    2294       49243 :   if (yyss + yystacksize - 1 <= yyssp)
    2295             : #if !defined yyoverflow && !defined YYSTACK_RELOCATE
    2296             :     goto yyexhaustedlab;
    2297             : #else
    2298             :     {
    2299             :       /* Get the current used size of the three stacks, in elements.  */
    2300           0 :       YYPTRDIFF_T yysize = yyssp - yyss + 1;
    2301             : 
    2302             : # if defined yyoverflow
    2303             :       {
    2304             :         /* Give user a chance to reallocate the stack.  Use copies of
    2305             :            these so that the &'s don't force the real ones into
    2306             :            memory.  */
    2307             :         yy_state_t *yyss1 = yyss;
    2308             :         YYSTYPE *yyvs1 = yyvs;
    2309             : 
    2310             :         /* Each stack pointer address is followed by the size of the
    2311             :            data in use in that stack, in bytes.  This used to be a
    2312             :            conditional around just the two extra args, but that might
    2313             :            be undefined if yyoverflow is a macro.  */
    2314             :         yyoverflow (YY_("memory exhausted"),
    2315             :                     &yyss1, yysize * YYSIZEOF (*yyssp),
    2316             :                     &yyvs1, yysize * YYSIZEOF (*yyvsp),
    2317             :                     &yystacksize);
    2318             :         yyss = yyss1;
    2319             :         yyvs = yyvs1;
    2320             :       }
    2321             : # else /* defined YYSTACK_RELOCATE */
    2322             :       /* Extend the stack our own way.  */
    2323           0 :       if (YYMAXDEPTH <= yystacksize)
    2324           0 :         goto yyexhaustedlab;
    2325           0 :       yystacksize *= 2;
    2326           0 :       if (YYMAXDEPTH < yystacksize)
    2327           0 :         yystacksize = YYMAXDEPTH;
    2328             : 
    2329             :       {
    2330           0 :         yy_state_t *yyss1 = yyss;
    2331             :         union yyalloc *yyptr =
    2332           0 :           YY_CAST (union yyalloc *,
    2333             :                    YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize))));
    2334           0 :         if (! yyptr)
    2335           0 :           goto yyexhaustedlab;
    2336           0 :         YYSTACK_RELOCATE (yyss_alloc, yyss);
    2337           0 :         YYSTACK_RELOCATE (yyvs_alloc, yyvs);
    2338             : #  undef YYSTACK_RELOCATE
    2339           0 :         if (yyss1 != yyssa)
    2340           0 :           YYSTACK_FREE (yyss1);
    2341             :       }
    2342             : # endif
    2343             : 
    2344           0 :       yyssp = yyss + yysize - 1;
    2345           0 :       yyvsp = yyvs + yysize - 1;
    2346             : 
    2347             :       YY_IGNORE_USELESS_CAST_BEGIN
    2348             :       YYDPRINTF ((stderr, "Stack size increased to %ld\n",
    2349             :                   YY_CAST (long, yystacksize)));
    2350             :       YY_IGNORE_USELESS_CAST_END
    2351             : 
    2352           0 :       if (yyss + yystacksize - 1 <= yyssp)
    2353           0 :         YYABORT;
    2354             :     }
    2355             : #endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */
    2356             : 
    2357       49243 :   if (yystate == YYFINAL)
    2358         114 :     YYACCEPT;
    2359             : 
    2360       49129 :   goto yybackup;
    2361             : 
    2362             : 
    2363             : /*-----------.
    2364             : | yybackup.  |
    2365             : `-----------*/
    2366       49129 : yybackup:
    2367             :   /* Do appropriate processing given the current state.  Read a
    2368             :      lookahead token if we need one and don't already have one.  */
    2369             : 
    2370             :   /* First try to decide what to do without reference to lookahead token.  */
    2371       49129 :   yyn = yypact[yystate];
    2372       49129 :   if (yypact_value_is_default (yyn))
    2373       22155 :     goto yydefault;
    2374             : 
    2375             :   /* Not known => get a lookahead token if don't already have one.  */
    2376             : 
    2377             :   /* YYCHAR is either empty, or end-of-input, or a valid lookahead.  */
    2378       26974 :   if (yychar == YYEMPTY)
    2379             :     {
    2380             :       YYDPRINTF ((stderr, "Reading a token\n"));
    2381       18446 :       yychar = yylex ();
    2382             :     }
    2383             : 
    2384       26974 :   if (yychar <= YYEOF)
    2385             :     {
    2386         228 :       yychar = YYEOF;
    2387         228 :       yytoken = YYSYMBOL_YYEOF;
    2388             :       YYDPRINTF ((stderr, "Now at end of input.\n"));
    2389             :     }
    2390       26746 :   else if (yychar == YYerror)
    2391             :     {
    2392             :       /* The scanner already issued an error message, process directly
    2393             :          to error recovery.  But do not keep the error token as
    2394             :          lookahead, it is too special and may lead us to an endless
    2395             :          loop in error recovery. */
    2396           0 :       yychar = YYUNDEF;
    2397           0 :       yytoken = YYSYMBOL_YYerror;
    2398           0 :       goto yyerrlab1;
    2399             :     }
    2400             :   else
    2401             :     {
    2402       26746 :       yytoken = YYTRANSLATE (yychar);
    2403             :       YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
    2404             :     }
    2405             : 
    2406             :   /* If the proper action on seeing token YYTOKEN is to reduce or to
    2407             :      detect an error, take that action.  */
    2408       26974 :   yyn += yytoken;
    2409       26974 :   if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
    2410        8528 :     goto yydefault;
    2411       18446 :   yyn = yytable[yyn];
    2412       18446 :   if (yyn <= 0)
    2413             :     {
    2414             :       if (yytable_value_is_error (yyn))
    2415             :         goto yyerrlab;
    2416           0 :       yyn = -yyn;
    2417           0 :       goto yyreduce;
    2418             :     }
    2419             : 
    2420             :   /* Count tokens shifted since error; after three, turn off error
    2421             :      status.  */
    2422       18446 :   if (yyerrstatus)
    2423           0 :     yyerrstatus--;
    2424             : 
    2425             :   /* Shift the lookahead token.  */
    2426             :   YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
    2427       18446 :   yystate = yyn;
    2428             :   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
    2429       18446 :   *++yyvsp = yylval;
    2430             :   YY_IGNORE_MAYBE_UNINITIALIZED_END
    2431             : 
    2432             :   /* Discard the shifted token.  */
    2433       18446 :   yychar = YYEMPTY;
    2434       18446 :   goto yynewstate;
    2435             : 
    2436             : 
    2437             : /*-----------------------------------------------------------.
    2438             : | yydefault -- do the default action for the current state.  |
    2439             : `-----------------------------------------------------------*/
    2440       30683 : yydefault:
    2441       30683 :   yyn = yydefact[yystate];
    2442       30683 :   if (yyn == 0)
    2443           0 :     goto yyerrlab;
    2444       30683 :   goto yyreduce;
    2445             : 
    2446             : 
    2447             : /*-----------------------------.
    2448             : | yyreduce -- do a reduction.  |
    2449             : `-----------------------------*/
    2450       30683 : yyreduce:
    2451             :   /* yyn is the number of a rule to reduce with.  */
    2452       30683 :   yylen = yyr2[yyn];
    2453             : 
    2454             :   /* If YYLEN is nonzero, implement the default value of the action:
    2455             :      '$$ = $1'.
    2456             : 
    2457             :      Otherwise, the following line sets YYVAL to garbage.
    2458             :      This behavior is undocumented and Bison
    2459             :      users should not rely upon it.  Assigning to YYVAL
    2460             :      unconditionally makes the parser a bit smaller, and it avoids a
    2461             :      GCC warning that YYVAL may be used uninitialized.  */
    2462       30683 :   yyval = yyvsp[1-yylen];
    2463             : 
    2464             : 
    2465             :   YY_REDUCE_PRINT (yyn);
    2466       30683 :   switch (yyn)
    2467             :     {
    2468         114 :   case 3: /* top: element_list  */
    2469             : #line 313 "../src/preproc/pic/pic.ypp"
    2470             :                 {
    2471             :                   if (olist.head)
    2472             :                     print_picture(olist.head);
    2473             :                 }
    2474             : #line 2475 "src/preproc/pic/pic.cpp"
    2475         114 :     break;
    2476             : 
    2477         294 :   case 4: /* element_list: optional_separator middle_element_list optional_separator  */
    2478             : #line 322 "../src/preproc/pic/pic.ypp"
    2479             :                 { (yyval.pl) = (yyvsp[-1].pl); }
    2480             : #line 2481 "src/preproc/pic/pic.cpp"
    2481         294 :     break;
    2482             : 
    2483         294 :   case 5: /* middle_element_list: element  */
    2484             : #line 327 "../src/preproc/pic/pic.ypp"
    2485             :                 { (yyval.pl) = (yyvsp[0].pl); }
    2486             : #line 2487 "src/preproc/pic/pic.cpp"
    2487         294 :     break;
    2488             : 
    2489        1783 :   case 6: /* middle_element_list: middle_element_list separator element  */
    2490             : #line 329 "../src/preproc/pic/pic.ypp"
    2491             :                 { (yyval.pl) = (yyvsp[-2].pl); }
    2492             : #line 2493 "src/preproc/pic/pic.cpp"
    2493        1783 :     break;
    2494             : 
    2495           0 :   case 11: /* placeless_element: FIGNAME '=' macro_name  */
    2496             : #line 344 "../src/preproc/pic/pic.ypp"
    2497             :                 {
    2498             :                   delete[] graphname;
    2499             :                   graphname = new char[strlen((yyvsp[0].str)) + 1];
    2500             :                   strcpy(graphname, (yyvsp[0].str));
    2501             :                   delete[] (yyvsp[0].str);
    2502             :                 }
    2503             : #line 2504 "src/preproc/pic/pic.cpp"
    2504           0 :     break;
    2505             : 
    2506         143 :   case 12: /* placeless_element: VARIABLE '=' any_expr  */
    2507             : #line 352 "../src/preproc/pic/pic.ypp"
    2508             :                 {
    2509             :                   define_variable((yyvsp[-2].str), (yyvsp[0].x));
    2510             :                   free((yyvsp[-2].str));
    2511             :                 }
    2512             : #line 2513 "src/preproc/pic/pic.cpp"
    2513         143 :     break;
    2514             : 
    2515           0 :   case 13: /* placeless_element: VARIABLE ':' '=' any_expr  */
    2516             : #line 357 "../src/preproc/pic/pic.ypp"
    2517             :                 {
    2518             :                   place *p = lookup_label((yyvsp[-3].str));
    2519             :                   if (!p) {
    2520             :                     lex_error("variable '%1' not defined", (yyvsp[-3].str));
    2521             :                     YYABORT;
    2522             :                   }
    2523             :                   p->obj = 0 /* nullptr */;
    2524             :                   p->x = (yyvsp[0].x);
    2525             :                   p->y = 0.0;
    2526             :                   free((yyvsp[-3].str));
    2527             :                 }
    2528             : #line 2529 "src/preproc/pic/pic.cpp"
    2529           0 :     break;
    2530             : 
    2531           5 :   case 14: /* placeless_element: UP  */
    2532             : #line 369 "../src/preproc/pic/pic.ypp"
    2533             :                 { current_direction = UP_DIRECTION; }
    2534             : #line 2535 "src/preproc/pic/pic.cpp"
    2535           5 :     break;
    2536             : 
    2537          24 :   case 15: /* placeless_element: DOWN  */
    2538             : #line 371 "../src/preproc/pic/pic.ypp"
    2539             :                 { current_direction = DOWN_DIRECTION; }
    2540             : #line 2541 "src/preproc/pic/pic.cpp"
    2541          24 :     break;
    2542             : 
    2543           2 :   case 16: /* placeless_element: LEFT  */
    2544             : #line 373 "../src/preproc/pic/pic.ypp"
    2545             :                 { current_direction = LEFT_DIRECTION; }
    2546             : #line 2547 "src/preproc/pic/pic.cpp"
    2547           2 :     break;
    2548             : 
    2549          13 :   case 17: /* placeless_element: RIGHT  */
    2550             : #line 375 "../src/preproc/pic/pic.ypp"
    2551             :                 { current_direction = RIGHT_DIRECTION; }
    2552             : #line 2553 "src/preproc/pic/pic.cpp"
    2553          13 :     break;
    2554             : 
    2555          24 :   case 18: /* placeless_element: COMMAND_LINE  */
    2556             : #line 377 "../src/preproc/pic/pic.ypp"
    2557             :                 {
    2558             :                   olist.append(make_command_object((yyvsp[0].lstr).str, (yyvsp[0].lstr).filename,
    2559             :                                                    (yyvsp[0].lstr).lineno));
    2560             :                 }
    2561             : #line 2562 "src/preproc/pic/pic.cpp"
    2562          24 :     break;
    2563             : 
    2564           0 :   case 19: /* placeless_element: COMMAND print_args  */
    2565             : #line 382 "../src/preproc/pic/pic.ypp"
    2566             :                 {
    2567             :                   olist.append(make_command_object((yyvsp[0].lstr).str, (yyvsp[0].lstr).filename,
    2568             :                                                    (yyvsp[0].lstr).lineno));
    2569             :                 }
    2570             : #line 2571 "src/preproc/pic/pic.cpp"
    2571           0 :     break;
    2572             : 
    2573           0 :   case 20: /* placeless_element: PRINT print_args  */
    2574             : #line 387 "../src/preproc/pic/pic.ypp"
    2575             :                 {
    2576             :                   fprintf(stderr, "%s\n", (yyvsp[0].lstr).str);
    2577             :                   delete[] (yyvsp[0].lstr).str;
    2578             :                   fflush(stderr);
    2579             :                 }
    2580             : #line 2581 "src/preproc/pic/pic.cpp"
    2581           0 :     break;
    2582             : 
    2583           0 :   case 21: /* $@1: %empty  */
    2584             : #line 393 "../src/preproc/pic/pic.ypp"
    2585             :                 { delim_flag = 1; }
    2586             : #line 2587 "src/preproc/pic/pic.cpp"
    2587           0 :     break;
    2588             : 
    2589           0 :   case 22: /* placeless_element: SH $@1 DELIMITED  */
    2590             : #line 395 "../src/preproc/pic/pic.ypp"
    2591             :                 {
    2592             :                   delim_flag = 0;
    2593             :                   if (!want_unsafe_mode)
    2594             :                     lex_error("unsafe to run command '%1'; ignoring",
    2595             :                               (yyvsp[0].str));
    2596             :                   else {
    2597             :                     int retval = system((yyvsp[0].str));
    2598             :                     if (retval < 0)
    2599             :                       lex_error("error running command '%1': system()"
    2600             :                         " returned %2", (yyvsp[0].str), retval);
    2601             :                   }
    2602             :                   delete[] (yyvsp[0].str);
    2603             :                 }
    2604             : #line 2605 "src/preproc/pic/pic.cpp"
    2605           0 :     break;
    2606             : 
    2607           1 :   case 23: /* placeless_element: COPY TEXT  */
    2608             : #line 409 "../src/preproc/pic/pic.ypp"
    2609             :                 {
    2610             :                   if (yychar < 0)
    2611             :                     do_lookahead();
    2612             :                   do_copy((yyvsp[0].lstr).str);
    2613             :                   // do not delete the filename
    2614             :                 }
    2615             : #line 2616 "src/preproc/pic/pic.cpp"
    2616           1 :     break;
    2617             : 
    2618           0 :   case 24: /* $@2: %empty  */
    2619             : #line 416 "../src/preproc/pic/pic.ypp"
    2620             :                 { delim_flag = 2; }
    2621             : #line 2622 "src/preproc/pic/pic.cpp"
    2622           0 :     break;
    2623             : 
    2624           0 :   case 25: /* $@3: %empty  */
    2625             : #line 418 "../src/preproc/pic/pic.ypp"
    2626             :                 { delim_flag = 0; }
    2627             : #line 2628 "src/preproc/pic/pic.cpp"
    2628           0 :     break;
    2629             : 
    2630           0 :   case 26: /* placeless_element: COPY TEXT THRU $@2 DELIMITED $@3 until  */
    2631             : #line 420 "../src/preproc/pic/pic.ypp"
    2632             :                 {
    2633             :                   if (yychar < 0)
    2634             :                     do_lookahead();
    2635             :                   copy_file_thru((yyvsp[-5].lstr).str, (yyvsp[-2].str), (yyvsp[0].str));
    2636             :                   // do not delete the filename
    2637             :                   delete[] (yyvsp[-2].str);
    2638             :                   delete[] (yyvsp[0].str);
    2639             :                 }
    2640             : #line 2641 "src/preproc/pic/pic.cpp"
    2641           0 :     break;
    2642             : 
    2643           0 :   case 27: /* $@4: %empty  */
    2644             : #line 429 "../src/preproc/pic/pic.ypp"
    2645             :                 { delim_flag = 2; }
    2646             : #line 2647 "src/preproc/pic/pic.cpp"
    2647           0 :     break;
    2648             : 
    2649           0 :   case 28: /* $@5: %empty  */
    2650             : #line 431 "../src/preproc/pic/pic.ypp"
    2651             :                 { delim_flag = 0; }
    2652             : #line 2653 "src/preproc/pic/pic.cpp"
    2653           0 :     break;
    2654             : 
    2655           0 :   case 29: /* placeless_element: COPY THRU $@4 DELIMITED $@5 until  */
    2656             : #line 433 "../src/preproc/pic/pic.ypp"
    2657             :                 {
    2658             :                   if (yychar < 0)
    2659             :                     do_lookahead();
    2660             :                   copy_rest_thru((yyvsp[-2].str), (yyvsp[0].str));
    2661             :                   delete[] (yyvsp[-2].str);
    2662             :                   delete[] (yyvsp[0].str);
    2663             :                 }
    2664             : #line 2665 "src/preproc/pic/pic.cpp"
    2665           0 :     break;
    2666             : 
    2667          20 :   case 30: /* $@6: %empty  */
    2668             : #line 441 "../src/preproc/pic/pic.ypp"
    2669             :                 { delim_flag = 1; }
    2670             : #line 2671 "src/preproc/pic/pic.cpp"
    2671          20 :     break;
    2672             : 
    2673          20 :   case 31: /* placeless_element: FOR VARIABLE '=' expr TO expr optional_by DO $@6 DELIMITED  */
    2674             : #line 443 "../src/preproc/pic/pic.ypp"
    2675             :                 {
    2676             :                   delim_flag = 0;
    2677             :                   if (yychar < 0)
    2678             :                     do_lookahead();
    2679             :                   do_for((yyvsp[-8].str), (yyvsp[-6].x), (yyvsp[-4].x), (yyvsp[-3].by).is_multiplicative, (yyvsp[-3].by).val, (yyvsp[0].str));
    2680             :                 }
    2681             : #line 2682 "src/preproc/pic/pic.cpp"
    2682          20 :     break;
    2683             : 
    2684           0 :   case 32: /* placeless_element: simple_if  */
    2685             : #line 450 "../src/preproc/pic/pic.ypp"
    2686             :                 {
    2687             :                   if (yychar < 0)
    2688             :                     do_lookahead();
    2689             :                   if ((yyvsp[0].if_data).x != 0.0)
    2690             :                     push_body((yyvsp[0].if_data).body);
    2691             :                   delete[] (yyvsp[0].if_data).body;
    2692             :                 }
    2693             : #line 2694 "src/preproc/pic/pic.cpp"
    2694           0 :     break;
    2695             : 
    2696           0 :   case 33: /* $@7: %empty  */
    2697             : #line 458 "../src/preproc/pic/pic.ypp"
    2698             :                 { delim_flag = 1; }
    2699             : #line 2700 "src/preproc/pic/pic.cpp"
    2700           0 :     break;
    2701             : 
    2702           0 :   case 34: /* placeless_element: simple_if ELSE $@7 DELIMITED  */
    2703             : #line 460 "../src/preproc/pic/pic.ypp"
    2704             :                 {
    2705             :                   delim_flag = 0;
    2706             :                   if (yychar < 0)
    2707             :                     do_lookahead();
    2708             :                   if ((yyvsp[-3].if_data).x != 0.0)
    2709             :                     push_body((yyvsp[-3].if_data).body);
    2710             :                   else
    2711             :                     push_body((yyvsp[0].str));
    2712             :                   free((yyvsp[-3].if_data).body);
    2713             :                   free((yyvsp[0].str));
    2714             :                 }
    2715             : #line 2716 "src/preproc/pic/pic.cpp"
    2716           0 :     break;
    2717             : 
    2718           0 :   case 36: /* placeless_element: RESET  */
    2719             : #line 473 "../src/preproc/pic/pic.ypp"
    2720             :                 { define_variable("scale", 1.0); }
    2721             : #line 2722 "src/preproc/pic/pic.cpp"
    2722           0 :     break;
    2723             : 
    2724           0 :   case 39: /* reset_variables: RESET VARIABLE  */
    2725             : #line 483 "../src/preproc/pic/pic.ypp"
    2726             :                 {
    2727             :                   reset((yyvsp[0].str));
    2728             :                   delete[] (yyvsp[0].str);
    2729             :                 }
    2730             : #line 2731 "src/preproc/pic/pic.cpp"
    2731           0 :     break;
    2732             : 
    2733           0 :   case 40: /* reset_variables: reset_variables VARIABLE  */
    2734             : #line 488 "../src/preproc/pic/pic.ypp"
    2735             :                 {
    2736             :                   reset((yyvsp[0].str));
    2737             :                   delete[] (yyvsp[0].str);
    2738             :                 }
    2739             : #line 2740 "src/preproc/pic/pic.cpp"
    2740           0 :     break;
    2741             : 
    2742           0 :   case 41: /* reset_variables: reset_variables ',' VARIABLE  */
    2743             : #line 493 "../src/preproc/pic/pic.ypp"
    2744             :                 {
    2745             :                   reset((yyvsp[0].str));
    2746             :                   delete[] (yyvsp[0].str);
    2747             :                 }
    2748             : #line 2749 "src/preproc/pic/pic.cpp"
    2749           0 :     break;
    2750             : 
    2751           0 :   case 42: /* print_args: print_arg  */
    2752             : #line 501 "../src/preproc/pic/pic.ypp"
    2753             :                 { (yyval.lstr) = (yyvsp[0].lstr); }
    2754             : #line 2755 "src/preproc/pic/pic.cpp"
    2755           0 :     break;
    2756             : 
    2757           0 :   case 43: /* print_args: print_args print_arg  */
    2758             : #line 503 "../src/preproc/pic/pic.ypp"
    2759             :                 {
    2760             :                   (yyval.lstr).str = new char[strlen((yyvsp[-1].lstr).str) + strlen((yyvsp[0].lstr).str) + 1];
    2761             :                   strcpy((yyval.lstr).str, (yyvsp[-1].lstr).str);
    2762             :                   strcat((yyval.lstr).str, (yyvsp[0].lstr).str);
    2763             :                   delete[] (yyvsp[-1].lstr).str;
    2764             :                   delete[] (yyvsp[0].lstr).str;
    2765             :                   if ((yyvsp[-1].lstr).filename) {
    2766             :                     (yyval.lstr).filename = (yyvsp[-1].lstr).filename;
    2767             :                     (yyval.lstr).lineno = (yyvsp[-1].lstr).lineno;
    2768             :                   }
    2769             :                   else if ((yyvsp[0].lstr).filename) {
    2770             :                     (yyval.lstr).filename = (yyvsp[0].lstr).filename;
    2771             :                     (yyval.lstr).lineno = (yyvsp[0].lstr).lineno;
    2772             :                   }
    2773             :                 }
    2774             : #line 2775 "src/preproc/pic/pic.cpp"
    2775           0 :     break;
    2776             : 
    2777           0 :   case 44: /* print_arg: expr  */
    2778             : #line 522 "../src/preproc/pic/pic.ypp"
    2779             :                 {
    2780             :                   (yyval.lstr).str = new char[GDIGITS + 1];
    2781             :                   sprintf((yyval.lstr).str, "%g", (yyvsp[0].x));
    2782             :                   (yyval.lstr).filename = 0 /* nullptr */;
    2783             :                   (yyval.lstr).lineno = 0;
    2784             :                 }
    2785             : #line 2786 "src/preproc/pic/pic.cpp"
    2786           0 :     break;
    2787             : 
    2788           0 :   case 45: /* print_arg: text  */
    2789             : #line 529 "../src/preproc/pic/pic.ypp"
    2790             :                 { (yyval.lstr) = (yyvsp[0].lstr); }
    2791             : #line 2792 "src/preproc/pic/pic.cpp"
    2792           0 :     break;
    2793             : 
    2794           0 :   case 46: /* print_arg: position  */
    2795             : #line 531 "../src/preproc/pic/pic.ypp"
    2796             :                 {
    2797             :                   (yyval.lstr).str = new char[GDIGITS + 2 + GDIGITS + 1];
    2798             :                   sprintf((yyval.lstr).str, "%g, %g", (yyvsp[0].pair).x, (yyvsp[0].pair).y);
    2799             :                   (yyval.lstr).filename = 0 /* nullptr */;
    2800             :                   (yyval.lstr).lineno = 0;
    2801             :                 }
    2802             : #line 2803 "src/preproc/pic/pic.cpp"
    2803           0 :     break;
    2804             : 
    2805           0 :   case 47: /* $@8: %empty  */
    2806             : #line 541 "../src/preproc/pic/pic.ypp"
    2807             :                 { delim_flag = 1; }
    2808             : #line 2809 "src/preproc/pic/pic.cpp"
    2809           0 :     break;
    2810             : 
    2811           0 :   case 48: /* simple_if: IF any_expr THEN $@8 DELIMITED  */
    2812             : #line 543 "../src/preproc/pic/pic.ypp"
    2813             :                 {
    2814             :                   delim_flag = 0;
    2815             :                   (yyval.if_data).x = (yyvsp[-3].x);
    2816             :                   (yyval.if_data).body = (yyvsp[0].str);
    2817             :                 }
    2818             : #line 2819 "src/preproc/pic/pic.cpp"
    2819           0 :     break;
    2820             : 
    2821           0 :   case 49: /* until: %empty  */
    2822             : #line 552 "../src/preproc/pic/pic.ypp"
    2823             :                 { (yyval.str) = 0; }
    2824             : #line 2825 "src/preproc/pic/pic.cpp"
    2825           0 :     break;
    2826             : 
    2827           0 :   case 50: /* until: UNTIL TEXT  */
    2828             : #line 554 "../src/preproc/pic/pic.ypp"
    2829             :                 { (yyval.str) = (yyvsp[0].lstr).str; }
    2830             : #line 2831 "src/preproc/pic/pic.cpp"
    2831           0 :     break;
    2832             : 
    2833         487 :   case 51: /* any_expr: expr  */
    2834             : #line 559 "../src/preproc/pic/pic.ypp"
    2835             :                 { (yyval.x) = (yyvsp[0].x); }
    2836             : #line 2837 "src/preproc/pic/pic.cpp"
    2837         487 :     break;
    2838             : 
    2839           0 :   case 52: /* any_expr: text_expr  */
    2840             : #line 561 "../src/preproc/pic/pic.ypp"
    2841             :                 { (yyval.x) = (yyvsp[0].x); }
    2842             : #line 2843 "src/preproc/pic/pic.cpp"
    2843           0 :     break;
    2844             : 
    2845           0 :   case 53: /* text_expr: text EQUALEQUAL text  */
    2846             : #line 566 "../src/preproc/pic/pic.ypp"
    2847             :                 {
    2848             :                   (yyval.x) = strcmp((yyvsp[-2].lstr).str, (yyvsp[0].lstr).str) == 0;
    2849             :                   delete[] (yyvsp[-2].lstr).str;
    2850             :                   delete[] (yyvsp[0].lstr).str;
    2851             :                 }
    2852             : #line 2853 "src/preproc/pic/pic.cpp"
    2853           0 :     break;
    2854             : 
    2855           0 :   case 54: /* text_expr: text NOTEQUAL text  */
    2856             : #line 572 "../src/preproc/pic/pic.ypp"
    2857             :                 {
    2858             :                   (yyval.x) = strcmp((yyvsp[-2].lstr).str, (yyvsp[0].lstr).str) != 0;
    2859             :                   delete[] (yyvsp[-2].lstr).str;
    2860             :                   delete[] (yyvsp[0].lstr).str;
    2861             :                 }
    2862             : #line 2863 "src/preproc/pic/pic.cpp"
    2863           0 :     break;
    2864             : 
    2865           0 :   case 55: /* text_expr: text_expr ANDAND text_expr  */
    2866             : #line 578 "../src/preproc/pic/pic.ypp"
    2867             :                 { (yyval.x) = ((yyvsp[-2].x) != 0.0 && (yyvsp[0].x) != 0.0); }
    2868             : #line 2869 "src/preproc/pic/pic.cpp"
    2869           0 :     break;
    2870             : 
    2871           0 :   case 56: /* text_expr: text_expr ANDAND expr  */
    2872             : #line 580 "../src/preproc/pic/pic.ypp"
    2873             :                 { (yyval.x) = ((yyvsp[-2].x) != 0.0 && (yyvsp[0].x) != 0.0); }
    2874             : #line 2875 "src/preproc/pic/pic.cpp"
    2875           0 :     break;
    2876             : 
    2877           0 :   case 57: /* text_expr: expr ANDAND text_expr  */
    2878             : #line 582 "../src/preproc/pic/pic.ypp"
    2879             :                 { (yyval.x) = ((yyvsp[-2].x) != 0.0 && (yyvsp[0].x) != 0.0); }
    2880             : #line 2881 "src/preproc/pic/pic.cpp"
    2881           0 :     break;
    2882             : 
    2883           0 :   case 58: /* text_expr: text_expr OROR text_expr  */
    2884             : #line 584 "../src/preproc/pic/pic.ypp"
    2885             :                 { (yyval.x) = ((yyvsp[-2].x) != 0.0 || (yyvsp[0].x) != 0.0); }
    2886             : #line 2887 "src/preproc/pic/pic.cpp"
    2887           0 :     break;
    2888             : 
    2889           0 :   case 59: /* text_expr: text_expr OROR expr  */
    2890             : #line 586 "../src/preproc/pic/pic.ypp"
    2891             :                 { (yyval.x) = ((yyvsp[-2].x) != 0.0 || (yyvsp[0].x) != 0.0); }
    2892             : #line 2893 "src/preproc/pic/pic.cpp"
    2893           0 :     break;
    2894             : 
    2895           0 :   case 60: /* text_expr: expr OROR text_expr  */
    2896             : #line 588 "../src/preproc/pic/pic.ypp"
    2897             :                 { (yyval.x) = ((yyvsp[-2].x) != 0.0 || (yyvsp[0].x) != 0.0); }
    2898             : #line 2899 "src/preproc/pic/pic.cpp"
    2899           0 :     break;
    2900             : 
    2901           0 :   case 61: /* text_expr: '!' text_expr  */
    2902             : #line 590 "../src/preproc/pic/pic.ypp"
    2903             :                 { (yyval.x) = ((yyvsp[0].x) == 0.0); }
    2904             : #line 2905 "src/preproc/pic/pic.cpp"
    2905           0 :     break;
    2906             : 
    2907          18 :   case 62: /* optional_by: %empty  */
    2908             : #line 596 "../src/preproc/pic/pic.ypp"
    2909             :                 {
    2910             :                   (yyval.by).val = 1.0;
    2911             :                   (yyval.by).is_multiplicative = 0;
    2912             :                 }
    2913             : #line 2914 "src/preproc/pic/pic.cpp"
    2914          18 :     break;
    2915             : 
    2916           2 :   case 63: /* optional_by: BY expr  */
    2917             : #line 601 "../src/preproc/pic/pic.ypp"
    2918             :                 {
    2919             :                   (yyval.by).val = (yyvsp[0].x);
    2920             :                   (yyval.by).is_multiplicative = 0;
    2921             :                 }
    2922             : #line 2923 "src/preproc/pic/pic.cpp"
    2923           2 :     break;
    2924             : 
    2925           0 :   case 64: /* optional_by: BY '*' expr  */
    2926             : #line 606 "../src/preproc/pic/pic.ypp"
    2927             :                 {
    2928             :                   (yyval.by).val = (yyvsp[0].x);
    2929             :                   (yyval.by).is_multiplicative = 1;
    2930             :                 }
    2931             : #line 2932 "src/preproc/pic/pic.cpp"
    2932           0 :     break;
    2933             : 
    2934        1804 :   case 65: /* element: object_spec  */
    2935             : #line 614 "../src/preproc/pic/pic.ypp"
    2936             :                 {
    2937             :                   (yyval.pl).obj = (yyvsp[0].spec)->make_object(&current_position,
    2938             :                                            &current_direction);
    2939             :                   if ((yyval.pl).obj == 0 /* nullptr */)
    2940             :                     YYABORT;
    2941             :                   delete (yyvsp[0].spec);
    2942             :                   if ((yyval.pl).obj)
    2943             :                     olist.append((yyval.pl).obj);
    2944             :                   else {
    2945             :                     (yyval.pl).x = current_position.x;
    2946             :                     (yyval.pl).y = current_position.y;
    2947             :                   }
    2948             :                 }
    2949             : #line 2950 "src/preproc/pic/pic.cpp"
    2950        1804 :     break;
    2951             : 
    2952          93 :   case 66: /* element: LABEL ':' optional_separator element  */
    2953             : #line 628 "../src/preproc/pic/pic.ypp"
    2954             :                 {
    2955             :                   (yyval.pl) = (yyvsp[0].pl);
    2956             :                   define_label((yyvsp[-3].str), & (yyval.pl));
    2957             :                   free((yyvsp[-3].str));
    2958             :                 }
    2959             : #line 2960 "src/preproc/pic/pic.cpp"
    2960          93 :     break;
    2961             : 
    2962           3 :   case 67: /* element: LABEL ':' optional_separator position_not_place  */
    2963             : #line 634 "../src/preproc/pic/pic.ypp"
    2964             :                 {
    2965             :                   (yyval.pl).obj = 0 /* nullptr */;
    2966             :                   (yyval.pl).x = (yyvsp[0].pair).x;
    2967             :                   (yyval.pl).y = (yyvsp[0].pair).y;
    2968             :                   define_label((yyvsp[-3].str), & (yyval.pl));
    2969             :                   free((yyvsp[-3].str));
    2970             :                 }
    2971             : #line 2972 "src/preproc/pic/pic.cpp"
    2972           3 :     break;
    2973             : 
    2974           6 :   case 68: /* element: LABEL ':' optional_separator place  */
    2975             : #line 642 "../src/preproc/pic/pic.ypp"
    2976             :                 {
    2977             :                   (yyval.pl) = (yyvsp[0].pl);
    2978             :                   define_label((yyvsp[-3].str), & (yyval.pl));
    2979             :                   free((yyvsp[-3].str));
    2980             :                 }
    2981             : #line 2982 "src/preproc/pic/pic.cpp"
    2982           6 :     break;
    2983             : 
    2984          32 :   case 69: /* @9: %empty  */
    2985             : #line 648 "../src/preproc/pic/pic.ypp"
    2986             :                 {
    2987             :                   (yyval.state).x = current_position.x;
    2988             :                   (yyval.state).y = current_position.y;
    2989             :                   (yyval.state).dir = current_direction;
    2990             :                 }
    2991             : #line 2992 "src/preproc/pic/pic.cpp"
    2992          32 :     break;
    2993             : 
    2994          32 :   case 70: /* $@10: %empty  */
    2995             : #line 654 "../src/preproc/pic/pic.ypp"
    2996             :                 {
    2997             :                   current_position.x = (yyvsp[-2].state).x;
    2998             :                   current_position.y = (yyvsp[-2].state).y;
    2999             :                   current_direction = (yyvsp[-2].state).dir;
    3000             :                 }
    3001             : #line 3002 "src/preproc/pic/pic.cpp"
    3002          32 :     break;
    3003             : 
    3004          32 :   case 71: /* element: '{' @9 element_list '}' $@10 optional_element  */
    3005             : #line 660 "../src/preproc/pic/pic.ypp"
    3006             :                 {
    3007             :                   (yyval.pl) = (yyvsp[-3].pl);
    3008             :                 }
    3009             : #line 3010 "src/preproc/pic/pic.cpp"
    3010          32 :     break;
    3011             : 
    3012         232 :   case 72: /* element: placeless_element  */
    3013             : #line 664 "../src/preproc/pic/pic.ypp"
    3014             :                 {
    3015             :                   (yyval.pl).obj = 0 /* nullptr */;
    3016             :                   (yyval.pl).x = current_position.x;
    3017             :                   (yyval.pl).y = current_position.y;
    3018             :                 }
    3019             : #line 3020 "src/preproc/pic/pic.cpp"
    3020         232 :     break;
    3021             : 
    3022          32 :   case 73: /* optional_element: %empty  */
    3023             : #line 673 "../src/preproc/pic/pic.ypp"
    3024             :                 {}
    3025             : #line 3026 "src/preproc/pic/pic.cpp"
    3026          32 :     break;
    3027             : 
    3028           0 :   case 74: /* optional_element: element  */
    3029             : #line 675 "../src/preproc/pic/pic.ypp"
    3030             :                 {}
    3031             : #line 3032 "src/preproc/pic/pic.cpp"
    3032           0 :     break;
    3033             : 
    3034         367 :   case 75: /* object_spec: BOX  */
    3035             : #line 680 "../src/preproc/pic/pic.ypp"
    3036             :                 { (yyval.spec) = new object_spec(BOX_OBJECT); }
    3037             : #line 3038 "src/preproc/pic/pic.cpp"
    3038         367 :     break;
    3039             : 
    3040         164 :   case 76: /* object_spec: CIRCLE  */
    3041             : #line 682 "../src/preproc/pic/pic.ypp"
    3042             :                 { (yyval.spec) = new object_spec(CIRCLE_OBJECT); }
    3043             : #line 3044 "src/preproc/pic/pic.cpp"
    3044         164 :     break;
    3045             : 
    3046          29 :   case 77: /* object_spec: ELLIPSE  */
    3047             : #line 684 "../src/preproc/pic/pic.ypp"
    3048             :                 { (yyval.spec) = new object_spec(ELLIPSE_OBJECT); }
    3049             : #line 3050 "src/preproc/pic/pic.cpp"
    3050          29 :     break;
    3051             : 
    3052          20 :   case 78: /* object_spec: ARC  */
    3053             : #line 686 "../src/preproc/pic/pic.ypp"
    3054             :                 {
    3055             :                   (yyval.spec) = new object_spec(ARC_OBJECT);
    3056             :                   (yyval.spec)->dir = current_direction;
    3057             :                 }
    3058             : #line 3059 "src/preproc/pic/pic.cpp"
    3059          20 :     break;
    3060             : 
    3061          88 :   case 79: /* object_spec: LINE  */
    3062             : #line 691 "../src/preproc/pic/pic.ypp"
    3063             :                 {
    3064             :                   (yyval.spec) = new object_spec(LINE_OBJECT);
    3065             :                   lookup_variable("lineht", & (yyval.spec)->segment_height);
    3066             :                   lookup_variable("linewid", & (yyval.spec)->segment_width);
    3067             :                   (yyval.spec)->dir = current_direction;
    3068             :                 }
    3069             : #line 3070 "src/preproc/pic/pic.cpp"
    3070          88 :     break;
    3071             : 
    3072           7 :   case 80: /* object_spec: POLYGON  */
    3073             : #line 698 "../src/preproc/pic/pic.ypp"
    3074             :                 {
    3075             :                   (yyval.spec) = new object_spec(POLYGON_OBJECT);
    3076             :                   lookup_variable("lineht", & (yyval.spec)->segment_height);
    3077             :                   lookup_variable("linewid", & (yyval.spec)->segment_width);
    3078             :                   (yyval.spec)->dir = current_direction;
    3079             :                 }
    3080             : #line 3081 "src/preproc/pic/pic.cpp"
    3081           7 :     break;
    3082             : 
    3083         163 :   case 81: /* object_spec: ARROW  */
    3084             : #line 705 "../src/preproc/pic/pic.ypp"
    3085             :                 {
    3086             :                   (yyval.spec) = new object_spec(ARROW_OBJECT);
    3087             :                   lookup_variable("lineht", & (yyval.spec)->segment_height);
    3088             :                   lookup_variable("linewid", & (yyval.spec)->segment_width);
    3089             :                   (yyval.spec)->dir = current_direction;
    3090             :                 }
    3091             : #line 3092 "src/preproc/pic/pic.cpp"
    3092         163 :     break;
    3093             : 
    3094         230 :   case 82: /* object_spec: MOVE  */
    3095             : #line 712 "../src/preproc/pic/pic.ypp"
    3096             :                 {
    3097             :                   (yyval.spec) = new object_spec(MOVE_OBJECT);
    3098             :                   lookup_variable("moveht", & (yyval.spec)->segment_height);
    3099             :                   lookup_variable("movewid", & (yyval.spec)->segment_width);
    3100             :                   (yyval.spec)->dir = current_direction;
    3101             :                 }
    3102             : #line 3103 "src/preproc/pic/pic.cpp"
    3103         230 :     break;
    3104             : 
    3105          10 :   case 83: /* object_spec: SPLINE  */
    3106             : #line 719 "../src/preproc/pic/pic.ypp"
    3107             :                 {
    3108             :                   (yyval.spec) = new object_spec(SPLINE_OBJECT);
    3109             :                   lookup_variable("lineht", & (yyval.spec)->segment_height);
    3110             :                   lookup_variable("linewid", & (yyval.spec)->segment_width);
    3111             :                   (yyval.spec)->dir = current_direction;
    3112             :                 }
    3113             : #line 3114 "src/preproc/pic/pic.cpp"
    3114          10 :     break;
    3115             : 
    3116         578 :   case 84: /* object_spec: text  */
    3117             : #line 726 "../src/preproc/pic/pic.ypp"
    3118             :                 {
    3119             :                   (yyval.spec) = new object_spec(TEXT_OBJECT);
    3120             :                   (yyval.spec)->text = new text_item((yyvsp[0].lstr).str, (yyvsp[0].lstr).filename, (yyvsp[0].lstr).lineno);
    3121             :                 }
    3122             : #line 3123 "src/preproc/pic/pic.cpp"
    3123         578 :     break;
    3124             : 
    3125           0 :   case 85: /* object_spec: PLOT expr  */
    3126             : #line 731 "../src/preproc/pic/pic.ypp"
    3127             :                 {
    3128             :                   lex_warning("'plot' is deprecated; use 'sprintf'"
    3129             :                               " instead");
    3130             :                   (yyval.spec) = new object_spec(TEXT_OBJECT);
    3131             :                   (yyval.spec)->text = new text_item(format_number(0, (yyvsp[0].x)), 0, -1);
    3132             :                 }
    3133             : #line 3134 "src/preproc/pic/pic.cpp"
    3134           0 :     break;
    3135             : 
    3136           0 :   case 86: /* object_spec: PLOT expr text  */
    3137             : #line 738 "../src/preproc/pic/pic.ypp"
    3138             :                 {
    3139             :                   (yyval.spec) = new object_spec(TEXT_OBJECT);
    3140             :                   (yyval.spec)->text = new text_item(format_number((yyvsp[0].lstr).str, (yyvsp[-1].x)),
    3141             :                                            (yyvsp[0].lstr).filename, (yyvsp[0].lstr).lineno);
    3142             :                   delete[] (yyvsp[0].lstr).str;
    3143             :                 }
    3144             : #line 3145 "src/preproc/pic/pic.cpp"
    3145           0 :     break;
    3146             : 
    3147         148 :   case 87: /* @11: %empty  */
    3148             : #line 745 "../src/preproc/pic/pic.ypp"
    3149             :                 {
    3150             :                   saved_state *p = new saved_state;
    3151             :                   (yyval.pstate) = p;
    3152             :                   p->x = current_position.x;
    3153             :                   p->y = current_position.y;
    3154             :                   p->dir = current_direction;
    3155             :                   p->tbl = current_table;
    3156             :                   p->prev = current_saved_state;
    3157             :                   current_position.x = 0.0;
    3158             :                   current_position.y = 0.0;
    3159             :                   current_table = new PTABLE(place);
    3160             :                   current_saved_state = p;
    3161             :                   olist.append(make_mark_object());
    3162             :                 }
    3163             : #line 3164 "src/preproc/pic/pic.cpp"
    3164         148 :     break;
    3165             : 
    3166         148 :   case 88: /* object_spec: '[' @11 element_list ']'  */
    3167             : #line 760 "../src/preproc/pic/pic.ypp"
    3168             :                 {
    3169             :                   current_position.x = (yyvsp[-2].pstate)->x;
    3170             :                   current_position.y = (yyvsp[-2].pstate)->y;
    3171             :                   current_direction = (yyvsp[-2].pstate)->dir;
    3172             :                   (yyval.spec) = new object_spec(BLOCK_OBJECT);
    3173             :                   olist.wrap_up_block(& (yyval.spec)->oblist);
    3174             :                   (yyval.spec)->tbl = current_table;
    3175             :                   current_table = (yyvsp[-2].pstate)->tbl;
    3176             :                   current_saved_state = (yyvsp[-2].pstate)->prev;
    3177             :                   delete (yyvsp[-2].pstate);
    3178             :                 }
    3179             : #line 3180 "src/preproc/pic/pic.cpp"
    3180         148 :     break;
    3181             : 
    3182         184 :   case 89: /* object_spec: object_spec HEIGHT expr  */
    3183             : #line 772 "../src/preproc/pic/pic.ypp"
    3184             :                 {
    3185             :                   (yyval.spec) = (yyvsp[-2].spec);
    3186             :                   (yyval.spec)->height = (yyvsp[0].x);
    3187             :                   (yyval.spec)->flags |= HAS_HEIGHT;
    3188             :                 }
    3189             : #line 3190 "src/preproc/pic/pic.cpp"
    3190         184 :     break;
    3191             : 
    3192         170 :   case 90: /* object_spec: object_spec RADIUS expr  */
    3193             : #line 778 "../src/preproc/pic/pic.ypp"
    3194             :                 {
    3195             :                   (yyval.spec) = (yyvsp[-2].spec);
    3196             :                   (yyval.spec)->radius = (yyvsp[0].x);
    3197             :                   (yyval.spec)->flags |= HAS_RADIUS;
    3198             :                 }
    3199             : #line 3200 "src/preproc/pic/pic.cpp"
    3200         170 :     break;
    3201             : 
    3202         184 :   case 91: /* object_spec: object_spec WIDTH expr  */
    3203             : #line 784 "../src/preproc/pic/pic.ypp"
    3204             :                 {
    3205             :                   (yyval.spec) = (yyvsp[-2].spec);
    3206             :                   (yyval.spec)->width = (yyvsp[0].x);
    3207             :                   (yyval.spec)->flags |= HAS_WIDTH;
    3208             :                 }
    3209             : #line 3210 "src/preproc/pic/pic.cpp"
    3210         184 :     break;
    3211             : 
    3212           2 :   case 92: /* object_spec: object_spec DIAMETER expr  */
    3213             : #line 790 "../src/preproc/pic/pic.ypp"
    3214             :                 {
    3215             :                   (yyval.spec) = (yyvsp[-2].spec);
    3216             :                   (yyval.spec)->radius = (yyvsp[0].x)/2.0;
    3217             :                   (yyval.spec)->flags |= HAS_RADIUS;
    3218             :                 }
    3219             : #line 3220 "src/preproc/pic/pic.cpp"
    3220           2 :     break;
    3221             : 
    3222          71 :   case 93: /* object_spec: object_spec expr  */
    3223             : #line 796 "../src/preproc/pic/pic.ypp"
    3224             :                 {
    3225             :                   (yyval.spec) = (yyvsp[-1].spec);
    3226             :                   (yyval.spec)->flags |= HAS_SEGMENT;
    3227             :                   switch ((yyval.spec)->dir) {
    3228             :                   case UP_DIRECTION:
    3229             :                     (yyval.spec)->segment_pos.y += (yyvsp[0].x);
    3230             :                     break;
    3231             :                   case DOWN_DIRECTION:
    3232             :                     (yyval.spec)->segment_pos.y -= (yyvsp[0].x);
    3233             :                     break;
    3234             :                   case RIGHT_DIRECTION:
    3235             :                     (yyval.spec)->segment_pos.x += (yyvsp[0].x);
    3236             :                     break;
    3237             :                   case LEFT_DIRECTION:
    3238             :                     (yyval.spec)->segment_pos.x -= (yyvsp[0].x);
    3239             :                     break;
    3240             :                   }
    3241             :                 }
    3242             : #line 3243 "src/preproc/pic/pic.cpp"
    3243          71 :     break;
    3244             : 
    3245          30 :   case 94: /* object_spec: object_spec UP  */
    3246             : #line 815 "../src/preproc/pic/pic.ypp"
    3247             :                 {
    3248             :                   (yyval.spec) = (yyvsp[-1].spec);
    3249             :                   (yyval.spec)->dir = UP_DIRECTION;
    3250             :                   (yyval.spec)->flags |= HAS_SEGMENT;
    3251             :                   (yyval.spec)->segment_pos.y += (yyval.spec)->segment_height;
    3252             :                 }
    3253             : #line 3254 "src/preproc/pic/pic.cpp"
    3254          30 :     break;
    3255             : 
    3256          29 :   case 95: /* object_spec: object_spec UP expr  */
    3257             : #line 822 "../src/preproc/pic/pic.ypp"
    3258             :                 {
    3259             :                   (yyval.spec) = (yyvsp[-2].spec);
    3260             :                   (yyval.spec)->dir = UP_DIRECTION;
    3261             :                   (yyval.spec)->flags |= HAS_SEGMENT;
    3262             :                   (yyval.spec)->segment_pos.y += (yyvsp[0].x);
    3263             :                 }
    3264             : #line 3265 "src/preproc/pic/pic.cpp"
    3265          29 :     break;
    3266             : 
    3267          44 :   case 96: /* object_spec: object_spec DOWN  */
    3268             : #line 829 "../src/preproc/pic/pic.ypp"
    3269             :                 {
    3270             :                   (yyval.spec) = (yyvsp[-1].spec);
    3271             :                   (yyval.spec)->dir = DOWN_DIRECTION;
    3272             :                   (yyval.spec)->flags |= HAS_SEGMENT;
    3273             :                   (yyval.spec)->segment_pos.y -= (yyval.spec)->segment_height;
    3274             :                 }
    3275             : #line 3276 "src/preproc/pic/pic.cpp"
    3276          44 :     break;
    3277             : 
    3278          66 :   case 97: /* object_spec: object_spec DOWN expr  */
    3279             : #line 836 "../src/preproc/pic/pic.ypp"
    3280             :                 {
    3281             :                   (yyval.spec) = (yyvsp[-2].spec);
    3282             :                   (yyval.spec)->dir = DOWN_DIRECTION;
    3283             :                   (yyval.spec)->flags |= HAS_SEGMENT;
    3284             :                   (yyval.spec)->segment_pos.y -= (yyvsp[0].x);
    3285             :                 }
    3286             : #line 3287 "src/preproc/pic/pic.cpp"
    3287          66 :     break;
    3288             : 
    3289          24 :   case 98: /* object_spec: object_spec RIGHT  */
    3290             : #line 843 "../src/preproc/pic/pic.ypp"
    3291             :                 {
    3292             :                   (yyval.spec) = (yyvsp[-1].spec);
    3293             :                   (yyval.spec)->dir = RIGHT_DIRECTION;
    3294             :                   (yyval.spec)->flags |= HAS_SEGMENT;
    3295             :                   (yyval.spec)->segment_pos.x += (yyval.spec)->segment_width;
    3296             :                 }
    3297             : #line 3298 "src/preproc/pic/pic.cpp"
    3298          24 :     break;
    3299             : 
    3300          88 :   case 99: /* object_spec: object_spec RIGHT expr  */
    3301             : #line 850 "../src/preproc/pic/pic.ypp"
    3302             :                 {
    3303             :                   (yyval.spec) = (yyvsp[-2].spec);
    3304             :                   (yyval.spec)->dir = RIGHT_DIRECTION;
    3305             :                   (yyval.spec)->flags |= HAS_SEGMENT;
    3306             :                   (yyval.spec)->segment_pos.x += (yyvsp[0].x);
    3307             :                 }
    3308             : #line 3309 "src/preproc/pic/pic.cpp"
    3309          88 :     break;
    3310             : 
    3311          10 :   case 100: /* object_spec: object_spec LEFT  */
    3312             : #line 857 "../src/preproc/pic/pic.ypp"
    3313             :                 {
    3314             :                   (yyval.spec) = (yyvsp[-1].spec);
    3315             :                   (yyval.spec)->dir = LEFT_DIRECTION;
    3316             :                   (yyval.spec)->flags |= HAS_SEGMENT;
    3317             :                   (yyval.spec)->segment_pos.x -= (yyval.spec)->segment_width;
    3318             :                 }
    3319             : #line 3320 "src/preproc/pic/pic.cpp"
    3320          10 :     break;
    3321             : 
    3322          49 :   case 101: /* object_spec: object_spec LEFT expr  */
    3323             : #line 864 "../src/preproc/pic/pic.ypp"
    3324             :                 {
    3325             :                   (yyval.spec) = (yyvsp[-2].spec);
    3326             :                   (yyval.spec)->dir = LEFT_DIRECTION;
    3327             :                   (yyval.spec)->flags |= HAS_SEGMENT;
    3328             :                   (yyval.spec)->segment_pos.x -= (yyvsp[0].x);
    3329             :                 }
    3330             : #line 3331 "src/preproc/pic/pic.cpp"
    3331          49 :     break;
    3332             : 
    3333         141 :   case 102: /* object_spec: object_spec FROM position  */
    3334             : #line 871 "../src/preproc/pic/pic.ypp"
    3335             :                 {
    3336             :                   (yyval.spec) = (yyvsp[-2].spec);
    3337             :                   (yyval.spec)->flags |= HAS_FROM;
    3338             :                   (yyval.spec)->from.x = (yyvsp[0].pair).x;
    3339             :                   (yyval.spec)->from.y = (yyvsp[0].pair).y;
    3340             :                 }
    3341             : #line 3342 "src/preproc/pic/pic.cpp"
    3342         141 :     break;
    3343             : 
    3344          54 :   case 103: /* object_spec: object_spec TO position  */
    3345             : #line 878 "../src/preproc/pic/pic.ypp"
    3346             :                 {
    3347             :                   (yyval.spec) = (yyvsp[-2].spec);
    3348             :                   if ((yyval.spec)->flags & HAS_SEGMENT)
    3349             :                     (yyval.spec)->segment_list = new segment((yyval.spec)->segment_pos,
    3350             :                                                    (yyval.spec)->segment_is_absolute,
    3351             :                                                    (yyval.spec)->segment_list);
    3352             :                   (yyval.spec)->flags |= HAS_SEGMENT;
    3353             :                   (yyval.spec)->segment_pos.x = (yyvsp[0].pair).x;
    3354             :                   (yyval.spec)->segment_pos.y = (yyvsp[0].pair).y;
    3355             :                   (yyval.spec)->segment_is_absolute = 1;
    3356             :                   (yyval.spec)->flags |= HAS_TO;
    3357             :                   (yyval.spec)->to.x = (yyvsp[0].pair).x;
    3358             :                   (yyval.spec)->to.y = (yyvsp[0].pair).y;
    3359             :                 }
    3360             : #line 3361 "src/preproc/pic/pic.cpp"
    3361          54 :     break;
    3362             : 
    3363         816 :   case 104: /* object_spec: object_spec AT position  */
    3364             : #line 893 "../src/preproc/pic/pic.ypp"
    3365             :                 {
    3366             :                   (yyval.spec) = (yyvsp[-2].spec);
    3367             :                   (yyval.spec)->flags |= HAS_AT;
    3368             :                   (yyval.spec)->at.x = (yyvsp[0].pair).x;
    3369             :                   (yyval.spec)->at.y = (yyvsp[0].pair).y;
    3370             :                   if ((yyval.spec)->type != ARC_OBJECT) {
    3371             :                     (yyval.spec)->flags |= HAS_FROM;
    3372             :                     (yyval.spec)->from.x = (yyvsp[0].pair).x;
    3373             :                     (yyval.spec)->from.y = (yyvsp[0].pair).y;
    3374             :                   }
    3375             :                 }
    3376             : #line 3377 "src/preproc/pic/pic.cpp"
    3377         816 :     break;
    3378             : 
    3379         134 :   case 105: /* object_spec: object_spec WITH path  */
    3380             : #line 905 "../src/preproc/pic/pic.ypp"
    3381             :                 {
    3382             :                   (yyval.spec) = (yyvsp[-2].spec);
    3383             :                   (yyval.spec)->flags |= HAS_WITH;
    3384             :                   (yyval.spec)->with = (yyvsp[0].pth);
    3385             :                 }
    3386             : #line 3387 "src/preproc/pic/pic.cpp"
    3387         134 :     break;
    3388             : 
    3389           2 :   case 106: /* object_spec: object_spec WITH vertex  */
    3390             : #line 911 "../src/preproc/pic/pic.ypp"
    3391             :                 {
    3392             :                   (yyval.spec) = (yyvsp[-2].spec);
    3393             :                   (yyval.spec)->flags |= HAS_WITH;
    3394             :                   (yyval.spec)->with = new path((yyvsp[0].ver).crn);
    3395             :                   (yyval.spec)->vertex_number = (yyvsp[0].ver).vertex_number;
    3396             :                   (yyval.spec)->is_edge = (yyvsp[0].ver).is_edge;
    3397             :                 }
    3398             : #line 3399 "src/preproc/pic/pic.cpp"
    3399           2 :     break;
    3400             : 
    3401           0 :   case 107: /* object_spec: object_spec WITH position  */
    3402             : #line 919 "../src/preproc/pic/pic.ypp"
    3403             :                 {
    3404             :                   (yyval.spec) = (yyvsp[-2].spec);
    3405             :                   (yyval.spec)->flags |= HAS_WITH;
    3406             :                   position pos;
    3407             :                   pos.x = (yyvsp[0].pair).x;
    3408             :                   pos.y = (yyvsp[0].pair).y;
    3409             :                   (yyval.spec)->with = new path(pos);
    3410             :                 }
    3411             : #line 3412 "src/preproc/pic/pic.cpp"
    3412           0 :     break;
    3413             : 
    3414           0 :   case 108: /* object_spec: object_spec BY expr_pair  */
    3415             : #line 928 "../src/preproc/pic/pic.ypp"
    3416             :                 {
    3417             :                   (yyval.spec) = (yyvsp[-2].spec);
    3418             :                   (yyval.spec)->flags |= HAS_SEGMENT;
    3419             :                   (yyval.spec)->segment_pos.x += (yyvsp[0].pair).x;
    3420             :                   (yyval.spec)->segment_pos.y += (yyvsp[0].pair).y;
    3421             :                 }
    3422             : #line 3423 "src/preproc/pic/pic.cpp"
    3423           0 :     break;
    3424             : 
    3425          51 :   case 109: /* object_spec: object_spec THEN  */
    3426             : #line 935 "../src/preproc/pic/pic.ypp"
    3427             :                 {
    3428             :                   (yyval.spec) = (yyvsp[-1].spec);
    3429             :                   if (!((yyval.spec)->flags & HAS_SEGMENT))
    3430             :                     switch ((yyval.spec)->dir) {
    3431             :                     case UP_DIRECTION:
    3432             :                       (yyval.spec)->segment_pos.y += (yyval.spec)->segment_width;
    3433             :                       break;
    3434             :                     case DOWN_DIRECTION:
    3435             :                       (yyval.spec)->segment_pos.y -= (yyval.spec)->segment_width;
    3436             :                       break;
    3437             :                     case RIGHT_DIRECTION:
    3438             :                       (yyval.spec)->segment_pos.x += (yyval.spec)->segment_width;
    3439             :                       break;
    3440             :                     case LEFT_DIRECTION:
    3441             :                       (yyval.spec)->segment_pos.x -= (yyval.spec)->segment_width;
    3442             :                       break;
    3443             :                     }
    3444             :                   (yyval.spec)->segment_list = new segment((yyval.spec)->segment_pos,
    3445             :                                                  (yyval.spec)->segment_is_absolute,
    3446             :                                                  (yyval.spec)->segment_list);
    3447             :                   (yyval.spec)->flags &= ~HAS_SEGMENT;
    3448             :                   (yyval.spec)->segment_pos.x = (yyval.spec)->segment_pos.y = 0.0;
    3449             :                   (yyval.spec)->segment_is_absolute = 0;
    3450             :                 }
    3451             : #line 3452 "src/preproc/pic/pic.cpp"
    3452          51 :     break;
    3453             : 
    3454           0 :   case 110: /* object_spec: object_spec SOLID  */
    3455             : #line 960 "../src/preproc/pic/pic.ypp"
    3456             :                 {
    3457             :                   (yyval.spec) = (yyvsp[-1].spec);      // nothing
    3458             :                 }
    3459             : #line 3460 "src/preproc/pic/pic.cpp"
    3460           0 :     break;
    3461             : 
    3462          48 :   case 111: /* object_spec: object_spec DOTTED  */
    3463             : #line 964 "../src/preproc/pic/pic.ypp"
    3464             :                 {
    3465             :                   (yyval.spec) = (yyvsp[-1].spec);
    3466             :                   (yyval.spec)->flags |= IS_DOTTED;
    3467             :                   lookup_variable("dashwid", & (yyval.spec)->dash_width);
    3468             :                 }
    3469             : #line 3470 "src/preproc/pic/pic.cpp"
    3470          48 :     break;
    3471             : 
    3472           8 :   case 112: /* object_spec: object_spec DOTTED expr  */
    3473             : #line 970 "../src/preproc/pic/pic.ypp"
    3474             :                 {
    3475             :                   (yyval.spec) = (yyvsp[-2].spec);
    3476             :                   (yyval.spec)->flags |= IS_DOTTED;
    3477             :                   (yyval.spec)->dash_width = (yyvsp[0].x);
    3478             :                 }
    3479             : #line 3480 "src/preproc/pic/pic.cpp"
    3480           8 :     break;
    3481             : 
    3482          21 :   case 113: /* object_spec: object_spec DASHED  */
    3483             : #line 976 "../src/preproc/pic/pic.ypp"
    3484             :                 {
    3485             :                   (yyval.spec) = (yyvsp[-1].spec);
    3486             :                   (yyval.spec)->flags |= IS_DASHED;
    3487             :                   lookup_variable("dashwid", & (yyval.spec)->dash_width);
    3488             :                 }
    3489             : #line 3490 "src/preproc/pic/pic.cpp"
    3490          21 :     break;
    3491             : 
    3492           8 :   case 114: /* object_spec: object_spec DASHED expr  */
    3493             : #line 982 "../src/preproc/pic/pic.ypp"
    3494             :                 {
    3495             :                   (yyval.spec) = (yyvsp[-2].spec);
    3496             :                   (yyval.spec)->flags |= IS_DASHED;
    3497             :                   (yyval.spec)->dash_width = (yyvsp[0].x);
    3498             :                 }
    3499             : #line 3500 "src/preproc/pic/pic.cpp"
    3500           8 :     break;
    3501             : 
    3502         122 :   case 115: /* object_spec: object_spec FILL  */
    3503             : #line 988 "../src/preproc/pic/pic.ypp"
    3504             :                 {
    3505             :                   (yyval.spec) = (yyvsp[-1].spec);
    3506             :                   (yyval.spec)->flags |= IS_DEFAULT_FILLED;
    3507             :                 }
    3508             : #line 3509 "src/preproc/pic/pic.cpp"
    3509         122 :     break;
    3510             : 
    3511          83 :   case 116: /* object_spec: object_spec FILL expr  */
    3512             : #line 993 "../src/preproc/pic/pic.ypp"
    3513             :                 {
    3514             :                   (yyval.spec) = (yyvsp[-2].spec);
    3515             :                   (yyval.spec)->flags |= IS_FILLED;
    3516             :                   (yyval.spec)->fill = (yyvsp[0].x);
    3517             :                 }
    3518             : #line 3519 "src/preproc/pic/pic.cpp"
    3519          83 :     break;
    3520             : 
    3521          16 :   case 117: /* object_spec: object_spec XSLANTED expr  */
    3522             : #line 999 "../src/preproc/pic/pic.ypp"
    3523             :                 {
    3524             :                   (yyval.spec) = (yyvsp[-2].spec);
    3525             :                   (yyval.spec)->flags |= IS_XSLANTED;
    3526             :                   (yyval.spec)->xslanted = (yyvsp[0].x);
    3527             :                 }
    3528             : #line 3529 "src/preproc/pic/pic.cpp"
    3529          16 :     break;
    3530             : 
    3531          16 :   case 118: /* object_spec: object_spec YSLANTED expr  */
    3532             : #line 1005 "../src/preproc/pic/pic.ypp"
    3533             :                 {
    3534             :                   (yyval.spec) = (yyvsp[-2].spec);
    3535             :                   (yyval.spec)->flags |= IS_YSLANTED;
    3536             :                   (yyval.spec)->yslanted = (yyvsp[0].x);
    3537             :                 }
    3538             : #line 3539 "src/preproc/pic/pic.cpp"
    3539          16 :     break;
    3540             : 
    3541           2 :   case 119: /* object_spec: object_spec SHADED text  */
    3542             : #line 1011 "../src/preproc/pic/pic.ypp"
    3543             :                 {
    3544             :                   (yyval.spec) = (yyvsp[-2].spec);
    3545             :                   (yyval.spec)->flags |= (IS_SHADED | IS_FILLED);
    3546             :                   (yyval.spec)->shaded = new char[strlen((yyvsp[0].lstr).str)+1];
    3547             :                   strcpy((yyval.spec)->shaded, (yyvsp[0].lstr).str);
    3548             :                 }
    3549             : #line 3550 "src/preproc/pic/pic.cpp"
    3550           2 :     break;
    3551             : 
    3552          40 :   case 120: /* object_spec: object_spec COLORED text  */
    3553             : #line 1018 "../src/preproc/pic/pic.ypp"
    3554             :                 {
    3555             :                   (yyval.spec) = (yyvsp[-2].spec);
    3556             :                   (yyval.spec)->flags |= (IS_SHADED | IS_OUTLINED | IS_FILLED);
    3557             :                   (yyval.spec)->shaded = new char[strlen((yyvsp[0].lstr).str)+1];
    3558             :                   strcpy((yyval.spec)->shaded, (yyvsp[0].lstr).str);
    3559             :                   (yyval.spec)->outlined = new char[strlen((yyvsp[0].lstr).str)+1];
    3560             :                   strcpy((yyval.spec)->outlined, (yyvsp[0].lstr).str);
    3561             :                 }
    3562             : #line 3563 "src/preproc/pic/pic.cpp"
    3563          40 :     break;
    3564             : 
    3565          20 :   case 121: /* object_spec: object_spec OUTLINED text  */
    3566             : #line 1027 "../src/preproc/pic/pic.ypp"
    3567             :                 {
    3568             :                   (yyval.spec) = (yyvsp[-2].spec);
    3569             :                   (yyval.spec)->flags |= IS_OUTLINED;
    3570             :                   (yyval.spec)->outlined = new char[strlen((yyvsp[0].lstr).str)+1];
    3571             :                   strcpy((yyval.spec)->outlined, (yyvsp[0].lstr).str);
    3572             :                 }
    3573             : #line 3574 "src/preproc/pic/pic.cpp"
    3574          20 :     break;
    3575             : 
    3576           6 :   case 122: /* object_spec: object_spec CHOP  */
    3577             : #line 1034 "../src/preproc/pic/pic.ypp"
    3578             :                 {
    3579             :                   (yyval.spec) = (yyvsp[-1].spec);
    3580             :                   // line chop chop means line chop 0 chop 0
    3581             :                   if ((yyval.spec)->flags & IS_DEFAULT_CHOPPED) {
    3582             :                     (yyval.spec)->flags |= IS_CHOPPED;
    3583             :                     (yyval.spec)->flags &= ~IS_DEFAULT_CHOPPED;
    3584             :                     (yyval.spec)->start_chop = (yyval.spec)->end_chop = 0.0;
    3585             :                   }
    3586             :                   else if ((yyval.spec)->flags & IS_CHOPPED) {
    3587             :                     (yyval.spec)->end_chop = 0.0;
    3588             :                   }
    3589             :                   else {
    3590             :                     (yyval.spec)->flags |= IS_DEFAULT_CHOPPED;
    3591             :                   }
    3592             :                 }
    3593             : #line 3594 "src/preproc/pic/pic.cpp"
    3594           6 :     break;
    3595             : 
    3596          12 :   case 123: /* object_spec: object_spec CHOP expr  */
    3597             : #line 1050 "../src/preproc/pic/pic.ypp"
    3598             :                 {
    3599             :                   (yyval.spec) = (yyvsp[-2].spec);
    3600             :                   if ((yyval.spec)->flags & IS_DEFAULT_CHOPPED) {
    3601             :                     (yyval.spec)->flags |= IS_CHOPPED;
    3602             :                     (yyval.spec)->flags &= ~IS_DEFAULT_CHOPPED;
    3603             :                     (yyval.spec)->start_chop = 0.0;
    3604             :                     (yyval.spec)->end_chop = (yyvsp[0].x);
    3605             :                   }
    3606             :                   else if ((yyval.spec)->flags & IS_CHOPPED) {
    3607             :                     (yyval.spec)->end_chop = (yyvsp[0].x);
    3608             :                   }
    3609             :                   else {
    3610             :                     (yyval.spec)->start_chop = (yyval.spec)->end_chop = (yyvsp[0].x);
    3611             :                     (yyval.spec)->flags |= IS_CHOPPED;
    3612             :                   }
    3613             :                 }
    3614             : #line 3615 "src/preproc/pic/pic.cpp"
    3615          12 :     break;
    3616             : 
    3617           2 :   case 124: /* object_spec: object_spec SAME  */
    3618             : #line 1067 "../src/preproc/pic/pic.ypp"
    3619             :                 {
    3620             :                   (yyval.spec) = (yyvsp[-1].spec);
    3621             :                   (yyval.spec)->flags |= IS_SAME;
    3622             :                 }
    3623             : #line 3624 "src/preproc/pic/pic.cpp"
    3624           2 :     break;
    3625             : 
    3626          79 :   case 125: /* object_spec: object_spec INVISIBLE  */
    3627             : #line 1072 "../src/preproc/pic/pic.ypp"
    3628             :                 {
    3629             :                   (yyval.spec) = (yyvsp[-1].spec);
    3630             :                   (yyval.spec)->flags |= IS_INVISIBLE;
    3631             :                 }
    3632             : #line 3633 "src/preproc/pic/pic.cpp"
    3633          79 :     break;
    3634             : 
    3635           8 :   case 126: /* object_spec: object_spec LEFT_ARROW_HEAD  */
    3636             : #line 1077 "../src/preproc/pic/pic.ypp"
    3637             :                 {
    3638             :                   (yyval.spec) = (yyvsp[-1].spec);
    3639             :                   (yyval.spec)->flags |= HAS_LEFT_ARROW_HEAD;
    3640             :                 }
    3641             : #line 3642 "src/preproc/pic/pic.cpp"
    3642           8 :     break;
    3643             : 
    3644          16 :   case 127: /* object_spec: object_spec RIGHT_ARROW_HEAD  */
    3645             : #line 1082 "../src/preproc/pic/pic.ypp"
    3646             :                 {
    3647             :                   (yyval.spec) = (yyvsp[-1].spec);
    3648             :                   (yyval.spec)->flags |= HAS_RIGHT_ARROW_HEAD;
    3649             :                 }
    3650             : #line 3651 "src/preproc/pic/pic.cpp"
    3651          16 :     break;
    3652             : 
    3653           0 :   case 128: /* object_spec: object_spec DOUBLE_ARROW_HEAD  */
    3654             : #line 1087 "../src/preproc/pic/pic.ypp"
    3655             :                 {
    3656             :                   (yyval.spec) = (yyvsp[-1].spec);
    3657             :                   (yyval.spec)->flags |= (HAS_LEFT_ARROW_HEAD|HAS_RIGHT_ARROW_HEAD);
    3658             :                 }
    3659             : #line 3660 "src/preproc/pic/pic.cpp"
    3660           0 :     break;
    3661             : 
    3662           8 :   case 129: /* object_spec: object_spec CW  */
    3663             : #line 1092 "../src/preproc/pic/pic.ypp"
    3664             :                 {
    3665             :                   (yyval.spec) = (yyvsp[-1].spec);
    3666             :                   (yyval.spec)->flags |= IS_CLOCKWISE;
    3667             :                 }
    3668             : #line 3669 "src/preproc/pic/pic.cpp"
    3669           8 :     break;
    3670             : 
    3671           0 :   case 130: /* object_spec: object_spec CCW  */
    3672             : #line 1097 "../src/preproc/pic/pic.ypp"
    3673             :                 {
    3674             :                   (yyval.spec) = (yyvsp[-1].spec);
    3675             :                   (yyval.spec)->flags &= ~IS_CLOCKWISE;
    3676             :                 }
    3677             : #line 3678 "src/preproc/pic/pic.cpp"
    3678           0 :     break;
    3679             : 
    3680         270 :   case 131: /* object_spec: object_spec text  */
    3681             : #line 1102 "../src/preproc/pic/pic.ypp"
    3682             :                 {
    3683             :                   (yyval.spec) = (yyvsp[-1].spec);
    3684             :                   text_item **p;
    3685             :                   for (p = & (yyval.spec)->text; *p; p = &(*p)->next)
    3686             :                     ;
    3687             :                   *p = new text_item((yyvsp[0].lstr).str, (yyvsp[0].lstr).filename, (yyvsp[0].lstr).lineno);
    3688             :                 }
    3689             : #line 3690 "src/preproc/pic/pic.cpp"
    3690         270 :     break;
    3691             : 
    3692          32 :   case 132: /* object_spec: object_spec LJUST  */
    3693             : #line 1110 "../src/preproc/pic/pic.ypp"
    3694             :                 {
    3695             :                   (yyval.spec) = (yyvsp[-1].spec);
    3696             :                   if ((yyval.spec)->text) {
    3697             :                     text_item *p;
    3698             :                     for (p = (yyval.spec)->text; p->next; p = p->next)
    3699             :                       ;
    3700             :                     p->adj.h = LEFT_ADJUST;
    3701             :                   }
    3702             :                 }
    3703             : #line 3704 "src/preproc/pic/pic.cpp"
    3704          32 :     break;
    3705             : 
    3706          40 :   case 133: /* object_spec: object_spec RJUST  */
    3707             : #line 1120 "../src/preproc/pic/pic.ypp"
    3708             :                 {
    3709             :                   (yyval.spec) = (yyvsp[-1].spec);
    3710             :                   if ((yyval.spec)->text) {
    3711             :                     text_item *p;
    3712             :                     for (p = (yyval.spec)->text; p->next; p = p->next)
    3713             :                       ;
    3714             :                     p->adj.h = RIGHT_ADJUST;
    3715             :                   }
    3716             :                 }
    3717             : #line 3718 "src/preproc/pic/pic.cpp"
    3718          40 :     break;
    3719             : 
    3720          26 :   case 134: /* object_spec: object_spec ABOVE  */
    3721             : #line 1130 "../src/preproc/pic/pic.ypp"
    3722             :                 {
    3723             :                   (yyval.spec) = (yyvsp[-1].spec);
    3724             :                   if ((yyval.spec)->text) {
    3725             :                     text_item *p;
    3726             :                     for (p = (yyval.spec)->text; p->next; p = p->next)
    3727             :                       ;
    3728             :                     p->adj.v = ABOVE_ADJUST;
    3729             :                   }
    3730             :                 }
    3731             : #line 3732 "src/preproc/pic/pic.cpp"
    3732          26 :     break;
    3733             : 
    3734          26 :   case 135: /* object_spec: object_spec BELOW  */
    3735             : #line 1140 "../src/preproc/pic/pic.ypp"
    3736             :                 {
    3737             :                   (yyval.spec) = (yyvsp[-1].spec);
    3738             :                   if ((yyval.spec)->text) {
    3739             :                     text_item *p;
    3740             :                     for (p = (yyval.spec)->text; p->next; p = p->next)
    3741             :                       ;
    3742             :                     p->adj.v = BELOW_ADJUST;
    3743             :                   }
    3744             :                 }
    3745             : #line 3746 "src/preproc/pic/pic.cpp"
    3746          26 :     break;
    3747             : 
    3748           0 :   case 136: /* object_spec: object_spec THICKNESS expr  */
    3749             : #line 1150 "../src/preproc/pic/pic.ypp"
    3750             :                 {
    3751             :                   (yyval.spec) = (yyvsp[-2].spec);
    3752             :                   (yyval.spec)->flags |= HAS_THICKNESS;
    3753             :                   (yyval.spec)->thickness = (yyvsp[0].x);
    3754             :                 }
    3755             : #line 3756 "src/preproc/pic/pic.cpp"
    3756           0 :     break;
    3757             : 
    3758           0 :   case 137: /* object_spec: object_spec ALIGNED  */
    3759             : #line 1156 "../src/preproc/pic/pic.ypp"
    3760             :                 {
    3761             :                   (yyval.spec) = (yyvsp[-1].spec);
    3762             :                   (yyval.spec)->flags |= IS_ALIGNED;
    3763             :                 }
    3764             : #line 3765 "src/preproc/pic/pic.cpp"
    3765           0 :     break;
    3766             : 
    3767         894 :   case 138: /* text: TEXT  */
    3768             : #line 1164 "../src/preproc/pic/pic.ypp"
    3769             :                 { (yyval.lstr) = (yyvsp[0].lstr); }
    3770             : #line 3771 "src/preproc/pic/pic.cpp"
    3771         894 :     break;
    3772             : 
    3773          16 :   case 139: /* text: SPRINTF '(' TEXT sprintf_args ')'  */
    3774             : #line 1166 "../src/preproc/pic/pic.ypp"
    3775             :                 {
    3776             :                   (yyval.lstr).filename = (yyvsp[-2].lstr).filename;
    3777             :                   (yyval.lstr).lineno = (yyvsp[-2].lstr).lineno;
    3778             :                   (yyval.lstr).str = do_sprintf((yyvsp[-2].lstr).str, (yyvsp[-1].dv).v, (yyvsp[-1].dv).nv);
    3779             :                   delete[] (yyvsp[-1].dv).v;
    3780             :                   free((yyvsp[-2].lstr).str);
    3781             :                 }
    3782             : #line 3783 "src/preproc/pic/pic.cpp"
    3783          16 :     break;
    3784             : 
    3785          16 :   case 140: /* sprintf_args: %empty  */
    3786             : #line 1177 "../src/preproc/pic/pic.ypp"
    3787             :                 {
    3788             :                   (yyval.dv).v = 0;
    3789             :                   (yyval.dv).nv = 0;
    3790             :                   (yyval.dv).maxv = 0;
    3791             :                 }
    3792             : #line 3793 "src/preproc/pic/pic.cpp"
    3793          16 :     break;
    3794             : 
    3795          16 :   case 141: /* sprintf_args: sprintf_args ',' expr  */
    3796             : #line 1183 "../src/preproc/pic/pic.ypp"
    3797             :                 {
    3798             :                   (yyval.dv) = (yyvsp[-2].dv);
    3799             :                   if ((yyval.dv).nv >= (yyval.dv).maxv) {
    3800             :                     if ((yyval.dv).nv == 0) {
    3801             :                       (yyval.dv).v = new double[4];
    3802             :                       (yyval.dv).maxv = 4;
    3803             :                     }
    3804             :                     else {
    3805             :                       double *oldv = (yyval.dv).v;
    3806             :                       (yyval.dv).maxv *= 2;
    3807             :                       (yyval.dv).v = new double[(yyval.dv).maxv];
    3808             :                       memcpy((yyval.dv).v, oldv, ((yyval.dv).nv * sizeof(double)));
    3809             :                       delete[] oldv;
    3810             :                     }
    3811             :                   }
    3812             :                   (yyval.dv).v[(yyval.dv).nv] = (yyvsp[0].x);
    3813             :                   (yyval.dv).nv += 1;
    3814             :                 }
    3815             : #line 3816 "src/preproc/pic/pic.cpp"
    3816          16 :     break;
    3817             : 
    3818         466 :   case 142: /* position: position_not_place  */
    3819             : #line 1205 "../src/preproc/pic/pic.ypp"
    3820             :                 { (yyval.pair) = (yyvsp[0].pair); }
    3821             : #line 3822 "src/preproc/pic/pic.cpp"
    3822         466 :     break;
    3823             : 
    3824         647 :   case 143: /* position: place  */
    3825             : #line 1207 "../src/preproc/pic/pic.ypp"
    3826             :                 {
    3827             :                   position pos = (yyvsp[0].pl);
    3828             :                   (yyval.pair).x = pos.x;
    3829             :                   (yyval.pair).y = pos.y;
    3830             :                 }
    3831             : #line 3832 "src/preproc/pic/pic.cpp"
    3832         647 :     break;
    3833             : 
    3834           0 :   case 144: /* position: '(' place ')'  */
    3835             : #line 1213 "../src/preproc/pic/pic.ypp"
    3836             :                 {
    3837             :                   position pos = (yyvsp[-1].pl);
    3838             :                   (yyval.pair).x = pos.x;
    3839             :                   (yyval.pair).y = pos.y;
    3840             :                 }
    3841             : #line 3842 "src/preproc/pic/pic.cpp"
    3842           0 :     break;
    3843             : 
    3844         379 :   case 145: /* position_not_place: expr_pair  */
    3845             : #line 1222 "../src/preproc/pic/pic.ypp"
    3846             :                 { (yyval.pair) = (yyvsp[0].pair); }
    3847             : #line 3848 "src/preproc/pic/pic.cpp"
    3848         379 :     break;
    3849             : 
    3850          76 :   case 146: /* position_not_place: position '+' expr_pair  */
    3851             : #line 1224 "../src/preproc/pic/pic.ypp"
    3852             :                 {
    3853             :                   (yyval.pair).x = (yyvsp[-2].pair).x + (yyvsp[0].pair).x;
    3854             :                   (yyval.pair).y = (yyvsp[-2].pair).y + (yyvsp[0].pair).y;
    3855             :                 }
    3856             : #line 3857 "src/preproc/pic/pic.cpp"
    3857          76 :     break;
    3858             : 
    3859           0 :   case 147: /* position_not_place: '(' position '+' expr_pair ')'  */
    3860             : #line 1229 "../src/preproc/pic/pic.ypp"
    3861             :                 {
    3862             :                   (yyval.pair).x = (yyvsp[-3].pair).x + (yyvsp[-1].pair).x;
    3863             :                   (yyval.pair).y = (yyvsp[-3].pair).y + (yyvsp[-1].pair).y;
    3864             :                 }
    3865             : #line 3866 "src/preproc/pic/pic.cpp"
    3866           0 :     break;
    3867             : 
    3868           2 :   case 148: /* position_not_place: position '-' expr_pair  */
    3869             : #line 1234 "../src/preproc/pic/pic.ypp"
    3870             :                 {
    3871             :                   (yyval.pair).x = (yyvsp[-2].pair).x - (yyvsp[0].pair).x;
    3872             :                   (yyval.pair).y = (yyvsp[-2].pair).y - (yyvsp[0].pair).y;
    3873             :                 }
    3874             : #line 3875 "src/preproc/pic/pic.cpp"
    3875           2 :     break;
    3876             : 
    3877           0 :   case 149: /* position_not_place: '(' position '-' expr_pair ')'  */
    3878             : #line 1239 "../src/preproc/pic/pic.ypp"
    3879             :                 {
    3880             :                   (yyval.pair).x = (yyvsp[-3].pair).x - (yyvsp[-1].pair).x;
    3881             :                   (yyval.pair).y = (yyvsp[-3].pair).y - (yyvsp[-1].pair).y;
    3882             :                 }
    3883             : #line 3884 "src/preproc/pic/pic.cpp"
    3884           0 :     break;
    3885             : 
    3886           0 :   case 150: /* position_not_place: '(' position ',' position ')'  */
    3887             : #line 1244 "../src/preproc/pic/pic.ypp"
    3888             :                 {
    3889             :                   (yyval.pair).x = (yyvsp[-3].pair).x;
    3890             :                   (yyval.pair).y = (yyvsp[-1].pair).y;
    3891             :                 }
    3892             : #line 3893 "src/preproc/pic/pic.cpp"
    3893           0 :     break;
    3894             : 
    3895           8 :   case 151: /* position_not_place: expr between position AND position  */
    3896             : #line 1249 "../src/preproc/pic/pic.ypp"
    3897             :                 {
    3898             :                   (yyval.pair).x = (1.0 - (yyvsp[-4].x))*(yyvsp[-2].pair).x + (yyvsp[-4].x)*(yyvsp[0].pair).x;
    3899             :                   (yyval.pair).y = (1.0 - (yyvsp[-4].x))*(yyvsp[-2].pair).y + (yyvsp[-4].x)*(yyvsp[0].pair).y;
    3900             :                 }
    3901             : #line 3902 "src/preproc/pic/pic.cpp"
    3902           8 :     break;
    3903             : 
    3904           0 :   case 152: /* position_not_place: '(' expr between position AND position ')'  */
    3905             : #line 1254 "../src/preproc/pic/pic.ypp"
    3906             :                 {
    3907             :                   (yyval.pair).x = (1.0 - (yyvsp[-5].x))*(yyvsp[-3].pair).x + (yyvsp[-5].x)*(yyvsp[-1].pair).x;
    3908             :                   (yyval.pair).y = (1.0 - (yyvsp[-5].x))*(yyvsp[-3].pair).y + (yyvsp[-5].x)*(yyvsp[-1].pair).y;
    3909             :                 }
    3910             : #line 3911 "src/preproc/pic/pic.cpp"
    3911           0 :     break;
    3912             : 
    3913           4 :   case 153: /* position_not_place: expr_not_lower_than '<' position ',' position '>'  */
    3914             : #line 1260 "../src/preproc/pic/pic.ypp"
    3915             :                 {
    3916             :                   (yyval.pair).x = (1.0 - (yyvsp[-5].x))*(yyvsp[-3].pair).x + (yyvsp[-5].x)*(yyvsp[-1].pair).x;
    3917             :                   (yyval.pair).y = (1.0 - (yyvsp[-5].x))*(yyvsp[-3].pair).y + (yyvsp[-5].x)*(yyvsp[-1].pair).y;
    3918             :                 }
    3919             : #line 3920 "src/preproc/pic/pic.cpp"
    3920           4 :     break;
    3921             : 
    3922           0 :   case 154: /* position_not_place: '(' expr_not_lower_than '<' position ',' position '>' ')'  */
    3923             : #line 1265 "../src/preproc/pic/pic.ypp"
    3924             :                 {
    3925             :                   (yyval.pair).x = (1.0 - (yyvsp[-6].x))*(yyvsp[-4].pair).x + (yyvsp[-6].x)*(yyvsp[-2].pair).x;
    3926             :                   (yyval.pair).y = (1.0 - (yyvsp[-6].x))*(yyvsp[-4].pair).y + (yyvsp[-6].x)*(yyvsp[-2].pair).y;
    3927             :                 }
    3928             : #line 3929 "src/preproc/pic/pic.cpp"
    3929           0 :     break;
    3930             : 
    3931         457 :   case 157: /* expr_pair: expr ',' expr  */
    3932             : #line 1278 "../src/preproc/pic/pic.ypp"
    3933             :                 {
    3934             :                   (yyval.pair).x = (yyvsp[-2].x);
    3935             :                   (yyval.pair).y = (yyvsp[0].x);
    3936             :                 }
    3937             : #line 3938 "src/preproc/pic/pic.cpp"
    3938         457 :     break;
    3939             : 
    3940         456 :   case 158: /* expr_pair: '(' expr_pair ')'  */
    3941             : #line 1283 "../src/preproc/pic/pic.ypp"
    3942             :                 { (yyval.pair) = (yyvsp[-1].pair); }
    3943             : #line 3944 "src/preproc/pic/pic.cpp"
    3944         456 :     break;
    3945             : 
    3946         116 :   case 159: /* place: label  */
    3947             : #line 1289 "../src/preproc/pic/pic.ypp"
    3948             :                 { (yyval.pl) = (yyvsp[0].pl); }
    3949             : #line 3950 "src/preproc/pic/pic.cpp"
    3950         116 :     break;
    3951             : 
    3952         507 :   case 160: /* place: label corner  */
    3953             : #line 1291 "../src/preproc/pic/pic.ypp"
    3954             :                 {
    3955             :                   path pth((yyvsp[0].crn));
    3956             :                   if (!pth.follow((yyvsp[-1].pl), & (yyval.pl)))
    3957             :                     YYABORT;
    3958             :                 }
    3959             : #line 3960 "src/preproc/pic/pic.cpp"
    3960         507 :     break;
    3961             : 
    3962          34 :   case 161: /* place: label vertex  */
    3963             : #line 1297 "../src/preproc/pic/pic.ypp"
    3964             :                 {
    3965             :                   (yyvsp[-1].pl).obj->set_vertex_number((yyvsp[0].ver).vertex_number);
    3966             :                   path pth((yyvsp[0].ver).crn);
    3967             :                   if (!pth.follow((yyvsp[-1].pl), & (yyval.pl)))
    3968             :                     YYABORT;
    3969             :                 }
    3970             : #line 3971 "src/preproc/pic/pic.cpp"
    3971          34 :     break;
    3972             : 
    3973           0 :   case 162: /* place: corner label  */
    3974             : #line 1304 "../src/preproc/pic/pic.ypp"
    3975             :                 {
    3976             :                   path pth((yyvsp[-1].crn));
    3977             :                   if (!pth.follow((yyvsp[0].pl), & (yyval.pl)))
    3978             :                     YYABORT;
    3979             :                 }
    3980             : #line 3981 "src/preproc/pic/pic.cpp"
    3981           0 :     break;
    3982             : 
    3983          80 :   case 163: /* place: corner OF label  */
    3984             : #line 1310 "../src/preproc/pic/pic.ypp"
    3985             :                 {
    3986             :                   path pth((yyvsp[-2].crn));
    3987             :                   if (!pth.follow((yyvsp[0].pl), & (yyval.pl)))
    3988             :                     YYABORT;
    3989             :                 }
    3990             : #line 3991 "src/preproc/pic/pic.cpp"
    3991          80 :     break;
    3992             : 
    3993           0 :   case 164: /* place: vertex OF label  */
    3994             : #line 1316 "../src/preproc/pic/pic.ypp"
    3995             :                 {
    3996             :                   (yyvsp[0].pl).obj->set_vertex_number((yyvsp[-2].ver).vertex_number);
    3997             :                   path pth((yyvsp[-2].ver).crn);
    3998             :                   if (!pth.follow((yyvsp[0].pl), & (yyval.pl)))
    3999             :                     YYABORT;
    4000             :                 }
    4001             : #line 4002 "src/preproc/pic/pic.cpp"
    4002           0 :     break;
    4003             : 
    4004           0 :   case 165: /* place: HERE  */
    4005             : #line 1323 "../src/preproc/pic/pic.ypp"
    4006             :                 {
    4007             :                   (yyval.pl).x = current_position.x;
    4008             :                   (yyval.pl).y = current_position.y;
    4009             :                   (yyval.pl).obj = 0;
    4010             :                 }
    4011             : #line 4012 "src/preproc/pic/pic.cpp"
    4012           0 :     break;
    4013             : 
    4014         449 :   case 166: /* label: LABEL  */
    4015             : #line 1332 "../src/preproc/pic/pic.ypp"
    4016             :                 {
    4017             :                   place *p = lookup_label((yyvsp[0].str));
    4018             :                   if (!p) {
    4019             :                     lex_error("there is no place '%1'", (yyvsp[0].str));
    4020             :                     YYABORT;
    4021             :                   }
    4022             :                   (yyval.pl) = *p;
    4023             :                   free((yyvsp[0].str));
    4024             :                 }
    4025             : #line 4026 "src/preproc/pic/pic.cpp"
    4026         449 :     break;
    4027             : 
    4028         288 :   case 167: /* label: nth_primitive  */
    4029             : #line 1342 "../src/preproc/pic/pic.ypp"
    4030             :                 { (yyval.pl).obj = (yyvsp[0].obj); }
    4031             : #line 4032 "src/preproc/pic/pic.cpp"
    4032         288 :     break;
    4033             : 
    4034          22 :   case 168: /* label: label '.' LABEL  */
    4035             : #line 1344 "../src/preproc/pic/pic.ypp"
    4036             :                 {
    4037             :                   path pth((yyvsp[0].str));
    4038             :                   if (!pth.follow((yyvsp[-2].pl), & (yyval.pl)))
    4039             :                     YYABORT;
    4040             :                 }
    4041             : #line 4042 "src/preproc/pic/pic.cpp"
    4042          22 :     break;
    4043             : 
    4044          36 :   case 169: /* ordinal: ORDINAL  */
    4045             : #line 1353 "../src/preproc/pic/pic.ypp"
    4046             :                 { (yyval.n) = (yyvsp[0].n); }
    4047             : #line 4048 "src/preproc/pic/pic.cpp"
    4048          36 :     break;
    4049             : 
    4050           0 :   case 170: /* ordinal: '`' any_expr TH  */
    4051             : #line 1355 "../src/preproc/pic/pic.ypp"
    4052             :                 {
    4053             :                   // XXX Check for overflow (and non-integers?).
    4054             :                   (yyval.n) = int((yyvsp[-1].x));
    4055             :                 }
    4056             : #line 4057 "src/preproc/pic/pic.cpp"
    4057           0 :     break;
    4058             : 
    4059         252 :   case 171: /* optional_ordinal_last: LAST  */
    4060             : #line 1363 "../src/preproc/pic/pic.ypp"
    4061             :                 { (yyval.n) = 1; }
    4062             : #line 4063 "src/preproc/pic/pic.cpp"
    4063         252 :     break;
    4064             : 
    4065          12 :   case 172: /* optional_ordinal_last: ordinal LAST  */
    4066             : #line 1365 "../src/preproc/pic/pic.ypp"
    4067             :                 { (yyval.n) = (yyvsp[-1].n); }
    4068             : #line 4069 "src/preproc/pic/pic.cpp"
    4069          12 :     break;
    4070             : 
    4071          24 :   case 173: /* nth_primitive: ordinal object_type  */
    4072             : #line 1370 "../src/preproc/pic/pic.ypp"
    4073             :                 {
    4074             :                   int count = 0;
    4075             :                   object *p;
    4076             :                   for (p = olist.head; p != 0; p = p->next)
    4077             :                     if (p->type() == (yyvsp[0].obtype) && ++count == (yyvsp[-1].n)) {
    4078             :                       (yyval.obj) = p;
    4079             :                       break;
    4080             :                     }
    4081             :                   if (p == 0) {
    4082             :                     lex_error("there is no %1%2 %3", (yyvsp[-1].n), ordinal_postfix((yyvsp[-1].n)),
    4083             :                               object_type_name((yyvsp[0].obtype)));
    4084             :                     YYABORT;
    4085             :                   }
    4086             :                 }
    4087             : #line 4088 "src/preproc/pic/pic.cpp"
    4088          24 :     break;
    4089             : 
    4090         264 :   case 174: /* nth_primitive: optional_ordinal_last object_type  */
    4091             : #line 1385 "../src/preproc/pic/pic.ypp"
    4092             :                 {
    4093             :                   int count = 0;
    4094             :                   object *p;
    4095             :                   for (p = olist.tail; p != 0; p = p->prev)
    4096             :                     if (p->type() == (yyvsp[0].obtype) && ++count == (yyvsp[-1].n)) {
    4097             :                       (yyval.obj) = p;
    4098             :                       break;
    4099             :                     }
    4100             :                   if (p == 0) {
    4101             :                     lex_error("there is no %1%2 last %3", (yyvsp[-1].n),
    4102             :                               ordinal_postfix((yyvsp[-1].n)), object_type_name((yyvsp[0].obtype)));
    4103             :                     YYABORT;
    4104             :                   }
    4105             :                 }
    4106             : #line 4107 "src/preproc/pic/pic.cpp"
    4107         264 :     break;
    4108             : 
    4109          96 :   case 175: /* object_type: BOX  */
    4110             : #line 1403 "../src/preproc/pic/pic.ypp"
    4111             :                 { (yyval.obtype) = BOX_OBJECT; }
    4112             : #line 4113 "src/preproc/pic/pic.cpp"
    4113          96 :     break;
    4114             : 
    4115          58 :   case 176: /* object_type: CIRCLE  */
    4116             : #line 1405 "../src/preproc/pic/pic.ypp"
    4117             :                 { (yyval.obtype) = CIRCLE_OBJECT; }
    4118             : #line 4119 "src/preproc/pic/pic.cpp"
    4119          58 :     break;
    4120             : 
    4121           2 :   case 177: /* object_type: ELLIPSE  */
    4122             : #line 1407 "../src/preproc/pic/pic.ypp"
    4123             :                 { (yyval.obtype) = ELLIPSE_OBJECT; }
    4124             : #line 4125 "src/preproc/pic/pic.cpp"
    4125           2 :     break;
    4126             : 
    4127           6 :   case 178: /* object_type: ARC  */
    4128             : #line 1409 "../src/preproc/pic/pic.ypp"
    4129             :                 { (yyval.obtype) = ARC_OBJECT; }
    4130             : #line 4131 "src/preproc/pic/pic.cpp"
    4131           6 :     break;
    4132             : 
    4133           2 :   case 179: /* object_type: LINE  */
    4134             : #line 1411 "../src/preproc/pic/pic.ypp"
    4135             :                 { (yyval.obtype) = LINE_OBJECT; }
    4136             : #line 4137 "src/preproc/pic/pic.cpp"
    4137           2 :     break;
    4138             : 
    4139           6 :   case 180: /* object_type: POLYGON  */
    4140             : #line 1413 "../src/preproc/pic/pic.ypp"
    4141             :                 { (yyval.obtype) = POLYGON_OBJECT; }
    4142             : #line 4143 "src/preproc/pic/pic.cpp"
    4143           6 :     break;
    4144             : 
    4145          38 :   case 181: /* object_type: ARROW  */
    4146             : #line 1415 "../src/preproc/pic/pic.ypp"
    4147             :                 { (yyval.obtype) = ARROW_OBJECT; }
    4148             : #line 4149 "src/preproc/pic/pic.cpp"
    4149          38 :     break;
    4150             : 
    4151           8 :   case 182: /* object_type: SPLINE  */
    4152             : #line 1417 "../src/preproc/pic/pic.ypp"
    4153             :                 { (yyval.obtype) = SPLINE_OBJECT; }
    4154             : #line 4155 "src/preproc/pic/pic.cpp"
    4155           8 :     break;
    4156             : 
    4157          72 :   case 183: /* object_type: '[' ']'  */
    4158             : #line 1419 "../src/preproc/pic/pic.ypp"
    4159             :                 { (yyval.obtype) = BLOCK_OBJECT; }
    4160             : #line 4161 "src/preproc/pic/pic.cpp"
    4161          72 :     break;
    4162             : 
    4163           0 :   case 184: /* object_type: TEXT  */
    4164             : #line 1421 "../src/preproc/pic/pic.ypp"
    4165             :                 { (yyval.obtype) = TEXT_OBJECT; }
    4166             : #line 4167 "src/preproc/pic/pic.cpp"
    4167           0 :     break;
    4168             : 
    4169           0 :   case 185: /* label_path: '.' LABEL  */
    4170             : #line 1426 "../src/preproc/pic/pic.ypp"
    4171             :                 { (yyval.pth) = new path((yyvsp[0].str)); }
    4172             : #line 4173 "src/preproc/pic/pic.cpp"
    4173           0 :     break;
    4174             : 
    4175           0 :   case 186: /* label_path: label_path '.' LABEL  */
    4176             : #line 1428 "../src/preproc/pic/pic.ypp"
    4177             :                 {
    4178             :                   (yyval.pth) = (yyvsp[-2].pth);
    4179             :                   (yyval.pth)->append((yyvsp[0].str));
    4180             :                 }
    4181             : #line 4182 "src/preproc/pic/pic.cpp"
    4182           0 :     break;
    4183             : 
    4184         134 :   case 187: /* relative_path: corner  */
    4185             : #line 1436 "../src/preproc/pic/pic.ypp"
    4186             :                 { (yyval.pth) = new path((yyvsp[0].crn)); }
    4187             : #line 4188 "src/preproc/pic/pic.cpp"
    4188         134 :     break;
    4189             : 
    4190           0 :   case 188: /* relative_path: label_path  */
    4191             : #line 1440 "../src/preproc/pic/pic.ypp"
    4192             :                 { (yyval.pth) = (yyvsp[0].pth); }
    4193             : #line 4194 "src/preproc/pic/pic.cpp"
    4194           0 :     break;
    4195             : 
    4196           0 :   case 189: /* relative_path: label_path corner  */
    4197             : #line 1442 "../src/preproc/pic/pic.ypp"
    4198             :                 {
    4199             :                   (yyval.pth) = (yyvsp[-1].pth);
    4200             :                   (yyval.pth)->append((yyvsp[0].crn));
    4201             :                 }
    4202             : #line 4203 "src/preproc/pic/pic.cpp"
    4203           0 :     break;
    4204             : 
    4205         134 :   case 190: /* path: relative_path  */
    4206             : #line 1450 "../src/preproc/pic/pic.ypp"
    4207             :                 { (yyval.pth) = (yyvsp[0].pth); }
    4208             : #line 4209 "src/preproc/pic/pic.cpp"
    4209         134 :     break;
    4210             : 
    4211           0 :   case 191: /* path: '(' relative_path ',' relative_path ')'  */
    4212             : #line 1452 "../src/preproc/pic/pic.ypp"
    4213             :                 {
    4214             :                   (yyval.pth) = (yyvsp[-3].pth);
    4215             :                   (yyval.pth)->set_ypath((yyvsp[-1].pth));
    4216             :                 }
    4217             : #line 4218 "src/preproc/pic/pic.cpp"
    4218           0 :     break;
    4219             : 
    4220           0 :   case 192: /* path: ORDINAL LAST object_type relative_path  */
    4221             : #line 1458 "../src/preproc/pic/pic.ypp"
    4222             :                 {
    4223             :                   lex_warning("'%1%2 last %3' in 'with' argument ignored",
    4224             :                               (yyvsp[-3].n), ordinal_postfix((yyvsp[-3].n)), object_type_name((yyvsp[-1].obtype)));
    4225             :                   (yyval.pth) = (yyvsp[0].pth);
    4226             :                 }
    4227             : #line 4228 "src/preproc/pic/pic.cpp"
    4228           0 :     break;
    4229             : 
    4230           0 :   case 193: /* path: LAST object_type relative_path  */
    4231             : #line 1464 "../src/preproc/pic/pic.ypp"
    4232             :                 {
    4233             :                   lex_warning("'last %1' in 'with' argument ignored",
    4234             :                               object_type_name((yyvsp[-1].obtype)));
    4235             :                   (yyval.pth) = (yyvsp[0].pth);
    4236             :                 }
    4237             : #line 4238 "src/preproc/pic/pic.cpp"
    4238           0 :     break;
    4239             : 
    4240           0 :   case 194: /* path: ORDINAL object_type relative_path  */
    4241             : #line 1470 "../src/preproc/pic/pic.ypp"
    4242             :                 {
    4243             :                   lex_warning("'%1%2 %3' in 'with' argument ignored",
    4244             :                               (yyvsp[-2].n), ordinal_postfix((yyvsp[-2].n)), object_type_name((yyvsp[-1].obtype)));
    4245             :                   (yyval.pth) = (yyvsp[0].pth);
    4246             :                 }
    4247             : #line 4248 "src/preproc/pic/pic.cpp"
    4248           0 :     break;
    4249             : 
    4250           0 :   case 195: /* path: LABEL relative_path  */
    4251             : #line 1476 "../src/preproc/pic/pic.ypp"
    4252             :                 {
    4253             :                   lex_warning("initial '%1' in 'with' argument ignored", (yyvsp[-1].str));
    4254             :                   delete[] (yyvsp[-1].str);
    4255             :                   (yyval.pth) = (yyvsp[0].pth);
    4256             :                 }
    4257             : #line 4258 "src/preproc/pic/pic.cpp"
    4258           0 :     break;
    4259             : 
    4260          71 :   case 196: /* corner: DOT_N  */
    4261             : #line 1485 "../src/preproc/pic/pic.ypp"
    4262             :                 { (yyval.crn) = &object::north; }
    4263             : #line 4264 "src/preproc/pic/pic.cpp"
    4264          71 :     break;
    4265             : 
    4266          76 :   case 197: /* corner: DOT_E  */
    4267             : #line 1487 "../src/preproc/pic/pic.ypp"
    4268             :                 { (yyval.crn) = &object::east; }
    4269             : #line 4270 "src/preproc/pic/pic.cpp"
    4270          76 :     break;
    4271             : 
    4272          29 :   case 198: /* corner: DOT_W  */
    4273             : #line 1489 "../src/preproc/pic/pic.ypp"
    4274             :                 { (yyval.crn) = &object::west; }
    4275             : #line 4276 "src/preproc/pic/pic.cpp"
    4276          29 :     break;
    4277             : 
    4278         113 :   case 199: /* corner: DOT_S  */
    4279             : #line 1491 "../src/preproc/pic/pic.ypp"
    4280             :                 { (yyval.crn) = &object::south; }
    4281             : #line 4282 "src/preproc/pic/pic.cpp"
    4282         113 :     break;
    4283             : 
    4284          35 :   case 200: /* corner: DOT_NE  */
    4285             : #line 1493 "../src/preproc/pic/pic.ypp"
    4286             :                 { (yyval.crn) = &object::north_east; }
    4287             : #line 4288 "src/preproc/pic/pic.cpp"
    4288          35 :     break;
    4289             : 
    4290          57 :   case 201: /* corner: DOT_SE  */
    4291             : #line 1495 "../src/preproc/pic/pic.ypp"
    4292             :                 { (yyval.crn) = &object::south_east; }
    4293             : #line 4294 "src/preproc/pic/pic.cpp"
    4294          57 :     break;
    4295             : 
    4296          71 :   case 202: /* corner: DOT_NW  */
    4297             : #line 1497 "../src/preproc/pic/pic.ypp"
    4298             :                 { (yyval.crn) = &object::north_west; }
    4299             : #line 4300 "src/preproc/pic/pic.cpp"
    4300          71 :     break;
    4301             : 
    4302          57 :   case 203: /* corner: DOT_SW  */
    4303             : #line 1499 "../src/preproc/pic/pic.ypp"
    4304             :                 { (yyval.crn) = &object::south_west; }
    4305             : #line 4306 "src/preproc/pic/pic.cpp"
    4306          57 :     break;
    4307             : 
    4308          62 :   case 204: /* corner: DOT_C  */
    4309             : #line 1501 "../src/preproc/pic/pic.ypp"
    4310             :                 { (yyval.crn) = &object::center; }
    4311             : #line 4312 "src/preproc/pic/pic.cpp"
    4312          62 :     break;
    4313             : 
    4314          22 :   case 205: /* corner: DOT_START  */
    4315             : #line 1503 "../src/preproc/pic/pic.ypp"
    4316             :                 { (yyval.crn) = &object::start; }
    4317             : #line 4318 "src/preproc/pic/pic.cpp"
    4318          22 :     break;
    4319             : 
    4320          48 :   case 206: /* corner: DOT_END  */
    4321             : #line 1505 "../src/preproc/pic/pic.ypp"
    4322             :                 { (yyval.crn) = &object::end; }
    4323             : #line 4324 "src/preproc/pic/pic.cpp"
    4324          48 :     break;
    4325             : 
    4326           0 :   case 207: /* corner: TOP  */
    4327             : #line 1507 "../src/preproc/pic/pic.ypp"
    4328             :                 { (yyval.crn) = &object::north; }
    4329             : #line 4330 "src/preproc/pic/pic.cpp"
    4330           0 :     break;
    4331             : 
    4332           0 :   case 208: /* corner: BOTTOM  */
    4333             : #line 1509 "../src/preproc/pic/pic.ypp"
    4334             :                 { (yyval.crn) = &object::south; }
    4335             : #line 4336 "src/preproc/pic/pic.cpp"
    4336           0 :     break;
    4337             : 
    4338           0 :   case 209: /* corner: LEFT  */
    4339             : #line 1511 "../src/preproc/pic/pic.ypp"
    4340             :                 { (yyval.crn) = &object::west; }
    4341             : #line 4342 "src/preproc/pic/pic.cpp"
    4342           0 :     break;
    4343             : 
    4344           0 :   case 210: /* corner: RIGHT  */
    4345             : #line 1513 "../src/preproc/pic/pic.ypp"
    4346             :                 { (yyval.crn) = &object::east; }
    4347             : #line 4348 "src/preproc/pic/pic.cpp"
    4348           0 :     break;
    4349             : 
    4350           0 :   case 211: /* corner: UPPER LEFT  */
    4351             : #line 1515 "../src/preproc/pic/pic.ypp"
    4352             :                 { (yyval.crn) = &object::north_west; }
    4353             : #line 4354 "src/preproc/pic/pic.cpp"
    4354           0 :     break;
    4355             : 
    4356           0 :   case 212: /* corner: LOWER LEFT  */
    4357             : #line 1517 "../src/preproc/pic/pic.ypp"
    4358             :                 { (yyval.crn) = &object::south_west; }
    4359             : #line 4360 "src/preproc/pic/pic.cpp"
    4360           0 :     break;
    4361             : 
    4362           0 :   case 213: /* corner: UPPER RIGHT  */
    4363             : #line 1519 "../src/preproc/pic/pic.ypp"
    4364             :                 { (yyval.crn) = &object::north_east; }
    4365             : #line 4366 "src/preproc/pic/pic.cpp"
    4366           0 :     break;
    4367             : 
    4368           0 :   case 214: /* corner: LOWER RIGHT  */
    4369             : #line 1521 "../src/preproc/pic/pic.ypp"
    4370             :                 { (yyval.crn) = &object::south_east; }
    4371             : #line 4372 "src/preproc/pic/pic.cpp"
    4372           0 :     break;
    4373             : 
    4374           0 :   case 215: /* corner: LEFT_CORNER  */
    4375             : #line 1523 "../src/preproc/pic/pic.ypp"
    4376             :                 { (yyval.crn) = &object::west; }
    4377             : #line 4378 "src/preproc/pic/pic.cpp"
    4378           0 :     break;
    4379             : 
    4380           0 :   case 216: /* corner: RIGHT_CORNER  */
    4381             : #line 1525 "../src/preproc/pic/pic.ypp"
    4382             :                 { (yyval.crn) = &object::east; }
    4383             : #line 4384 "src/preproc/pic/pic.cpp"
    4384           0 :     break;
    4385             : 
    4386           0 :   case 217: /* corner: UPPER LEFT_CORNER  */
    4387             : #line 1527 "../src/preproc/pic/pic.ypp"
    4388             :                 { (yyval.crn) = &object::north_west; }
    4389             : #line 4390 "src/preproc/pic/pic.cpp"
    4390           0 :     break;
    4391             : 
    4392           0 :   case 218: /* corner: LOWER LEFT_CORNER  */
    4393             : #line 1529 "../src/preproc/pic/pic.ypp"
    4394             :                 { (yyval.crn) = &object::south_west; }
    4395             : #line 4396 "src/preproc/pic/pic.cpp"
    4396           0 :     break;
    4397             : 
    4398           0 :   case 219: /* corner: UPPER RIGHT_CORNER  */
    4399             : #line 1531 "../src/preproc/pic/pic.ypp"
    4400             :                 { (yyval.crn) = &object::north_east; }
    4401             : #line 4402 "src/preproc/pic/pic.cpp"
    4402           0 :     break;
    4403             : 
    4404           0 :   case 220: /* corner: LOWER RIGHT_CORNER  */
    4405             : #line 1533 "../src/preproc/pic/pic.ypp"
    4406             :                 { (yyval.crn) = &object::south_east; }
    4407             : #line 4408 "src/preproc/pic/pic.cpp"
    4408           0 :     break;
    4409             : 
    4410           0 :   case 221: /* corner: NORTH  */
    4411             : #line 1535 "../src/preproc/pic/pic.ypp"
    4412             :                 { (yyval.crn) = &object::north; }
    4413             : #line 4414 "src/preproc/pic/pic.cpp"
    4414           0 :     break;
    4415             : 
    4416           0 :   case 222: /* corner: SOUTH  */
    4417             : #line 1537 "../src/preproc/pic/pic.ypp"
    4418             :                 { (yyval.crn) = &object::south; }
    4419             : #line 4420 "src/preproc/pic/pic.cpp"
    4420           0 :     break;
    4421             : 
    4422           0 :   case 223: /* corner: EAST  */
    4423             : #line 1539 "../src/preproc/pic/pic.ypp"
    4424             :                 { (yyval.crn) = &object::east; }
    4425             : #line 4426 "src/preproc/pic/pic.cpp"
    4426           0 :     break;
    4427             : 
    4428           0 :   case 224: /* corner: WEST  */
    4429             : #line 1541 "../src/preproc/pic/pic.ypp"
    4430             :                 { (yyval.crn) = &object::west; }
    4431             : #line 4432 "src/preproc/pic/pic.cpp"
    4432           0 :     break;
    4433             : 
    4434          78 :   case 225: /* corner: CENTER  */
    4435             : #line 1543 "../src/preproc/pic/pic.ypp"
    4436             :                 { (yyval.crn) = &object::center; }
    4437             : #line 4438 "src/preproc/pic/pic.cpp"
    4438          78 :     break;
    4439             : 
    4440           2 :   case 226: /* corner: START  */
    4441             : #line 1545 "../src/preproc/pic/pic.ypp"
    4442             :                 { (yyval.crn) = &object::start; }
    4443             : #line 4444 "src/preproc/pic/pic.cpp"
    4444           2 :     break;
    4445             : 
    4446           0 :   case 227: /* corner: END  */
    4447             : #line 1547 "../src/preproc/pic/pic.ypp"
    4448             :                 { (yyval.crn) = &object::end; }
    4449             : #line 4450 "src/preproc/pic/pic.cpp"
    4450           0 :     break;
    4451             : 
    4452          12 :   case 228: /* vertex: DOT_V expr  */
    4453             : #line 1552 "../src/preproc/pic/pic.ypp"
    4454             :                 {
    4455             :                   (yyval.ver).crn = &object::vertex;
    4456             :                   (yyval.ver).vertex_number = (yyvsp[0].x);
    4457             :                 }
    4458             : #line 4459 "src/preproc/pic/pic.cpp"
    4459          12 :     break;
    4460             : 
    4461           6 :   case 229: /* vertex: DOT_V '`' expr '\''  */
    4462             : #line 1557 "../src/preproc/pic/pic.ypp"
    4463             :                 {
    4464             :                   (yyval.ver).crn = &object::vertex;
    4465             :                   (yyval.ver).vertex_number = (yyvsp[-1].x);
    4466             :                 }
    4467             : #line 4468 "src/preproc/pic/pic.cpp"
    4468           6 :     break;
    4469             : 
    4470           6 :   case 230: /* vertex: DOT_MID expr  */
    4471             : #line 1562 "../src/preproc/pic/pic.ypp"
    4472             :                 {
    4473             :                   (yyval.ver).crn = &object::point;
    4474             :                   (yyval.ver).vertex_number = (yyvsp[0].x);
    4475             :                   (yyval.ver).is_edge = 1;
    4476             :                 }
    4477             : #line 4478 "src/preproc/pic/pic.cpp"
    4478           6 :     break;
    4479             : 
    4480          12 :   case 231: /* vertex: DOT_MID '`' expr '\''  */
    4481             : #line 1568 "../src/preproc/pic/pic.ypp"
    4482             :                 {
    4483             :                   (yyval.ver).crn = &object::point;
    4484             :                   (yyval.ver).vertex_number = (yyvsp[-1].x);
    4485             :                   (yyval.ver).is_edge = 1;
    4486             :                 }
    4487             : #line 4488 "src/preproc/pic/pic.cpp"
    4488          12 :     break;
    4489             : 
    4490           0 :   case 232: /* expr: expr_lower_than  */
    4491             : #line 1577 "../src/preproc/pic/pic.ypp"
    4492             :                 { (yyval.x) = (yyvsp[0].x); }
    4493             : #line 4494 "src/preproc/pic/pic.cpp"
    4494           0 :     break;
    4495             : 
    4496        4233 :   case 233: /* expr: expr_not_lower_than  */
    4497             : #line 1579 "../src/preproc/pic/pic.ypp"
    4498             :                 { (yyval.x) = (yyvsp[0].x); }
    4499             : #line 4500 "src/preproc/pic/pic.cpp"
    4500        4233 :     break;
    4501             : 
    4502           0 :   case 234: /* expr_lower_than: expr '<' expr  */
    4503             : #line 1584 "../src/preproc/pic/pic.ypp"
    4504             :                 { (yyval.x) = ((yyvsp[-2].x) < (yyvsp[0].x)); }
    4505             : #line 4506 "src/preproc/pic/pic.cpp"
    4506           0 :     break;
    4507             : 
    4508         756 :   case 235: /* expr_not_lower_than: VARIABLE  */
    4509             : #line 1589 "../src/preproc/pic/pic.ypp"
    4510             :                 {
    4511             :                   if (!lookup_variable((yyvsp[0].str), & (yyval.x))) {
    4512             :                     lex_error("there is no variable '%1'", (yyvsp[0].str));
    4513             :                     YYABORT;
    4514             :                   }
    4515             :                   free((yyvsp[0].str));
    4516             :                 }
    4517             : #line 4518 "src/preproc/pic/pic.cpp"
    4518         756 :     break;
    4519             : 
    4520        2127 :   case 236: /* expr_not_lower_than: NUMBER  */
    4521             : #line 1597 "../src/preproc/pic/pic.ypp"
    4522             :                 { (yyval.x) = (yyvsp[0].x); }
    4523             : #line 4524 "src/preproc/pic/pic.cpp"
    4524        2127 :     break;
    4525             : 
    4526           0 :   case 237: /* expr_not_lower_than: place DOT_X  */
    4527             : #line 1599 "../src/preproc/pic/pic.ypp"
    4528             :                 {
    4529             :                   if ((yyvsp[-1].pl).obj != 0)
    4530             :                     (yyval.x) = (yyvsp[-1].pl).obj->origin().x;
    4531             :                   else
    4532             :                     (yyval.x) = (yyvsp[-1].pl).x;
    4533             :                 }
    4534             : #line 4535 "src/preproc/pic/pic.cpp"
    4535           0 :     break;
    4536             : 
    4537           0 :   case 238: /* expr_not_lower_than: place DOT_Y  */
    4538             : #line 1606 "../src/preproc/pic/pic.ypp"
    4539             :                 {
    4540             :                   if ((yyvsp[-1].pl).obj != 0)
    4541             :                     (yyval.x) = (yyvsp[-1].pl).obj->origin().y;
    4542             :                   else
    4543             :                     (yyval.x) = (yyvsp[-1].pl).y;
    4544             :                 }
    4545             : #line 4546 "src/preproc/pic/pic.cpp"
    4546           0 :     break;
    4547             : 
    4548          42 :   case 239: /* expr_not_lower_than: place DOT_HT  */
    4549             : #line 1613 "../src/preproc/pic/pic.ypp"
    4550             :                 {
    4551             :                   if ((yyvsp[-1].pl).obj != 0)
    4552             :                     (yyval.x) = (yyvsp[-1].pl).obj->height();
    4553             :                   else
    4554             :                     (yyval.x) = 0.0;
    4555             :                 }
    4556             : #line 4557 "src/preproc/pic/pic.cpp"
    4557          42 :     break;
    4558             : 
    4559          42 :   case 240: /* expr_not_lower_than: place DOT_WID  */
    4560             : #line 1620 "../src/preproc/pic/pic.ypp"
    4561             :                 {
    4562             :                   if ((yyvsp[-1].pl).obj != 0)
    4563             :                     (yyval.x) = (yyvsp[-1].pl).obj->width();
    4564             :                   else
    4565             :                     (yyval.x) = 0.0;
    4566             :                 }
    4567             : #line 4568 "src/preproc/pic/pic.cpp"
    4568          42 :     break;
    4569             : 
    4570           0 :   case 241: /* expr_not_lower_than: place DOT_RAD  */
    4571             : #line 1627 "../src/preproc/pic/pic.ypp"
    4572             :                 {
    4573             :                   if ((yyvsp[-1].pl).obj != 0)
    4574             :                     (yyval.x) = (yyvsp[-1].pl).obj->radius();
    4575             :                   else
    4576             :                     (yyval.x) = 0.0;
    4577             :                 }
    4578             : #line 4579 "src/preproc/pic/pic.cpp"
    4579           0 :     break;
    4580             : 
    4581           2 :   case 242: /* expr_not_lower_than: expr '+' expr  */
    4582             : #line 1634 "../src/preproc/pic/pic.ypp"
    4583             :                 { (yyval.x) = (yyvsp[-2].x) + (yyvsp[0].x); }
    4584             : #line 4585 "src/preproc/pic/pic.cpp"
    4585           2 :     break;
    4586             : 
    4587           2 :   case 243: /* expr_not_lower_than: expr '-' expr  */
    4588             : #line 1636 "../src/preproc/pic/pic.ypp"
    4589             :                 { (yyval.x) = (yyvsp[-2].x) - (yyvsp[0].x); }
    4590             : #line 4591 "src/preproc/pic/pic.cpp"
    4591           2 :     break;
    4592             : 
    4593          80 :   case 244: /* expr_not_lower_than: expr '*' expr  */
    4594             : #line 1638 "../src/preproc/pic/pic.ypp"
    4595             :                 { (yyval.x) = (yyvsp[-2].x) * (yyvsp[0].x); }
    4596             : #line 4597 "src/preproc/pic/pic.cpp"
    4597          80 :     break;
    4598             : 
    4599         732 :   case 245: /* expr_not_lower_than: expr '/' expr  */
    4600             : #line 1640 "../src/preproc/pic/pic.ypp"
    4601             :                 {
    4602             :                   if ((yyvsp[0].x) == 0.0) {
    4603             :                     lex_error("division by zero");
    4604             :                     YYABORT;
    4605             :                   }
    4606             :                   (yyval.x) = (yyvsp[-2].x)/(yyvsp[0].x);
    4607             :                 }
    4608             : #line 4609 "src/preproc/pic/pic.cpp"
    4609         732 :     break;
    4610             : 
    4611           0 :   case 246: /* expr_not_lower_than: expr '%' expr  */
    4612             : #line 1648 "../src/preproc/pic/pic.ypp"
    4613             :                 {
    4614             :                   if ((yyvsp[0].x) == 0.0) {
    4615             :                     lex_error("modulus by zero");
    4616             :                     YYABORT;
    4617             :                   }
    4618             :                   (yyval.x) = fmod((yyvsp[-2].x), (yyvsp[0].x));
    4619             :                 }
    4620             : #line 4621 "src/preproc/pic/pic.cpp"
    4621           0 :     break;
    4622             : 
    4623           0 :   case 247: /* expr_not_lower_than: expr '^' expr  */
    4624             : #line 1656 "../src/preproc/pic/pic.ypp"
    4625             :                 {
    4626             :                   errno = 0;
    4627             :                   (yyval.x) = pow((yyvsp[-2].x), (yyvsp[0].x));
    4628             :                   if (errno == EDOM) {
    4629             :                     lex_error("arguments to '^' operator out of domain");
    4630             :                     YYABORT;
    4631             :                   }
    4632             :                   if (errno == ERANGE) {
    4633             :                     lex_error("result of '^' operator out of range");
    4634             :                     YYABORT;
    4635             :                   }
    4636             :                 }
    4637             : #line 4638 "src/preproc/pic/pic.cpp"
    4638           0 :     break;
    4639             : 
    4640          76 :   case 248: /* expr_not_lower_than: '-' expr  */
    4641             : #line 1669 "../src/preproc/pic/pic.ypp"
    4642             :                 { (yyval.x) = -(yyvsp[0].x); }
    4643             : #line 4644 "src/preproc/pic/pic.cpp"
    4644          76 :     break;
    4645             : 
    4646          88 :   case 249: /* expr_not_lower_than: '(' any_expr ')'  */
    4647             : #line 1671 "../src/preproc/pic/pic.ypp"
    4648             :                 { (yyval.x) = (yyvsp[-1].x); }
    4649             : #line 4650 "src/preproc/pic/pic.cpp"
    4650          88 :     break;
    4651             : 
    4652         126 :   case 250: /* expr_not_lower_than: SIN '(' any_expr ')'  */
    4653             : #line 1673 "../src/preproc/pic/pic.ypp"
    4654             :                 {
    4655             :                   errno = 0;
    4656             :                   (yyval.x) = sin((yyvsp[-1].x));
    4657             :                   if (errno == ERANGE) {
    4658             :                     lex_error("sin result out of range");
    4659             :                     YYABORT;
    4660             :                   }
    4661             :                 }
    4662             : #line 4663 "src/preproc/pic/pic.cpp"
    4663         126 :     break;
    4664             : 
    4665         126 :   case 251: /* expr_not_lower_than: COS '(' any_expr ')'  */
    4666             : #line 1682 "../src/preproc/pic/pic.ypp"
    4667             :                 {
    4668             :                   errno = 0;
    4669             :                   (yyval.x) = cos((yyvsp[-1].x));
    4670             :                   if (errno == ERANGE) {
    4671             :                     lex_error("cos result out of range");
    4672             :                     YYABORT;
    4673             :                   }
    4674             :                 }
    4675             : #line 4676 "src/preproc/pic/pic.cpp"
    4676         126 :     break;
    4677             : 
    4678           2 :   case 252: /* expr_not_lower_than: ATAN2 '(' any_expr ',' any_expr ')'  */
    4679             : #line 1691 "../src/preproc/pic/pic.ypp"
    4680             :                 {
    4681             :                   errno = 0;
    4682             :                   (yyval.x) = atan2((yyvsp[-3].x), (yyvsp[-1].x));
    4683             :                   if (errno == EDOM) {
    4684             :                     lex_error("atan2 argument out of domain");
    4685             :                     YYABORT;
    4686             :                   }
    4687             :                   if (errno == ERANGE) {
    4688             :                     lex_error("atan2 result out of range");
    4689             :                     YYABORT;
    4690             :                   }
    4691             :                 }
    4692             : #line 4693 "src/preproc/pic/pic.cpp"
    4693           2 :     break;
    4694             : 
    4695           0 :   case 253: /* expr_not_lower_than: LOG '(' any_expr ')'  */
    4696             : #line 1704 "../src/preproc/pic/pic.ypp"
    4697             :                 {
    4698             :                   errno = 0;
    4699             :                   (yyval.x) = log10((yyvsp[-1].x));
    4700             :                   if (errno == ERANGE) {
    4701             :                     lex_error("log result out of range");
    4702             :                     YYABORT;
    4703             :                   }
    4704             :                 }
    4705             : #line 4706 "src/preproc/pic/pic.cpp"
    4706           0 :     break;
    4707             : 
    4708           0 :   case 254: /* expr_not_lower_than: EXP '(' any_expr ')'  */
    4709             : #line 1713 "../src/preproc/pic/pic.ypp"
    4710             :                 {
    4711             :                   errno = 0;
    4712             :                   (yyval.x) = pow(10.0, (yyvsp[-1].x));
    4713             :                   if (errno == ERANGE) {
    4714             :                     lex_error("exp result out of range");
    4715             :                     YYABORT;
    4716             :                   }
    4717             :                 }
    4718             : #line 4719 "src/preproc/pic/pic.cpp"
    4719           0 :     break;
    4720             : 
    4721           0 :   case 255: /* expr_not_lower_than: SQRT '(' any_expr ')'  */
    4722             : #line 1722 "../src/preproc/pic/pic.ypp"
    4723             :                 {
    4724             :                   errno = 0;
    4725             :                   (yyval.x) = sqrt((yyvsp[-1].x));
    4726             :                   if (errno == EDOM) {
    4727             :                     lex_error("sqrt argument out of domain");
    4728             :                     YYABORT;
    4729             :                   }
    4730             :                 }
    4731             : #line 4732 "src/preproc/pic/pic.cpp"
    4732           0 :     break;
    4733             : 
    4734           0 :   case 256: /* expr_not_lower_than: K_MAX '(' any_expr ',' any_expr ')'  */
    4735             : #line 1731 "../src/preproc/pic/pic.ypp"
    4736             :                 { (yyval.x) = (yyvsp[-3].x) > (yyvsp[-1].x) ? (yyvsp[-3].x) : (yyvsp[-1].x); }
    4737             : #line 4738 "src/preproc/pic/pic.cpp"
    4738           0 :     break;
    4739             : 
    4740           0 :   case 257: /* expr_not_lower_than: K_MIN '(' any_expr ',' any_expr ')'  */
    4741             : #line 1733 "../src/preproc/pic/pic.ypp"
    4742             :                 { (yyval.x) = (yyvsp[-3].x) < (yyvsp[-1].x) ? (yyvsp[-3].x) : (yyvsp[-1].x); }
    4743             : #line 4744 "src/preproc/pic/pic.cpp"
    4744           0 :     break;
    4745             : 
    4746           0 :   case 258: /* expr_not_lower_than: INT '(' any_expr ')'  */
    4747             : #line 1735 "../src/preproc/pic/pic.ypp"
    4748             :                 { (yyval.x) = (yyvsp[-1].x) < 0 ? -floor(-(yyvsp[-1].x)) : floor((yyvsp[-1].x)); }
    4749             : #line 4750 "src/preproc/pic/pic.cpp"
    4750           0 :     break;
    4751             : 
    4752           0 :   case 259: /* expr_not_lower_than: RAND '(' any_expr ')'  */
    4753             : #line 1737 "../src/preproc/pic/pic.ypp"
    4754             :                 {
    4755             :                   lex_error("use of 'rand' with an argument is"
    4756             :                             " deprecated; shift and scale 'rand()' with"
    4757             :                             " arithmetic instead");
    4758             :                   (yyval.x) = 1.0 + floor(((rand()&0x7fff)/double(0x7fff))*(yyvsp[-1].x));
    4759             :                 }
    4760             : #line 4761 "src/preproc/pic/pic.cpp"
    4761           0 :     break;
    4762             : 
    4763           0 :   case 260: /* expr_not_lower_than: RAND '(' ')'  */
    4764             : #line 1744 "../src/preproc/pic/pic.ypp"
    4765             :                 {
    4766             :                   /* return a random number in the range [0,1) */
    4767             :                   /* portable, but not very random */
    4768             :                   (yyval.x) = (rand() & 0x7fff) / double(0x8000);
    4769             :                 }
    4770             : #line 4771 "src/preproc/pic/pic.cpp"
    4771           0 :     break;
    4772             : 
    4773           0 :   case 261: /* expr_not_lower_than: SRAND '(' any_expr ')'  */
    4774             : #line 1750 "../src/preproc/pic/pic.ypp"
    4775             :                 {
    4776             :                   (yyval.x) = 0;
    4777             :                   srand((unsigned int)(yyvsp[-1].x));
    4778             :                 }
    4779             : #line 4780 "src/preproc/pic/pic.cpp"
    4780           0 :     break;
    4781             : 
    4782           0 :   case 262: /* expr_not_lower_than: expr LESSEQUAL expr  */
    4783             : #line 1755 "../src/preproc/pic/pic.ypp"
    4784             :                 { (yyval.x) = ((yyvsp[-2].x) <= (yyvsp[0].x)); }
    4785             : #line 4786 "src/preproc/pic/pic.cpp"
    4786           0 :     break;
    4787             : 
    4788           0 :   case 263: /* expr_not_lower_than: expr '>' expr  */
    4789             : #line 1757 "../src/preproc/pic/pic.ypp"
    4790             :                 { (yyval.x) = ((yyvsp[-2].x) > (yyvsp[0].x)); }
    4791             : #line 4792 "src/preproc/pic/pic.cpp"
    4792           0 :     break;
    4793             : 
    4794           0 :   case 264: /* expr_not_lower_than: expr GREATEREQUAL expr  */
    4795             : #line 1759 "../src/preproc/pic/pic.ypp"
    4796             :                 { (yyval.x) = ((yyvsp[-2].x) >= (yyvsp[0].x)); }
    4797             : #line 4798 "src/preproc/pic/pic.cpp"
    4798           0 :     break;
    4799             : 
    4800           0 :   case 265: /* expr_not_lower_than: expr EQUALEQUAL expr  */
    4801             : #line 1761 "../src/preproc/pic/pic.ypp"
    4802             :                 { (yyval.x) = ((yyvsp[-2].x) == (yyvsp[0].x)); }
    4803             : #line 4804 "src/preproc/pic/pic.cpp"
    4804           0 :     break;
    4805             : 
    4806           0 :   case 266: /* expr_not_lower_than: expr NOTEQUAL expr  */
    4807             : #line 1763 "../src/preproc/pic/pic.ypp"
    4808             :                 { (yyval.x) = ((yyvsp[-2].x) != (yyvsp[0].x)); }
    4809             : #line 4810 "src/preproc/pic/pic.cpp"
    4810           0 :     break;
    4811             : 
    4812           0 :   case 267: /* expr_not_lower_than: expr ANDAND expr  */
    4813             : #line 1765 "../src/preproc/pic/pic.ypp"
    4814             :                 { (yyval.x) = ((yyvsp[-2].x) != 0.0 && (yyvsp[0].x) != 0.0); }
    4815             : #line 4816 "src/preproc/pic/pic.cpp"
    4816           0 :     break;
    4817             : 
    4818           0 :   case 268: /* expr_not_lower_than: expr OROR expr  */
    4819             : #line 1767 "../src/preproc/pic/pic.ypp"
    4820             :                 { (yyval.x) = ((yyvsp[-2].x) != 0.0 || (yyvsp[0].x) != 0.0); }
    4821             : #line 4822 "src/preproc/pic/pic.cpp"
    4822           0 :     break;
    4823             : 
    4824          36 :   case 269: /* expr_not_lower_than: '!' expr  */
    4825             : #line 1769 "../src/preproc/pic/pic.ypp"
    4826             :                 { (yyval.x) = ((yyvsp[0].x) == 0.0); }
    4827             : #line 4828 "src/preproc/pic/pic.cpp"
    4828          36 :     break;
    4829             : 
    4830             : 
    4831             : #line 4832 "src/preproc/pic/pic.cpp"
    4832             : 
    4833        4859 :       default: break;
    4834             :     }
    4835             :   /* User semantic actions sometimes alter yychar, and that requires
    4836             :      that yytoken be updated with the new translation.  We take the
    4837             :      approach of translating immediately before every use of yytoken.
    4838             :      One alternative is translating here after every semantic action,
    4839             :      but that translation would be missed if the semantic action invokes
    4840             :      YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
    4841             :      if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
    4842             :      incorrect destructor might then be invoked immediately.  In the
    4843             :      case of YYERROR or YYBACKUP, subsequent parser actions might lead
    4844             :      to an incorrect destructor call or verbose syntax error message
    4845             :      before the lookahead is translated.  */
    4846             :   YY_SYMBOL_PRINT ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc);
    4847             : 
    4848       30683 :   YYPOPSTACK (yylen);
    4849       30683 :   yylen = 0;
    4850             : 
    4851       30683 :   *++yyvsp = yyval;
    4852             : 
    4853             :   /* Now 'shift' the result of the reduction.  Determine what state
    4854             :      that goes to, based on the state we popped back to and the rule
    4855             :      number reduced by.  */
    4856             :   {
    4857       30683 :     const int yylhs = yyr1[yyn] - YYNTOKENS;
    4858       30683 :     const int yyi = yypgoto[yylhs] + *yyssp;
    4859       24373 :     yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp
    4860       46219 :                ? yytable[yyi]
    4861       15147 :                : yydefgoto[yylhs]);
    4862             :   }
    4863             : 
    4864       30683 :   goto yynewstate;
    4865             : 
    4866             : 
    4867             : /*--------------------------------------.
    4868             : | yyerrlab -- here on detecting error.  |
    4869             : `--------------------------------------*/
    4870           0 : yyerrlab:
    4871             :   /* Make sure we have latest lookahead translation.  See comments at
    4872             :      user semantic actions for why this is necessary.  */
    4873           0 :   yytoken = yychar == YYEMPTY ? YYSYMBOL_YYEMPTY : YYTRANSLATE (yychar);
    4874             :   /* If not already recovering from an error, report this error.  */
    4875           0 :   if (!yyerrstatus)
    4876             :     {
    4877           0 :       ++yynerrs;
    4878           0 :       yyerror (YY_("syntax error"));
    4879             :     }
    4880             : 
    4881           0 :   if (yyerrstatus == 3)
    4882             :     {
    4883             :       /* If just tried and failed to reuse lookahead token after an
    4884             :          error, discard it.  */
    4885             : 
    4886           0 :       if (yychar <= YYEOF)
    4887             :         {
    4888             :           /* Return failure if at end of input.  */
    4889           0 :           if (yychar == YYEOF)
    4890           0 :             YYABORT;
    4891             :         }
    4892             :       else
    4893             :         {
    4894           0 :           yydestruct ("Error: discarding",
    4895             :                       yytoken, &yylval);
    4896           0 :           yychar = YYEMPTY;
    4897             :         }
    4898             :     }
    4899             : 
    4900             :   /* Else will try to reuse lookahead token after shifting the error
    4901             :      token.  */
    4902           0 :   goto yyerrlab1;
    4903             : 
    4904             : 
    4905             : /*---------------------------------------------------.
    4906             : | yyerrorlab -- error raised explicitly by YYERROR.  |
    4907             : `---------------------------------------------------*/
    4908             : yyerrorlab:
    4909             :   /* Pacify compilers when the user code never invokes YYERROR and the
    4910             :      label yyerrorlab therefore never appears in user code.  */
    4911             :   if (0)
    4912             :     YYERROR;
    4913             : 
    4914             :   /* Do not reclaim the symbols of the rule whose action triggered
    4915             :      this YYERROR.  */
    4916             :   YYPOPSTACK (yylen);
    4917             :   yylen = 0;
    4918             :   YY_STACK_PRINT (yyss, yyssp);
    4919             :   yystate = *yyssp;
    4920             :   goto yyerrlab1;
    4921             : 
    4922             : 
    4923             : /*-------------------------------------------------------------.
    4924             : | yyerrlab1 -- common code for both syntax error and YYERROR.  |
    4925             : `-------------------------------------------------------------*/
    4926           0 : yyerrlab1:
    4927           0 :   yyerrstatus = 3;      /* Each real token shifted decrements this.  */
    4928             : 
    4929             :   /* Pop stack until we find a state that shifts the error token.  */
    4930             :   for (;;)
    4931             :     {
    4932           0 :       yyn = yypact[yystate];
    4933           0 :       if (!yypact_value_is_default (yyn))
    4934             :         {
    4935           0 :           yyn += YYSYMBOL_YYerror;
    4936           0 :           if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror)
    4937             :             {
    4938           0 :               yyn = yytable[yyn];
    4939           0 :               if (0 < yyn)
    4940           0 :                 break;
    4941             :             }
    4942             :         }
    4943             : 
    4944             :       /* Pop the current state because it cannot handle the error token.  */
    4945           0 :       if (yyssp == yyss)
    4946           0 :         YYABORT;
    4947             : 
    4948             : 
    4949           0 :       yydestruct ("Error: popping",
    4950           0 :                   YY_ACCESSING_SYMBOL (yystate), yyvsp);
    4951           0 :       YYPOPSTACK (1);
    4952           0 :       yystate = *yyssp;
    4953             :       YY_STACK_PRINT (yyss, yyssp);
    4954             :     }
    4955             : 
    4956             :   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
    4957           0 :   *++yyvsp = yylval;
    4958             :   YY_IGNORE_MAYBE_UNINITIALIZED_END
    4959             : 
    4960             : 
    4961             :   /* Shift the error token.  */
    4962             :   YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp);
    4963             : 
    4964           0 :   yystate = yyn;
    4965           0 :   goto yynewstate;
    4966             : 
    4967             : 
    4968             : /*-------------------------------------.
    4969             : | yyacceptlab -- YYACCEPT comes here.  |
    4970             : `-------------------------------------*/
    4971         114 : yyacceptlab:
    4972         114 :   yyresult = 0;
    4973         114 :   goto yyreturn;
    4974             : 
    4975             : 
    4976             : /*-----------------------------------.
    4977             : | yyabortlab -- YYABORT comes here.  |
    4978             : `-----------------------------------*/
    4979           0 : yyabortlab:
    4980           0 :   yyresult = 1;
    4981           0 :   goto yyreturn;
    4982             : 
    4983             : 
    4984             : #if !defined yyoverflow
    4985             : /*-------------------------------------------------.
    4986             : | yyexhaustedlab -- memory exhaustion comes here.  |
    4987             : `-------------------------------------------------*/
    4988           0 : yyexhaustedlab:
    4989           0 :   yyerror (YY_("memory exhausted"));
    4990           0 :   yyresult = 2;
    4991           0 :   goto yyreturn;
    4992             : #endif
    4993             : 
    4994             : 
    4995             : /*-------------------------------------------------------.
    4996             : | yyreturn -- parsing is finished, clean up and return.  |
    4997             : `-------------------------------------------------------*/
    4998         114 : yyreturn:
    4999         114 :   if (yychar != YYEMPTY)
    5000             :     {
    5001             :       /* Make sure we have latest lookahead translation.  See comments at
    5002             :          user semantic actions for why this is necessary.  */
    5003           0 :       yytoken = YYTRANSLATE (yychar);
    5004           0 :       yydestruct ("Cleanup: discarding lookahead",
    5005             :                   yytoken, &yylval);
    5006             :     }
    5007             :   /* Do not reclaim the symbols of the rule whose action triggered
    5008             :      this YYABORT or YYACCEPT.  */
    5009         114 :   YYPOPSTACK (yylen);
    5010             :   YY_STACK_PRINT (yyss, yyssp);
    5011         342 :   while (yyssp != yyss)
    5012             :     {
    5013         228 :       yydestruct ("Cleanup: popping",
    5014         228 :                   YY_ACCESSING_SYMBOL (+*yyssp), yyvsp);
    5015         228 :       YYPOPSTACK (1);
    5016             :     }
    5017             : #ifndef yyoverflow
    5018         114 :   if (yyss != yyssa)
    5019           0 :     YYSTACK_FREE (yyss);
    5020             : #endif
    5021             : 
    5022         114 :   return yyresult;
    5023             : }
    5024             : 
    5025             : #line 1773 "../src/preproc/pic/pic.ypp"
    5026             : 
    5027             : 
    5028             : /* bison defines const to be empty unless __STDC__ is defined, which it
    5029             : isn't under cfront */
    5030             : 
    5031             : #ifdef const
    5032             : #undef const
    5033             : #endif
    5034             : 
    5035             : static struct pic_defaults_table {
    5036             :   const char *name;
    5037             :   double val;
    5038             :   int scaled;           // non-zero if val should be multiplied by scale
    5039             : } defaults_table[] = {
    5040             :   { "arcrad", .25, 1 },
    5041             :   { "arrowht", .1, 1 },
    5042             :   { "arrowwid", .05, 1 },
    5043             :   { "circlerad", .25, 1 },
    5044             :   { "boxht", .5, 1 },
    5045             :   { "boxwid", .75, 1 },
    5046             :   { "boxrad", 0.0, 1 },
    5047             :   { "dashwid", .05, 1 },
    5048             :   { "ellipseht", .5, 1 },
    5049             :   { "ellipsewid", .75, 1 },
    5050             :   { "moveht", .5, 1 },
    5051             :   { "movewid", .5, 1 },
    5052             :   { "lineht", .5, 1 },
    5053             :   { "linewid", .5, 1 },
    5054             :   { "textht", 0.0, 1 },
    5055             :   { "textwid", 0.0, 1 },
    5056             :   { "scale", 1.0, 0 },
    5057             :   { "linethick", -1.0, 0 },           // in points
    5058             :   { "fillval", .5, 0 },
    5059             :   { "arrowhead", 1.0, 0 },
    5060             :   { "maxpswid", 8.5, 0 },
    5061             :   { "maxpsht", 11.0, 0 },
    5062             : };
    5063             : 
    5064             : place *lookup_label(const char *label)
    5065             : {
    5066             :   saved_state *state = current_saved_state;
    5067             :   PTABLE(place) *tbl = current_table;
    5068             :   for (;;) {
    5069             :     place *pl = tbl->lookup(label);
    5070             :     if (pl)
    5071             :       return pl;
    5072             :     if (!state)
    5073             :       return 0 /* nullptr */;
    5074             :     tbl = state->tbl;
    5075             :     state = state->prev;
    5076             :   }
    5077             : }
    5078             : 
    5079             : void define_label(const char *label, const place *pl)
    5080             : {
    5081             :   place *p = new place[1];
    5082             :   *p = *pl;
    5083             :   current_table->define(label, p);
    5084             : }
    5085             : 
    5086             : int lookup_variable(const char *name, double *val)
    5087             : {
    5088             :   place *pl = lookup_label(name);
    5089             :   if (pl) {
    5090             :     *val = pl->x;
    5091             :     return 1;
    5092             :   }
    5093             :   return 0;
    5094             : }
    5095             : 
    5096             : void define_variable(const char *name, double val)
    5097             : {
    5098             :   place *p = new place[1];
    5099             :   p->obj = 0;
    5100             :   p->x = val;
    5101             :   p->y = 0.0;
    5102             :   current_table->define(name, p);
    5103             :   if (strcmp(name, "scale") == 0) {
    5104             :     // When the scale changes, reset all scaled predefined variables to
    5105             :     // their default values.
    5106             :     for (size_t i = 0; i < countof(defaults_table); i++)
    5107             :       if (defaults_table[i].scaled)
    5108             :         define_variable(defaults_table[i].name,
    5109             :                         (val * defaults_table[i].val));
    5110             :   }
    5111             : }
    5112             : 
    5113             : // called once only (not once per parse)
    5114             : 
    5115             : void parse_init()
    5116             : {
    5117             :   current_direction = RIGHT_DIRECTION;
    5118             :   current_position.x = 0.0;
    5119             :   current_position.y = 0.0;
    5120             :   // This resets everything to its default value.
    5121             :   reset_all();
    5122             : }
    5123             : 
    5124             : void reset(const char *nm)
    5125             : {
    5126             :   for (size_t i = 0; i < countof(defaults_table); i++)
    5127             :     if (strcmp(nm, defaults_table[i].name) == 0) {
    5128             :       double val = defaults_table[i].val;
    5129             :       if (defaults_table[i].scaled) {
    5130             :         double scale;
    5131             :         lookup_variable("scale", &scale);
    5132             :         val *= scale;
    5133             :       }
    5134             :       define_variable(defaults_table[i].name, val);
    5135             :       return;
    5136             :     }
    5137             :   lex_error("'%1' is not a predefined variable", nm);
    5138             : }
    5139             : 
    5140             : void reset_all()
    5141             : {
    5142             :   // We only have to explicitly reset the predefined variables that
    5143             :   // aren't scaled because 'scale' is not scaled, and changing the
    5144             :   // value of 'scale' will reset all the predefined variables that
    5145             :   // are scaled.
    5146             :   for (size_t i = 0; i < countof(defaults_table); i++)
    5147             :     if (!defaults_table[i].scaled)
    5148             :       define_variable(defaults_table[i].name, defaults_table[i].val);
    5149             : }
    5150             : 
    5151             : // called after each parse
    5152             : 
    5153             : void parse_cleanup()
    5154             : {
    5155             :   while (current_saved_state != 0) {
    5156             :     delete current_table;
    5157             :     current_table = current_saved_state->tbl;
    5158             :     saved_state *tem = current_saved_state;
    5159             :     current_saved_state = current_saved_state->prev;
    5160             :     delete tem;
    5161             :   }
    5162             :   assert(current_table == &top_table);
    5163             :   PTABLE_ITERATOR(place) iter(current_table);
    5164             :   const char *key;
    5165             :   place *pl;
    5166             :   while (iter.next(&key, &pl))
    5167             :     if (pl->obj != 0) {
    5168             :       position pos = pl->obj->origin();
    5169             :       pl->obj = 0;
    5170             :       pl->x = pos.x;
    5171             :       pl->y = pos.y;
    5172             :     }
    5173             :   while (olist.head != 0) {
    5174             :     object *tem = olist.head;
    5175             :     olist.head = olist.head->next;
    5176             :     delete tem;
    5177             :   }
    5178             :   olist.tail = 0;
    5179             :   current_direction = RIGHT_DIRECTION;
    5180             :   current_position.x = 0.0;
    5181             :   current_position.y = 0.0;
    5182             : }
    5183             : 
    5184             : const char *ordinal_postfix(int n)
    5185             : {
    5186             :   if (n < 10 || n > 20)
    5187             :     switch (n % 10) {
    5188             :     case 1:
    5189             :       return "st";
    5190             :     case 2:
    5191             :       return "nd";
    5192             :     case 3:
    5193             :       return "rd";
    5194             :     }
    5195             :   return "th";
    5196             : }
    5197             : 
    5198             : const char *object_type_name(object_type type)
    5199             : {
    5200             :   switch (type) {
    5201             :   case BOX_OBJECT:
    5202             :     return "box";
    5203             :   case CIRCLE_OBJECT:
    5204             :     return "circle";
    5205             :   case ELLIPSE_OBJECT:
    5206             :     return "ellipse";
    5207             :   case ARC_OBJECT:
    5208             :     return "arc";
    5209             :   case SPLINE_OBJECT:
    5210             :     return "spline";
    5211             :   case LINE_OBJECT:
    5212             :     return "line";
    5213             :   case POLYGON_OBJECT:
    5214             :     return "polygon";
    5215             :   case ARROW_OBJECT:
    5216             :     return "arrow";
    5217             :   case MOVE_OBJECT:
    5218             :     return "move";
    5219             :   case TEXT_OBJECT:
    5220             :     return "\"\"";
    5221             :   case BLOCK_OBJECT:
    5222             :     return "[]";
    5223             :   case OTHER_OBJECT:
    5224             :   case MARK_OBJECT:
    5225             :   default:
    5226             :     break;
    5227             :   }
    5228             :   return "object";
    5229             : }
    5230             : 
    5231             : static char sprintf_buf[1024];
    5232             : 
    5233             : char *format_number(const char *fmt, double n)
    5234             : {
    5235             :   if (0 /* nullptr */ == fmt)
    5236             :     fmt = "%g";
    5237             :   return do_sprintf(fmt, &n, 1);
    5238             : }
    5239             : 
    5240             : char *do_sprintf(const char *fmt, const double *v, int nv)
    5241             : {
    5242             :   // Define valid conversion specifiers and modifiers.
    5243             :   static const char spcs[] = "eEfgG%";
    5244             :   static const char mods[] = "#-+ 0123456789.";
    5245             :   string result;
    5246             :   int i = 0;
    5247             :   string one_format;
    5248             :   while (*fmt) {
    5249             :     if ('%' == *fmt) {
    5250             :       one_format += *fmt++;
    5251             :       for (; *fmt != '\0' && strchr(mods, *fmt) != 0; fmt++)
    5252             :         one_format += *fmt;
    5253             :       if ('\0' == *fmt || strchr(spcs, *fmt) == 0) {
    5254             :         lex_error("invalid sprintf conversion specifier '%1'", *fmt);
    5255             :         result += one_format;
    5256             :         result += fmt;
    5257             :         break;
    5258             :       }
    5259             :       if ('%' == *fmt) {
    5260             :         fmt++;
    5261             :         snprintf(sprintf_buf, sizeof sprintf_buf, "%%");
    5262             :       }
    5263             :       else {
    5264             :         if (i >= nv) {
    5265             :           lex_error("too few arguments to sprintf");
    5266             :           result += one_format;
    5267             :           result += fmt;
    5268             :           break;
    5269             :         }
    5270             :         one_format += *fmt++;
    5271             :         one_format += '\0';
    5272             : // We validated the format string above.  Most conversion specifiers are
    5273             : // rejected, including `n`.
    5274             : #pragma GCC diagnostic push
    5275             : #pragma GCC diagnostic ignored "-Wformat-nonliteral"
    5276             :         snprintf(sprintf_buf, sizeof sprintf_buf,
    5277             :                  one_format.contents(), v[i++]);
    5278             : #pragma GCC diagnostic pop
    5279             :       }
    5280             :       one_format.clear();
    5281             :       result += sprintf_buf;
    5282             :     }
    5283             :     else
    5284             :       result += *fmt++;
    5285             :   }
    5286             :   result += '\0';
    5287             :   return strsave(result.contents());
    5288             : }
    5289             : 
    5290             : // Local Variables:
    5291             : // fill-column: 72
    5292             : // mode: C++
    5293             : // End:
    5294             : // vim: set cindent noexpandtab shiftwidth=2 textwidth=72:

Generated by: LCOV version 1.14