Fossil SCM

Update pikchr.c to the lastest version will all of the latest bug fixes.

drh 2020-09-13 17:51 trunk
Commit d9f61a9ab2726ff20b75ef281e3a5bb758f7c91c250e34ac63293268b7d08552
1 file changed +1571 -1483
+1571 -1483
--- src/pikchr.c
+++ src/pikchr.c
@@ -423,13 +423,15 @@
423423
static void pik_same(Pik *p, PElem*, PToken*);
424424
static PPoint pik_nth_vertex(Pik *p, PToken *pNth, PToken *pErr, PElem *pElem);
425425
static PToken pik_next_semantic_token(Pik *p, PToken *pThis);
426426
static void pik_compute_layout_settings(Pik*);
427427
static void pik_behind(Pik*,PElem*);
428
+static PElem *pik_assert(Pik*,PNum,PToken*,PNum);
429
+static PElem *pik_place_assert(Pik*,PPoint*,PToken*,PPoint*);
428430
429431
430
-#line 456 "pikchr.c"
432
+#line 458 "pikchr.c"
431433
/**************** End of %include directives **********************************/
432434
/* These constants specify the various numeric values for terminal symbols.
433435
***************** Begin token definitions *************************************/
434436
#ifndef T_ID
435437
#define T_ID 1
@@ -443,86 +445,89 @@
443445
#define T_UMINUS 9
444446
#define T_EOL 10
445447
#define T_ASSIGN 11
446448
#define T_PLACENAME 12
447449
#define T_COLON 13
448
-#define T_FILL 14
449
-#define T_COLOR 15
450
-#define T_THICKNESS 16
451
-#define T_PRINT 17
452
-#define T_STRING 18
453
-#define T_COMMA 19
454
-#define T_CLASSNAME 20
455
-#define T_LB 21
456
-#define T_RB 22
457
-#define T_UP 23
458
-#define T_DOWN 24
459
-#define T_LEFT 25
460
-#define T_RIGHT 26
461
-#define T_CLOSE 27
462
-#define T_CHOP 28
463
-#define T_FROM 29
464
-#define T_TO 30
465
-#define T_THEN 31
466
-#define T_HEADING 32
467
-#define T_GO 33
468
-#define T_AT 34
469
-#define T_WITH 35
470
-#define T_SAME 36
471
-#define T_AS 37
472
-#define T_FIT 38
473
-#define T_BEHIND 39
474
-#define T_UNTIL 40
475
-#define T_EVEN 41
476
-#define T_DOT_E 42
477
-#define T_HEIGHT 43
478
-#define T_WIDTH 44
479
-#define T_RADIUS 45
480
-#define T_DIAMETER 46
481
-#define T_DOTTED 47
482
-#define T_DASHED 48
483
-#define T_CW 49
484
-#define T_CCW 50
485
-#define T_LARROW 51
486
-#define T_RARROW 52
487
-#define T_LRARROW 53
488
-#define T_INVIS 54
489
-#define T_THICK 55
490
-#define T_THIN 56
491
-#define T_CENTER 57
492
-#define T_LJUST 58
493
-#define T_RJUST 59
494
-#define T_ABOVE 60
495
-#define T_BELOW 61
496
-#define T_ITALIC 62
497
-#define T_BOLD 63
498
-#define T_ALIGNED 64
499
-#define T_BIG 65
500
-#define T_SMALL 66
501
-#define T_LP 67
502
-#define T_RP 68
503
-#define T_AND 69
504
-#define T_LT 70
505
-#define T_GT 71
506
-#define T_WAY 72
507
-#define T_BETWEEN 73
508
-#define T_THE 74
509
-#define T_DOT_L 75
510
-#define T_START 76
511
-#define T_END 77
512
-#define T_NTH 78
513
-#define T_VERTEX 79
514
-#define T_IN 80
515
-#define T_DOT_U 81
516
-#define T_LAST 82
517
-#define T_NUMBER 83
518
-#define T_FUNC1 84
519
-#define T_FUNC2 85
520
-#define T_X 86
521
-#define T_Y 87
522
-#define T_TOP 88
523
-#define T_BOTTOM 89
450
+#define T_ASSERT 14
451
+#define T_LP 15
452
+#define T_EQ 16
453
+#define T_RP 17
454
+#define T_FILL 18
455
+#define T_COLOR 19
456
+#define T_THICKNESS 20
457
+#define T_PRINT 21
458
+#define T_STRING 22
459
+#define T_COMMA 23
460
+#define T_CLASSNAME 24
461
+#define T_LB 25
462
+#define T_RB 26
463
+#define T_UP 27
464
+#define T_DOWN 28
465
+#define T_LEFT 29
466
+#define T_RIGHT 30
467
+#define T_CLOSE 31
468
+#define T_CHOP 32
469
+#define T_FROM 33
470
+#define T_TO 34
471
+#define T_THEN 35
472
+#define T_HEADING 36
473
+#define T_GO 37
474
+#define T_AT 38
475
+#define T_WITH 39
476
+#define T_SAME 40
477
+#define T_AS 41
478
+#define T_FIT 42
479
+#define T_BEHIND 43
480
+#define T_UNTIL 44
481
+#define T_EVEN 45
482
+#define T_DOT_E 46
483
+#define T_HEIGHT 47
484
+#define T_WIDTH 48
485
+#define T_RADIUS 49
486
+#define T_DIAMETER 50
487
+#define T_DOTTED 51
488
+#define T_DASHED 52
489
+#define T_CW 53
490
+#define T_CCW 54
491
+#define T_LARROW 55
492
+#define T_RARROW 56
493
+#define T_LRARROW 57
494
+#define T_INVIS 58
495
+#define T_THICK 59
496
+#define T_THIN 60
497
+#define T_CENTER 61
498
+#define T_LJUST 62
499
+#define T_RJUST 63
500
+#define T_ABOVE 64
501
+#define T_BELOW 65
502
+#define T_ITALIC 66
503
+#define T_BOLD 67
504
+#define T_ALIGNED 68
505
+#define T_BIG 69
506
+#define T_SMALL 70
507
+#define T_AND 71
508
+#define T_LT 72
509
+#define T_GT 73
510
+#define T_WAY 74
511
+#define T_BETWEEN 75
512
+#define T_THE 76
513
+#define T_NTH 77
514
+#define T_VERTEX 78
515
+#define T_TOP 79
516
+#define T_BOTTOM 80
517
+#define T_START 81
518
+#define T_END 82
519
+#define T_IN 83
520
+#define T_DOT_U 84
521
+#define T_LAST 85
522
+#define T_NUMBER 86
523
+#define T_FUNC1 87
524
+#define T_FUNC2 88
525
+#define T_DOT_XY 89
526
+#define T_X 90
527
+#define T_Y 91
528
+#define T_DOT_L 92
524529
#endif
525530
/**************** End token definitions ***************************************/
526531
527532
/* The next sections is a series of control #defines.
528533
** various aspects of the generated parser.
@@ -578,21 +583,21 @@
578583
#ifndef INTERFACE
579584
# define INTERFACE 1
580585
#endif
581586
/************* Begin control #defines *****************************************/
582587
#define YYCODETYPE unsigned char
583
-#define YYNOCODE 123
588
+#define YYNOCODE 127
584589
#define YYACTIONTYPE unsigned short int
585590
#define pik_parserTOKENTYPE PToken
586591
typedef union {
587592
int yyinit;
588593
pik_parserTOKENTYPE yy0;
589
- int yy34;
590
- PEList* yy80;
591
- PNum yy147;
592
- PElem* yy174;
593
- PPoint yy211;
594
+ PEList* yy42;
595
+ PPoint yy85;
596
+ PElem* yy118;
597
+ int yy156;
598
+ PNum yy215;
594599
} YYMINORTYPE;
595600
#ifndef YYSTACKDEPTH
596601
#define YYSTACKDEPTH 100
597602
#endif
598603
#define pik_parserARG_SDECL
@@ -604,22 +609,22 @@
604609
#define pik_parserCTX_PDECL ,Pik *p
605610
#define pik_parserCTX_PARAM ,p
606611
#define pik_parserCTX_FETCH Pik *p=yypParser->p;
607612
#define pik_parserCTX_STORE yypParser->p=p;
608613
#define YYFALLBACK 1
609
-#define YYNSTATE 169
610
-#define YYNRULE 158
611
-#define YYNRULE_WITH_ACTION 122
612
-#define YYNTOKEN 90
613
-#define YY_MAX_SHIFT 168
614
-#define YY_MIN_SHIFTREDUCE 290
615
-#define YY_MAX_SHIFTREDUCE 447
616
-#define YY_ERROR_ACTION 448
617
-#define YY_ACCEPT_ACTION 449
618
-#define YY_NO_ACTION 450
619
-#define YY_MIN_REDUCE 451
620
-#define YY_MAX_REDUCE 608
614
+#define YYNSTATE 156
615
+#define YYNRULE 151
616
+#define YYNRULE_WITH_ACTION 113
617
+#define YYNTOKEN 93
618
+#define YY_MAX_SHIFT 155
619
+#define YY_MIN_SHIFTREDUCE 271
620
+#define YY_MAX_SHIFTREDUCE 421
621
+#define YY_ERROR_ACTION 422
622
+#define YY_ACCEPT_ACTION 423
623
+#define YY_NO_ACTION 424
624
+#define YY_MIN_REDUCE 425
625
+#define YY_MAX_REDUCE 575
621626
/************* End control #defines *******************************************/
622627
#define YY_NLOOKAHEAD ((int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0])))
623628
624629
/* Define the yytestcase() macro to be a no-op if is not already defined
625630
** otherwise.
@@ -682,270 +687,312 @@
682687
** yy_reduce_ofst[] For each state, the offset into yy_action for
683688
** shifting non-terminals after a reduce.
684689
** yy_default[] Default action for each state.
685690
**
686691
*********** Begin parsing tables **********************************************/
687
-#define YY_ACTTAB_COUNT (957)
692
+#define YY_ACTTAB_COUNT (1178)
688693
static const YYACTIONTYPE yy_action[] = {
689
- /* 0 */ 585, 502, 167, 124, 21, 125, 452, 459, 28, 451,
690
- /* 10 */ 585, 70, 455, 128, 435, 436, 344, 49, 81, 27,
691
- /* 20 */ 48, 30, 585, 168, 146, 449, 23, 323, 324, 10,
692
- /* 30 */ 9, 34, 158, 33, 8, 71, 126, 29, 340, 59,
693
- /* 40 */ 587, 77, 587, 344, 344, 344, 344, 433, 434, 345,
694
- /* 50 */ 346, 347, 348, 349, 350, 351, 352, 397, 443, 562,
695
- /* 60 */ 53, 54, 563, 564, 561, 457, 28, 73, 380, 143,
696
- /* 70 */ 435, 436, 344, 27, 458, 116, 115, 167, 124, 306,
697
- /* 80 */ 93, 446, 447, 397, 26, 310, 53, 54, 70, 118,
698
- /* 90 */ 167, 124, 127, 380, 380, 22, 435, 436, 344, 344,
699
- /* 100 */ 344, 344, 344, 433, 434, 72, 153, 143, 24, 155,
700
- /* 110 */ 151, 157, 114, 116, 115, 167, 124, 589, 58, 57,
701
- /* 120 */ 56, 55, 82, 1, 83, 344, 344, 344, 344, 433,
702
- /* 130 */ 434, 60, 145, 144, 104, 12, 6, 110, 122, 396,
703
- /* 140 */ 160, 159, 442, 442, 444, 445, 118, 167, 124, 5,
704
- /* 150 */ 465, 397, 443, 541, 53, 54, 580, 46, 43, 112,
705
- /* 160 */ 109, 7, 380, 122, 122, 396, 160, 159, 442, 442,
706
- /* 170 */ 397, 443, 432, 53, 54, 446, 447, 431, 499, 167,
707
- /* 180 */ 124, 380, 359, 360, 361, 130, 541, 80, 11, 308,
708
- /* 190 */ 79, 412, 541, 440, 446, 447, 134, 420, 421, 422,
709
- /* 200 */ 423, 438, 149, 135, 413, 414, 415, 417, 80, 75,
710
- /* 210 */ 308, 79, 14, 420, 421, 422, 423, 1, 382, 164,
711
- /* 220 */ 138, 136, 58, 57, 56, 55, 145, 144, 104, 141,
712
- /* 230 */ 167, 124, 122, 396, 160, 159, 1, 47, 444, 445,
713
- /* 240 */ 404, 405, 32, 140, 139, 145, 144, 104, 76, 15,
714
- /* 250 */ 40, 122, 396, 160, 159, 110, 397, 444, 445, 53,
715
- /* 260 */ 54, 16, 56, 55, 118, 167, 124, 111, 479, 301,
716
- /* 270 */ 302, 303, 121, 305, 61, 435, 436, 344, 18, 17,
717
- /* 280 */ 123, 35, 113, 452, 459, 28, 395, 62, 20, 455,
718
- /* 290 */ 137, 439, 63, 138, 136, 58, 57, 56, 55, 64,
719
- /* 300 */ 168, 410, 411, 23, 344, 344, 344, 344, 433, 434,
720
- /* 310 */ 47, 117, 435, 436, 344, 397, 140, 139, 53, 54,
721
- /* 320 */ 363, 110, 5, 40, 397, 19, 380, 53, 54, 2,
722
- /* 330 */ 118, 167, 124, 109, 456, 380, 409, 122, 396, 160,
723
- /* 340 */ 159, 344, 344, 344, 344, 433, 434, 442, 442, 384,
724
- /* 350 */ 163, 18, 17, 65, 131, 129, 397, 335, 408, 53,
725
- /* 360 */ 54, 20, 66, 137, 439, 383, 165, 380, 95, 397,
726
- /* 370 */ 331, 407, 53, 54, 372, 373, 67, 118, 167, 124,
727
- /* 380 */ 380, 5, 68, 406, 442, 442, 51, 36, 52, 468,
728
- /* 390 */ 5, 25, 109, 84, 443, 381, 122, 396, 160, 159,
729
- /* 400 */ 38, 109, 118, 167, 124, 122, 396, 160, 159, 397,
730
- /* 410 */ 382, 164, 53, 54, 85, 69, 388, 446, 447, 73,
731
- /* 420 */ 111, 143, 5, 118, 167, 124, 504, 116, 115, 167,
732
- /* 430 */ 124, 386, 387, 109, 73, 5, 143, 122, 396, 160,
733
- /* 440 */ 159, 503, 116, 115, 167, 124, 109, 382, 164, 450,
734
- /* 450 */ 122, 396, 160, 159, 397, 166, 31, 53, 54, 537,
735
- /* 460 */ 167, 124, 453, 459, 28, 380, 450, 397, 455, 142,
736
- /* 470 */ 53, 54, 123, 450, 100, 5, 450, 450, 380, 168,
737
- /* 480 */ 444, 445, 23, 118, 167, 124, 109, 450, 450, 450,
738
- /* 490 */ 122, 396, 160, 159, 450, 354, 354, 354, 354, 354,
739
- /* 500 */ 354, 354, 354, 354, 354, 450, 162, 86, 153, 123,
740
- /* 510 */ 450, 155, 151, 157, 450, 450, 118, 167, 124, 450,
741
- /* 520 */ 3, 450, 58, 57, 56, 55, 450, 58, 57, 56,
742
- /* 530 */ 55, 109, 450, 4, 450, 122, 396, 160, 159, 536,
743
- /* 540 */ 167, 124, 42, 450, 109, 450, 450, 13, 122, 396,
744
- /* 550 */ 160, 159, 87, 153, 450, 450, 155, 151, 157, 450,
745
- /* 560 */ 450, 118, 167, 124, 450, 99, 153, 450, 450, 155,
746
- /* 570 */ 151, 157, 450, 450, 118, 167, 124, 450, 535, 167,
747
- /* 580 */ 124, 73, 450, 143, 150, 167, 124, 101, 497, 116,
748
- /* 590 */ 115, 167, 124, 73, 450, 143, 118, 167, 124, 450,
749
- /* 600 */ 487, 116, 115, 167, 124, 450, 73, 450, 143, 450,
750
- /* 610 */ 450, 110, 450, 486, 116, 115, 167, 124, 450, 450,
751
- /* 620 */ 118, 167, 124, 450, 465, 450, 73, 450, 143, 78,
752
- /* 630 */ 78, 450, 450, 523, 116, 115, 167, 124, 450, 73,
753
- /* 640 */ 334, 143, 58, 57, 56, 55, 133, 116, 115, 167,
754
- /* 650 */ 124, 73, 330, 143, 58, 57, 56, 55, 530, 116,
755
- /* 660 */ 115, 167, 124, 450, 73, 450, 143, 152, 167, 124,
756
- /* 670 */ 37, 529, 116, 115, 167, 124, 73, 450, 143, 154,
757
- /* 680 */ 167, 124, 39, 528, 116, 115, 167, 124, 73, 450,
758
- /* 690 */ 143, 58, 57, 56, 55, 527, 116, 115, 167, 124,
759
- /* 700 */ 450, 73, 450, 143, 450, 450, 45, 450, 526, 116,
760
- /* 710 */ 115, 167, 124, 58, 57, 56, 55, 319, 156, 167,
761
- /* 720 */ 124, 73, 450, 143, 161, 167, 124, 450, 525, 116,
762
- /* 730 */ 115, 167, 124, 450, 73, 450, 143, 58, 57, 56,
763
- /* 740 */ 55, 147, 116, 115, 167, 124, 73, 450, 143, 450,
764
- /* 750 */ 450, 443, 41, 148, 116, 115, 167, 124, 450, 73,
765
- /* 760 */ 450, 143, 58, 57, 56, 55, 132, 116, 115, 167,
766
- /* 770 */ 124, 73, 450, 143, 446, 447, 450, 44, 483, 116,
767
- /* 780 */ 115, 167, 124, 58, 57, 56, 55, 58, 57, 56,
768
- /* 790 */ 55, 74, 58, 57, 56, 55, 58, 57, 56, 55,
769
- /* 800 */ 314, 395, 58, 57, 56, 55, 313, 50, 58, 57,
770
- /* 810 */ 56, 55, 58, 57, 56, 55, 450, 450, 102, 58,
771
- /* 820 */ 57, 56, 55, 103, 450, 450, 395, 118, 167, 124,
772
- /* 830 */ 450, 88, 118, 167, 124, 89, 450, 444, 445, 105,
773
- /* 840 */ 118, 167, 124, 450, 118, 167, 124, 358, 118, 167,
774
- /* 850 */ 124, 399, 450, 450, 90, 450, 450, 91, 450, 450,
775
- /* 860 */ 106, 450, 450, 118, 167, 124, 118, 167, 124, 118,
776
- /* 870 */ 167, 124, 398, 450, 92, 450, 395, 450, 107, 450,
777
- /* 880 */ 450, 108, 450, 118, 167, 124, 450, 118, 167, 124,
778
- /* 890 */ 118, 167, 124, 94, 450, 450, 96, 450, 450, 97,
779
- /* 900 */ 450, 450, 118, 167, 124, 118, 167, 124, 118, 167,
780
- /* 910 */ 124, 450, 450, 98, 540, 167, 124, 450, 555, 450,
781
- /* 920 */ 450, 554, 118, 167, 124, 450, 553, 118, 167, 124,
782
- /* 930 */ 118, 167, 124, 552, 450, 118, 167, 124, 450, 119,
783
- /* 940 */ 450, 450, 118, 167, 124, 120, 450, 450, 118, 167,
784
- /* 950 */ 124, 450, 450, 450, 118, 167, 124,
694
+ /* 0 */ 550, 535, 425, 18, 536, 537, 111, 426, 433, 24,
695
+ /* 10 */ 550, 127, 28, 429, 61, 60, 59, 58, 407, 408,
696
+ /* 20 */ 327, 27, 79, 128, 155, 509, 550, 20, 478, 153,
697
+ /* 30 */ 119, 306, 307, 6, 5, 34, 554, 33, 4, 68,
698
+ /* 40 */ 126, 51, 323, 63, 50, 31, 414, 327, 327, 327,
699
+ /* 50 */ 327, 405, 406, 328, 329, 330, 331, 332, 333, 334,
700
+ /* 60 */ 335, 450, 28, 359, 552, 74, 552, 392, 393, 394,
701
+ /* 70 */ 395, 450, 29, 420, 419, 475, 153, 119, 293, 407,
702
+ /* 80 */ 408, 327, 344, 79, 361, 150, 289, 450, 8, 23,
703
+ /* 90 */ 71, 22, 306, 307, 6, 5, 34, 80, 33, 4,
704
+ /* 100 */ 68, 126, 26, 323, 63, 507, 153, 119, 327, 327,
705
+ /* 110 */ 327, 327, 405, 406, 328, 329, 330, 331, 332, 333,
706
+ /* 120 */ 334, 335, 449, 415, 416, 417, 418, 81, 110, 427,
707
+ /* 130 */ 433, 24, 449, 48, 44, 429, 117, 66, 154, 72,
708
+ /* 140 */ 407, 408, 327, 72, 79, 118, 155, 282, 449, 20,
709
+ /* 150 */ 21, 59, 58, 306, 307, 6, 5, 34, 30, 33,
710
+ /* 160 */ 4, 68, 126, 2, 323, 63, 379, 380, 414, 327,
711
+ /* 170 */ 327, 327, 327, 405, 406, 328, 329, 330, 331, 332,
712
+ /* 180 */ 333, 334, 335, 376, 414, 62, 56, 57, 512, 153,
713
+ /* 190 */ 119, 407, 408, 327, 359, 420, 419, 17, 64, 376,
714
+ /* 200 */ 414, 3, 56, 57, 77, 343, 291, 76, 363, 149,
715
+ /* 210 */ 359, 420, 419, 17, 404, 376, 414, 66, 56, 57,
716
+ /* 220 */ 327, 327, 327, 327, 405, 406, 359, 420, 419, 55,
717
+ /* 230 */ 403, 337, 337, 337, 337, 337, 337, 337, 337, 337,
718
+ /* 240 */ 337, 362, 151, 420, 419, 415, 416, 417, 418, 510,
719
+ /* 250 */ 153, 119, 130, 121, 426, 433, 24, 7, 412, 108,
720
+ /* 260 */ 429, 415, 416, 417, 418, 361, 150, 117, 375, 148,
721
+ /* 270 */ 147, 155, 135, 423, 20, 108, 134, 415, 416, 417,
722
+ /* 280 */ 418, 410, 10, 117, 375, 148, 147, 11, 12, 65,
723
+ /* 290 */ 114, 108, 346, 415, 416, 417, 418, 15, 53, 117,
724
+ /* 300 */ 375, 148, 147, 138, 136, 61, 60, 59, 58, 1,
725
+ /* 310 */ 109, 61, 60, 59, 58, 78, 367, 54, 374, 120,
726
+ /* 320 */ 153, 119, 360, 441, 49, 70, 118, 141, 75, 75,
727
+ /* 330 */ 140, 139, 480, 113, 120, 153, 119, 40, 365, 146,
728
+ /* 340 */ 138, 136, 61, 60, 59, 58, 366, 317, 152, 61,
729
+ /* 350 */ 60, 59, 58, 67, 142, 32, 424, 61, 60, 59,
730
+ /* 360 */ 58, 49, 424, 424, 424, 14, 13, 140, 139, 384,
731
+ /* 370 */ 281, 513, 424, 16, 40, 137, 411, 424, 424, 424,
732
+ /* 380 */ 145, 37, 125, 424, 424, 424, 385, 386, 387, 389,
733
+ /* 390 */ 77, 424, 291, 76, 424, 392, 393, 394, 395, 424,
734
+ /* 400 */ 424, 424, 14, 13, 376, 424, 424, 56, 57, 513,
735
+ /* 410 */ 16, 424, 137, 411, 513, 107, 424, 513, 55, 424,
736
+ /* 420 */ 424, 284, 285, 286, 376, 288, 424, 56, 57, 376,
737
+ /* 430 */ 318, 424, 56, 57, 424, 359, 424, 424, 55, 424,
738
+ /* 440 */ 359, 424, 376, 55, 424, 56, 57, 424, 424, 82,
739
+ /* 450 */ 424, 424, 424, 359, 424, 424, 55, 424, 120, 153,
740
+ /* 460 */ 119, 431, 24, 70, 36, 141, 93, 131, 129, 424,
741
+ /* 470 */ 432, 113, 120, 153, 119, 120, 153, 119, 146, 424,
742
+ /* 480 */ 108, 19, 376, 314, 424, 56, 57, 424, 117, 375,
743
+ /* 490 */ 148, 147, 142, 359, 424, 146, 55, 424, 424, 424,
744
+ /* 500 */ 108, 61, 60, 59, 58, 108, 424, 424, 117, 375,
745
+ /* 510 */ 148, 147, 414, 117, 375, 148, 147, 38, 108, 424,
746
+ /* 520 */ 376, 424, 359, 56, 57, 424, 117, 375, 148, 147,
747
+ /* 530 */ 9, 107, 424, 376, 55, 424, 56, 57, 376, 420,
748
+ /* 540 */ 419, 56, 57, 424, 359, 424, 424, 42, 424, 359,
749
+ /* 550 */ 424, 424, 46, 424, 70, 424, 141, 424, 108, 424,
750
+ /* 560 */ 424, 479, 113, 120, 153, 119, 117, 375, 148, 147,
751
+ /* 570 */ 70, 424, 141, 61, 60, 59, 58, 473, 113, 120,
752
+ /* 580 */ 153, 119, 424, 142, 424, 35, 424, 108, 424, 415,
753
+ /* 590 */ 416, 417, 418, 424, 424, 117, 108, 424, 313, 142,
754
+ /* 600 */ 61, 60, 59, 58, 117, 375, 148, 147, 424, 108,
755
+ /* 610 */ 424, 424, 424, 424, 108, 424, 424, 117, 375, 148,
756
+ /* 620 */ 147, 424, 117, 375, 148, 147, 70, 424, 141, 424,
757
+ /* 630 */ 424, 424, 39, 463, 113, 120, 153, 119, 70, 424,
758
+ /* 640 */ 141, 61, 60, 59, 58, 462, 113, 120, 153, 119,
759
+ /* 650 */ 70, 424, 141, 424, 342, 142, 424, 499, 113, 120,
760
+ /* 660 */ 153, 119, 70, 424, 141, 424, 424, 142, 424, 133,
761
+ /* 670 */ 113, 120, 153, 119, 424, 70, 424, 141, 424, 142,
762
+ /* 680 */ 424, 424, 506, 113, 120, 153, 119, 70, 424, 141,
763
+ /* 690 */ 83, 142, 424, 424, 505, 113, 120, 153, 119, 120,
764
+ /* 700 */ 153, 119, 424, 70, 142, 141, 424, 424, 424, 424,
765
+ /* 710 */ 504, 113, 120, 153, 119, 70, 142, 141, 86, 146,
766
+ /* 720 */ 424, 424, 503, 113, 120, 153, 119, 120, 153, 119,
767
+ /* 730 */ 424, 70, 142, 141, 424, 424, 424, 424, 502, 113,
768
+ /* 740 */ 120, 153, 119, 70, 142, 141, 424, 146, 424, 424,
769
+ /* 750 */ 501, 113, 120, 153, 119, 70, 424, 141, 424, 424,
770
+ /* 760 */ 142, 424, 143, 113, 120, 153, 119, 70, 424, 141,
771
+ /* 770 */ 424, 424, 142, 424, 144, 113, 120, 153, 119, 424,
772
+ /* 780 */ 69, 424, 141, 424, 142, 424, 424, 112, 113, 120,
773
+ /* 790 */ 153, 119, 70, 424, 141, 424, 142, 424, 424, 132,
774
+ /* 800 */ 113, 120, 153, 119, 424, 424, 424, 424, 70, 142,
775
+ /* 810 */ 141, 424, 424, 424, 109, 459, 113, 120, 153, 119,
776
+ /* 820 */ 87, 142, 141, 120, 153, 119, 424, 441, 124, 120,
777
+ /* 830 */ 153, 119, 424, 545, 424, 424, 73, 142, 61, 60,
778
+ /* 840 */ 59, 58, 302, 146, 141, 120, 153, 119, 424, 142,
779
+ /* 850 */ 123, 122, 153, 119, 424, 424, 424, 444, 424, 25,
780
+ /* 860 */ 424, 424, 424, 109, 424, 146, 424, 424, 424, 424,
781
+ /* 870 */ 109, 123, 120, 153, 119, 424, 455, 424, 424, 120,
782
+ /* 880 */ 153, 119, 424, 430, 61, 60, 59, 58, 61, 60,
783
+ /* 890 */ 59, 58, 146, 424, 424, 424, 424, 374, 424, 146,
784
+ /* 900 */ 99, 374, 424, 41, 424, 424, 100, 45, 424, 120,
785
+ /* 910 */ 153, 119, 101, 424, 424, 120, 153, 119, 424, 424,
786
+ /* 920 */ 424, 120, 153, 119, 424, 424, 424, 102, 424, 146,
787
+ /* 930 */ 424, 424, 424, 424, 88, 146, 120, 153, 119, 424,
788
+ /* 940 */ 424, 146, 89, 120, 153, 119, 424, 424, 84, 424,
789
+ /* 950 */ 424, 120, 153, 119, 424, 103, 146, 120, 153, 119,
790
+ /* 960 */ 424, 424, 424, 146, 120, 153, 119, 424, 424, 90,
791
+ /* 970 */ 424, 146, 91, 424, 424, 424, 424, 146, 120, 153,
792
+ /* 980 */ 119, 120, 153, 119, 146, 85, 61, 60, 59, 58,
793
+ /* 990 */ 424, 424, 424, 424, 120, 153, 119, 104, 146, 424,
794
+ /* 1000 */ 424, 146, 424, 424, 424, 43, 120, 153, 119, 92,
795
+ /* 1010 */ 424, 424, 424, 105, 146, 424, 424, 424, 120, 153,
796
+ /* 1020 */ 119, 106, 120, 153, 119, 94, 146, 424, 424, 424,
797
+ /* 1030 */ 120, 153, 119, 424, 120, 153, 119, 424, 146, 424,
798
+ /* 1040 */ 424, 424, 146, 424, 424, 424, 95, 424, 424, 96,
799
+ /* 1050 */ 146, 424, 424, 97, 146, 120, 153, 119, 120, 153,
800
+ /* 1060 */ 119, 98, 120, 153, 119, 424, 61, 60, 59, 58,
801
+ /* 1070 */ 120, 153, 119, 424, 424, 146, 527, 424, 146, 341,
802
+ /* 1080 */ 424, 424, 146, 526, 424, 120, 153, 119, 424, 424,
803
+ /* 1090 */ 146, 424, 120, 153, 119, 424, 424, 424, 424, 525,
804
+ /* 1100 */ 424, 424, 424, 424, 524, 146, 424, 115, 120, 153,
805
+ /* 1110 */ 119, 116, 146, 120, 153, 119, 120, 153, 119, 424,
806
+ /* 1120 */ 120, 153, 119, 61, 60, 59, 58, 424, 146, 424,
807
+ /* 1130 */ 424, 424, 424, 146, 424, 424, 146, 424, 424, 424,
808
+ /* 1140 */ 146, 424, 47, 424, 424, 61, 60, 59, 58, 297,
809
+ /* 1150 */ 61, 60, 59, 58, 61, 60, 59, 58, 61, 60,
810
+ /* 1160 */ 59, 58, 424, 378, 61, 60, 59, 58, 424, 424,
811
+ /* 1170 */ 424, 377, 424, 52, 424, 424, 424, 374,
785812
};
786813
static const YYCODETYPE yy_lookahead[] = {
787
- /* 0 */ 0, 103, 104, 105, 122, 90, 91, 92, 93, 0,
788
- /* 10 */ 10, 3, 97, 96, 14, 15, 16, 95, 18, 10,
789
- /* 20 */ 98, 99, 22, 108, 96, 110, 111, 27, 28, 29,
790
- /* 30 */ 30, 31, 96, 33, 34, 35, 36, 97, 38, 39,
791
- /* 40 */ 118, 119, 120, 43, 44, 45, 46, 47, 48, 49,
792
- /* 50 */ 50, 51, 52, 53, 54, 55, 56, 1, 2, 95,
793
- /* 60 */ 4, 5, 98, 99, 100, 92, 93, 94, 12, 96,
794
- /* 70 */ 14, 15, 16, 10, 101, 102, 103, 104, 105, 19,
795
- /* 80 */ 94, 25, 26, 1, 114, 22, 4, 5, 80, 103,
796
- /* 90 */ 104, 105, 96, 12, 12, 109, 14, 15, 16, 43,
797
- /* 100 */ 44, 45, 46, 47, 48, 94, 95, 96, 116, 98,
798
- /* 110 */ 99, 100, 101, 102, 103, 104, 105, 121, 4, 5,
799
- /* 120 */ 6, 7, 106, 67, 106, 43, 44, 45, 46, 47,
800
- /* 130 */ 48, 37, 76, 77, 78, 19, 34, 94, 82, 83,
801
- /* 140 */ 84, 85, 86, 87, 88, 89, 103, 104, 105, 67,
802
- /* 150 */ 107, 1, 2, 42, 4, 5, 113, 4, 5, 78,
803
- /* 160 */ 78, 34, 12, 82, 82, 83, 84, 85, 86, 87,
804
- /* 170 */ 1, 2, 35, 4, 5, 25, 26, 35, 103, 104,
805
- /* 180 */ 105, 12, 68, 68, 68, 41, 75, 18, 69, 20,
806
- /* 190 */ 21, 1, 81, 73, 25, 26, 72, 23, 24, 25,
807
- /* 200 */ 26, 73, 12, 74, 14, 15, 16, 17, 18, 42,
808
- /* 210 */ 20, 21, 3, 23, 24, 25, 26, 67, 20, 21,
809
- /* 220 */ 2, 3, 4, 5, 6, 7, 76, 77, 78, 103,
810
- /* 230 */ 104, 105, 82, 83, 84, 85, 67, 19, 88, 89,
811
- /* 240 */ 86, 87, 75, 25, 26, 76, 77, 78, 42, 3,
812
- /* 250 */ 32, 82, 83, 84, 85, 94, 1, 88, 89, 4,
813
- /* 260 */ 5, 3, 6, 7, 103, 104, 105, 12, 107, 14,
814
- /* 270 */ 15, 16, 75, 18, 3, 14, 15, 16, 60, 61,
815
- /* 280 */ 82, 75, 90, 91, 92, 93, 68, 3, 70, 97,
816
- /* 290 */ 72, 73, 3, 2, 3, 4, 5, 6, 7, 3,
817
- /* 300 */ 108, 86, 87, 111, 43, 44, 45, 46, 47, 48,
818
- /* 310 */ 19, 75, 14, 15, 16, 1, 25, 26, 4, 5,
819
- /* 320 */ 71, 94, 67, 32, 1, 19, 12, 4, 5, 13,
820
- /* 330 */ 103, 104, 105, 78, 107, 12, 68, 82, 83, 84,
821
- /* 340 */ 85, 43, 44, 45, 46, 47, 48, 86, 87, 20,
822
- /* 350 */ 21, 60, 61, 3, 40, 41, 1, 2, 68, 4,
823
- /* 360 */ 5, 70, 3, 72, 73, 20, 21, 12, 94, 1,
824
- /* 370 */ 2, 68, 4, 5, 76, 77, 3, 103, 104, 105,
825
- /* 380 */ 12, 67, 3, 68, 86, 87, 67, 32, 67, 115,
826
- /* 390 */ 67, 117, 78, 94, 2, 12, 82, 83, 84, 85,
827
- /* 400 */ 32, 78, 103, 104, 105, 82, 83, 84, 85, 1,
828
- /* 410 */ 20, 21, 4, 5, 94, 3, 22, 25, 26, 94,
829
- /* 420 */ 12, 96, 67, 103, 104, 105, 101, 102, 103, 104,
830
- /* 430 */ 105, 22, 22, 78, 94, 67, 96, 82, 83, 84,
831
- /* 440 */ 85, 101, 102, 103, 104, 105, 78, 20, 21, 123,
832
- /* 450 */ 82, 83, 84, 85, 1, 81, 11, 4, 5, 103,
833
- /* 460 */ 104, 105, 91, 92, 93, 12, 123, 1, 97, 79,
834
- /* 470 */ 4, 5, 82, 123, 94, 67, 123, 123, 12, 108,
835
- /* 480 */ 88, 89, 111, 103, 104, 105, 78, 123, 123, 123,
836
- /* 490 */ 82, 83, 84, 85, 123, 57, 58, 59, 60, 61,
837
- /* 500 */ 62, 63, 64, 65, 66, 123, 79, 94, 95, 82,
838
- /* 510 */ 123, 98, 99, 100, 123, 123, 103, 104, 105, 123,
839
- /* 520 */ 67, 123, 4, 5, 6, 7, 123, 4, 5, 6,
840
- /* 530 */ 7, 78, 123, 67, 123, 82, 83, 84, 85, 103,
841
- /* 540 */ 104, 105, 19, 123, 78, 123, 123, 29, 82, 83,
842
- /* 550 */ 84, 85, 94, 95, 123, 123, 98, 99, 100, 123,
843
- /* 560 */ 123, 103, 104, 105, 123, 94, 95, 123, 123, 98,
844
- /* 570 */ 99, 100, 123, 123, 103, 104, 105, 123, 103, 104,
845
- /* 580 */ 105, 94, 123, 96, 103, 104, 105, 94, 101, 102,
846
- /* 590 */ 103, 104, 105, 94, 123, 96, 103, 104, 105, 123,
847
- /* 600 */ 101, 102, 103, 104, 105, 123, 94, 123, 96, 123,
848
- /* 610 */ 123, 94, 123, 101, 102, 103, 104, 105, 123, 123,
849
- /* 620 */ 103, 104, 105, 123, 107, 123, 94, 123, 96, 112,
850
- /* 630 */ 113, 123, 123, 101, 102, 103, 104, 105, 123, 94,
851
- /* 640 */ 2, 96, 4, 5, 6, 7, 101, 102, 103, 104,
852
- /* 650 */ 105, 94, 2, 96, 4, 5, 6, 7, 101, 102,
853
- /* 660 */ 103, 104, 105, 123, 94, 123, 96, 103, 104, 105,
854
- /* 670 */ 32, 101, 102, 103, 104, 105, 94, 123, 96, 103,
855
- /* 680 */ 104, 105, 32, 101, 102, 103, 104, 105, 94, 123,
856
- /* 690 */ 96, 4, 5, 6, 7, 101, 102, 103, 104, 105,
857
- /* 700 */ 123, 94, 123, 96, 123, 123, 19, 123, 101, 102,
858
- /* 710 */ 103, 104, 105, 4, 5, 6, 7, 8, 103, 104,
859
- /* 720 */ 105, 94, 123, 96, 103, 104, 105, 123, 101, 102,
860
- /* 730 */ 103, 104, 105, 123, 94, 123, 96, 4, 5, 6,
861
- /* 740 */ 7, 101, 102, 103, 104, 105, 94, 123, 96, 123,
862
- /* 750 */ 123, 2, 19, 101, 102, 103, 104, 105, 123, 94,
863
- /* 760 */ 123, 96, 4, 5, 6, 7, 101, 102, 103, 104,
864
- /* 770 */ 105, 94, 123, 96, 25, 26, 123, 19, 101, 102,
865
- /* 780 */ 103, 104, 105, 4, 5, 6, 7, 4, 5, 6,
866
- /* 790 */ 7, 42, 4, 5, 6, 7, 4, 5, 6, 7,
867
- /* 800 */ 8, 68, 4, 5, 6, 7, 8, 19, 4, 5,
868
- /* 810 */ 6, 7, 4, 5, 6, 7, 123, 123, 94, 4,
869
- /* 820 */ 5, 6, 7, 94, 123, 123, 68, 103, 104, 105,
870
- /* 830 */ 123, 94, 103, 104, 105, 94, 123, 88, 89, 94,
871
- /* 840 */ 103, 104, 105, 123, 103, 104, 105, 68, 103, 104,
872
- /* 850 */ 105, 68, 123, 123, 94, 123, 123, 94, 123, 123,
873
- /* 860 */ 94, 123, 123, 103, 104, 105, 103, 104, 105, 103,
874
- /* 870 */ 104, 105, 68, 123, 94, 123, 68, 123, 94, 123,
875
- /* 880 */ 123, 94, 123, 103, 104, 105, 123, 103, 104, 105,
876
- /* 890 */ 103, 104, 105, 94, 123, 123, 94, 123, 123, 94,
877
- /* 900 */ 123, 123, 103, 104, 105, 103, 104, 105, 103, 104,
878
- /* 910 */ 105, 123, 123, 94, 103, 104, 105, 123, 94, 123,
879
- /* 920 */ 123, 94, 103, 104, 105, 123, 94, 103, 104, 105,
880
- /* 930 */ 103, 104, 105, 94, 123, 103, 104, 105, 123, 94,
881
- /* 940 */ 123, 123, 103, 104, 105, 94, 123, 123, 103, 104,
882
- /* 950 */ 105, 123, 123, 123, 103, 104, 105, 90, 90, 90,
883
- /* 960 */ 90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
884
- /* 970 */ 90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
885
- /* 980 */ 90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
886
- /* 990 */ 90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
887
- /* 1000 */ 90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
888
- /* 1010 */ 90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
889
- /* 1020 */ 90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
890
- /* 1030 */ 90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
891
- /* 1040 */ 90, 90, 90, 90, 90, 90, 90,
814
+ /* 0 */ 0, 98, 0, 125, 101, 102, 93, 94, 95, 96,
815
+ /* 10 */ 10, 99, 10, 100, 4, 5, 6, 7, 18, 19,
816
+ /* 20 */ 20, 120, 22, 99, 111, 99, 26, 114, 106, 107,
817
+ /* 30 */ 108, 31, 32, 33, 34, 35, 124, 37, 38, 39,
818
+ /* 40 */ 40, 98, 42, 43, 101, 102, 2, 47, 48, 49,
819
+ /* 50 */ 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
820
+ /* 60 */ 60, 0, 10, 12, 121, 122, 123, 27, 28, 29,
821
+ /* 70 */ 30, 10, 100, 29, 30, 106, 107, 108, 26, 18,
822
+ /* 80 */ 19, 20, 17, 22, 24, 25, 23, 26, 23, 119,
823
+ /* 90 */ 46, 117, 31, 32, 33, 34, 35, 109, 37, 38,
824
+ /* 100 */ 39, 40, 120, 42, 43, 106, 107, 108, 47, 48,
825
+ /* 110 */ 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
826
+ /* 120 */ 59, 60, 0, 79, 80, 81, 82, 109, 77, 94,
827
+ /* 130 */ 95, 96, 10, 4, 5, 100, 85, 3, 78, 46,
828
+ /* 140 */ 18, 19, 20, 46, 22, 85, 111, 17, 26, 114,
829
+ /* 150 */ 15, 6, 7, 31, 32, 33, 34, 35, 16, 37,
830
+ /* 160 */ 38, 39, 40, 38, 42, 43, 90, 91, 2, 47,
831
+ /* 170 */ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
832
+ /* 180 */ 58, 59, 60, 1, 2, 92, 4, 5, 106, 107,
833
+ /* 190 */ 108, 18, 19, 20, 12, 29, 30, 15, 41, 1,
834
+ /* 200 */ 2, 38, 4, 5, 22, 17, 24, 25, 24, 25,
835
+ /* 210 */ 12, 29, 30, 15, 39, 1, 2, 83, 4, 5,
836
+ /* 220 */ 47, 48, 49, 50, 51, 52, 12, 29, 30, 15,
837
+ /* 230 */ 39, 61, 62, 63, 64, 65, 66, 67, 68, 69,
838
+ /* 240 */ 70, 24, 25, 29, 30, 79, 80, 81, 82, 106,
839
+ /* 250 */ 107, 108, 45, 93, 94, 95, 96, 71, 75, 77,
840
+ /* 260 */ 100, 79, 80, 81, 82, 24, 25, 85, 86, 87,
841
+ /* 270 */ 88, 111, 76, 113, 114, 77, 74, 79, 80, 81,
842
+ /* 280 */ 82, 75, 3, 85, 86, 87, 88, 3, 3, 3,
843
+ /* 290 */ 89, 77, 73, 79, 80, 81, 82, 23, 15, 85,
844
+ /* 300 */ 86, 87, 88, 2, 3, 4, 5, 6, 7, 13,
845
+ /* 310 */ 97, 4, 5, 6, 7, 8, 26, 15, 17, 106,
846
+ /* 320 */ 107, 108, 12, 110, 23, 97, 85, 99, 115, 116,
847
+ /* 330 */ 29, 30, 104, 105, 106, 107, 108, 36, 26, 126,
848
+ /* 340 */ 2, 3, 4, 5, 6, 7, 26, 2, 84, 4,
849
+ /* 350 */ 5, 6, 7, 3, 126, 11, 127, 4, 5, 6,
850
+ /* 360 */ 7, 23, 127, 127, 127, 64, 65, 29, 30, 1,
851
+ /* 370 */ 17, 46, 127, 72, 36, 74, 75, 127, 127, 127,
852
+ /* 380 */ 12, 36, 14, 127, 127, 127, 18, 19, 20, 21,
853
+ /* 390 */ 22, 127, 24, 25, 127, 27, 28, 29, 30, 127,
854
+ /* 400 */ 127, 127, 64, 65, 1, 127, 127, 4, 5, 84,
855
+ /* 410 */ 72, 127, 74, 75, 89, 12, 127, 92, 15, 127,
856
+ /* 420 */ 127, 18, 19, 20, 1, 22, 127, 4, 5, 1,
857
+ /* 430 */ 2, 127, 4, 5, 127, 12, 127, 127, 15, 127,
858
+ /* 440 */ 12, 127, 1, 15, 127, 4, 5, 127, 127, 97,
859
+ /* 450 */ 127, 127, 127, 12, 127, 127, 15, 127, 106, 107,
860
+ /* 460 */ 108, 95, 96, 97, 36, 99, 97, 44, 45, 127,
861
+ /* 470 */ 104, 105, 106, 107, 108, 106, 107, 108, 126, 127,
862
+ /* 480 */ 77, 112, 1, 2, 127, 4, 5, 127, 85, 86,
863
+ /* 490 */ 87, 88, 126, 12, 127, 126, 15, 127, 127, 127,
864
+ /* 500 */ 77, 4, 5, 6, 7, 77, 127, 127, 85, 86,
865
+ /* 510 */ 87, 88, 2, 85, 86, 87, 88, 36, 77, 127,
866
+ /* 520 */ 1, 127, 12, 4, 5, 127, 85, 86, 87, 88,
867
+ /* 530 */ 33, 12, 127, 1, 15, 127, 4, 5, 1, 29,
868
+ /* 540 */ 30, 4, 5, 127, 12, 127, 127, 15, 127, 12,
869
+ /* 550 */ 127, 127, 15, 127, 97, 127, 99, 127, 77, 127,
870
+ /* 560 */ 127, 104, 105, 106, 107, 108, 85, 86, 87, 88,
871
+ /* 570 */ 97, 127, 99, 4, 5, 6, 7, 104, 105, 106,
872
+ /* 580 */ 107, 108, 127, 126, 127, 16, 127, 77, 127, 79,
873
+ /* 590 */ 80, 81, 82, 127, 127, 85, 77, 127, 2, 126,
874
+ /* 600 */ 4, 5, 6, 7, 85, 86, 87, 88, 127, 77,
875
+ /* 610 */ 127, 127, 127, 127, 77, 127, 127, 85, 86, 87,
876
+ /* 620 */ 88, 127, 85, 86, 87, 88, 97, 127, 99, 127,
877
+ /* 630 */ 127, 127, 36, 104, 105, 106, 107, 108, 97, 127,
878
+ /* 640 */ 99, 4, 5, 6, 7, 104, 105, 106, 107, 108,
879
+ /* 650 */ 97, 127, 99, 127, 17, 126, 127, 104, 105, 106,
880
+ /* 660 */ 107, 108, 97, 127, 99, 127, 127, 126, 127, 104,
881
+ /* 670 */ 105, 106, 107, 108, 127, 97, 127, 99, 127, 126,
882
+ /* 680 */ 127, 127, 104, 105, 106, 107, 108, 97, 127, 99,
883
+ /* 690 */ 97, 126, 127, 127, 104, 105, 106, 107, 108, 106,
884
+ /* 700 */ 107, 108, 127, 97, 126, 99, 127, 127, 127, 127,
885
+ /* 710 */ 104, 105, 106, 107, 108, 97, 126, 99, 97, 126,
886
+ /* 720 */ 127, 127, 104, 105, 106, 107, 108, 106, 107, 108,
887
+ /* 730 */ 127, 97, 126, 99, 127, 127, 127, 127, 104, 105,
888
+ /* 740 */ 106, 107, 108, 97, 126, 99, 127, 126, 127, 127,
889
+ /* 750 */ 104, 105, 106, 107, 108, 97, 127, 99, 127, 127,
890
+ /* 760 */ 126, 127, 104, 105, 106, 107, 108, 97, 127, 99,
891
+ /* 770 */ 127, 127, 126, 127, 104, 105, 106, 107, 108, 127,
892
+ /* 780 */ 97, 127, 99, 127, 126, 127, 127, 104, 105, 106,
893
+ /* 790 */ 107, 108, 97, 127, 99, 127, 126, 127, 127, 104,
894
+ /* 800 */ 105, 106, 107, 108, 127, 127, 127, 127, 97, 126,
895
+ /* 810 */ 99, 127, 127, 127, 97, 104, 105, 106, 107, 108,
896
+ /* 820 */ 97, 126, 99, 106, 107, 108, 127, 110, 105, 106,
897
+ /* 830 */ 107, 108, 127, 116, 127, 127, 97, 126, 4, 5,
898
+ /* 840 */ 6, 7, 8, 126, 99, 106, 107, 108, 127, 126,
899
+ /* 850 */ 105, 106, 107, 108, 127, 127, 127, 118, 127, 120,
900
+ /* 860 */ 127, 127, 127, 97, 127, 126, 127, 127, 127, 127,
901
+ /* 870 */ 97, 126, 106, 107, 108, 127, 110, 127, 127, 106,
902
+ /* 880 */ 107, 108, 127, 110, 4, 5, 6, 7, 4, 5,
903
+ /* 890 */ 6, 7, 126, 127, 127, 127, 127, 17, 127, 126,
904
+ /* 900 */ 97, 17, 127, 23, 127, 127, 97, 23, 127, 106,
905
+ /* 910 */ 107, 108, 97, 127, 127, 106, 107, 108, 127, 127,
906
+ /* 920 */ 127, 106, 107, 108, 127, 127, 127, 97, 127, 126,
907
+ /* 930 */ 127, 127, 127, 127, 97, 126, 106, 107, 108, 127,
908
+ /* 940 */ 127, 126, 97, 106, 107, 108, 127, 127, 97, 127,
909
+ /* 950 */ 127, 106, 107, 108, 127, 97, 126, 106, 107, 108,
910
+ /* 960 */ 127, 127, 127, 126, 106, 107, 108, 127, 127, 97,
911
+ /* 970 */ 127, 126, 97, 127, 127, 127, 127, 126, 106, 107,
912
+ /* 980 */ 108, 106, 107, 108, 126, 97, 4, 5, 6, 7,
913
+ /* 990 */ 127, 127, 127, 127, 106, 107, 108, 97, 126, 127,
914
+ /* 1000 */ 127, 126, 127, 127, 127, 23, 106, 107, 108, 97,
915
+ /* 1010 */ 127, 127, 127, 97, 126, 127, 127, 127, 106, 107,
916
+ /* 1020 */ 108, 97, 106, 107, 108, 97, 126, 127, 127, 127,
917
+ /* 1030 */ 106, 107, 108, 127, 106, 107, 108, 127, 126, 127,
918
+ /* 1040 */ 127, 127, 126, 127, 127, 127, 97, 127, 127, 97,
919
+ /* 1050 */ 126, 127, 127, 97, 126, 106, 107, 108, 106, 107,
920
+ /* 1060 */ 108, 97, 106, 107, 108, 127, 4, 5, 6, 7,
921
+ /* 1070 */ 106, 107, 108, 127, 127, 126, 97, 127, 126, 17,
922
+ /* 1080 */ 127, 127, 126, 97, 127, 106, 107, 108, 127, 127,
923
+ /* 1090 */ 126, 127, 106, 107, 108, 127, 127, 127, 127, 97,
924
+ /* 1100 */ 127, 127, 127, 127, 97, 126, 127, 97, 106, 107,
925
+ /* 1110 */ 108, 97, 126, 106, 107, 108, 106, 107, 108, 127,
926
+ /* 1120 */ 106, 107, 108, 4, 5, 6, 7, 127, 126, 127,
927
+ /* 1130 */ 127, 127, 127, 126, 127, 127, 126, 127, 127, 127,
928
+ /* 1140 */ 126, 127, 23, 127, 127, 4, 5, 6, 7, 8,
929
+ /* 1150 */ 4, 5, 6, 7, 4, 5, 6, 7, 4, 5,
930
+ /* 1160 */ 6, 7, 127, 17, 4, 5, 6, 7, 127, 127,
931
+ /* 1170 */ 127, 17, 127, 23, 127, 127, 127, 17, 127, 127,
932
+ /* 1180 */ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
933
+ /* 1190 */ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
934
+ /* 1200 */ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
935
+ /* 1210 */ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
936
+ /* 1220 */ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
937
+ /* 1230 */ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
938
+ /* 1240 */ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
939
+ /* 1250 */ 127, 127, 127, 127, 127, 127, 127, 127, 93, 93,
940
+ /* 1260 */ 93, 93, 93, 93, 93, 93, 93, 93, 93, 93,
941
+ /* 1270 */ 93,
892942
};
893
-#define YY_SHIFT_COUNT (168)
943
+#define YY_SHIFT_COUNT (155)
894944
#define YY_SHIFT_MIN (0)
895
-#define YY_SHIFT_MAX (815)
945
+#define YY_SHIFT_MAX (1160)
896946
static const unsigned short int yy_shift_ofst[] = {
897
- /* 0 */ 190, 56, 169, 82, 82, 82, 150, 150, 150, 150,
898
- /* 10 */ 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
899
- /* 20 */ 150, 150, 150, 255, 190, 0, 255, 190, 323, 314,
900
- /* 30 */ 408, 408, 298, 355, 368, 261, 323, 323, 323, 323,
901
- /* 40 */ 323, 323, 323, 453, 323, 323, 466, 323, 323, 323,
902
- /* 50 */ 323, 323, 323, 323, 323, 323, 323, 323, 323, 81,
903
- /* 60 */ 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
904
- /* 70 */ 81, 749, 218, 291, 392, 392, 392, 174, 60, 957,
905
- /* 80 */ 957, 957, 438, 438, 638, 650, 733, 758, 518, 114,
906
- /* 90 */ 523, 779, 687, 709, 792, 798, 783, 788, 804, 808,
907
- /* 100 */ 815, 815, 815, 815, 390, 815, 815, 815, 815, 427,
908
- /* 110 */ 815, 111, 198, 63, 116, 167, 153, 154, 206, 256,
909
- /* 120 */ 256, 215, 329, 345, 8, 9, 94, 102, 127, 137,
910
- /* 130 */ 142, 144, 119, 115, 120, 124, 129, 128, 209, 246,
911
- /* 140 */ 258, 197, 271, 284, 289, 296, 236, 249, 306, 316,
912
- /* 150 */ 268, 350, 290, 359, 303, 373, 315, 379, 236, 319,
913
- /* 160 */ 321, 197, 412, 394, 409, 410, 383, 374, 445,
947
+ /* 0 */ 368, 182, 198, 198, 198, 198, 198, 198, 198, 198,
948
+ /* 10 */ 198, 198, 198, 198, 198, 198, 198, 198, 198, 198,
949
+ /* 20 */ 403, 214, 403, 368, 441, 0, 61, 122, 368, 423,
950
+ /* 30 */ 510, 519, 519, 428, 481, 441, 441, 441, 441, 441,
951
+ /* 40 */ 441, 441, 441, 441, 532, 441, 441, 441, 537, 441,
952
+ /* 50 */ 441, 441, 441, 441, 441, 441, 441, 441, 441, 441,
953
+ /* 60 */ 441, 441, 173, 51, 51, 51, 51, 51, 44, 301,
954
+ /* 70 */ 338, 166, 166, 307, 40, 63, 1178, 1178, 1178, 1178,
955
+ /* 80 */ 170, 170, 345, 596, 880, 884, 353, 569, 497, 637,
956
+ /* 90 */ 982, 1062, 1119, 834, 1141, 1146, 1150, 1154, 1160, 10,
957
+ /* 100 */ 10, 10, 10, 10, 10, 10, 10, 325, 60, 10,
958
+ /* 110 */ 241, 52, 65, 129, 76, 145, 145, 184, 217, 134,
959
+ /* 120 */ 93, 2, 97, 130, 142, 135, 157, 125, 163, 175,
960
+ /* 130 */ 191, 207, 186, 188, 183, 202, 196, 206, 279, 284,
961
+ /* 140 */ 285, 286, 201, 219, 274, 296, 201, 283, 302, 290,
962
+ /* 150 */ 312, 320, 310, 264, 350, 344,
914963
};
915
-#define YY_REDUCE_COUNT (81)
916
-#define YY_REDUCE_MIN (-118)
917
-#define YY_REDUCE_MAX (851)
964
+#define YY_REDUCE_COUNT (79)
965
+#define YY_REDUCE_MIN (-122)
966
+#define YY_REDUCE_MAX (1014)
918967
static const short yy_reduce_ofst[] = {
919
- /* 0 */ -85, 11, -27, 413, 458, 471, 325, 340, 487, 499,
920
- /* 10 */ 512, 532, 545, 557, 570, 582, 594, 607, 627, 640,
921
- /* 20 */ 652, 665, 677, 517, 192, -78, 43, 371, 274, -14,
922
- /* 30 */ 161, 227, -36, 299, 320, -36, 380, 493, 724, 729,
923
- /* 40 */ 737, 741, 745, 760, 763, 766, 780, 784, 787, 799,
924
- /* 50 */ 802, 805, 819, 824, 827, 832, 839, 845, 851, -102,
925
- /* 60 */ 75, 126, 356, 436, 475, 481, 564, 576, 615, 621,
926
- /* 70 */ 811, -4, -118, -118, -83, -72, -64, -60, -30, -8,
927
- /* 80 */ 16, 18,
968
+ /* 0 */ 160, 366, 228, 457, 473, 529, 541, 553, 565, 578,
969
+ /* 10 */ 590, 606, 618, 634, 646, 658, 670, 683, 695, 711,
970
+ /* 20 */ 213, 723, 717, -87, 739, -57, -57, -57, 35, 369,
971
+ /* 30 */ 745, 766, 773, 352, 593, 621, 803, 809, 815, 830,
972
+ /* 40 */ 837, 845, 851, 858, 872, 875, 888, 900, 912, 916,
973
+ /* 50 */ 924, 928, 949, 952, 956, 964, 979, 986, 1002, 1007,
974
+ /* 60 */ 1010, 1014, -97, -78, -31, -1, 82, 143, -88, -122,
975
+ /* 70 */ -122, -76, -74, -99, -28, -26, -30, -12, -18, 18,
928976
};
929977
static const YYACTIONTYPE yy_default[] = {
930
- /* 0 */ 454, 448, 448, 448, 448, 448, 448, 448, 448, 448,
931
- /* 10 */ 448, 448, 448, 448, 448, 448, 448, 448, 448, 448,
932
- /* 20 */ 448, 448, 448, 448, 454, 591, 448, 454, 586, 482,
933
- /* 30 */ 448, 448, 448, 590, 488, 448, 448, 448, 448, 448,
934
- /* 40 */ 448, 448, 448, 448, 448, 448, 448, 448, 478, 448,
935
- /* 50 */ 448, 448, 448, 448, 448, 448, 448, 448, 448, 448,
936
- /* 60 */ 448, 448, 448, 448, 448, 448, 448, 448, 448, 448,
937
- /* 70 */ 448, 448, 448, 448, 448, 448, 448, 448, 460, 472,
938
- /* 80 */ 514, 514, 470, 500, 448, 448, 448, 448, 448, 448,
939
- /* 90 */ 448, 448, 448, 481, 476, 473, 448, 448, 448, 448,
940
- /* 100 */ 494, 493, 490, 489, 448, 518, 517, 516, 477, 448,
941
- /* 110 */ 577, 461, 448, 448, 448, 531, 598, 448, 448, 551,
942
- /* 120 */ 550, 448, 546, 448, 539, 448, 498, 448, 448, 448,
943
- /* 130 */ 448, 448, 448, 448, 448, 448, 448, 448, 448, 448,
944
- /* 140 */ 448, 538, 448, 448, 448, 448, 532, 448, 448, 448,
945
- /* 150 */ 448, 448, 448, 448, 448, 448, 448, 448, 448, 448,
946
- /* 160 */ 448, 448, 448, 448, 448, 448, 448, 602, 448,
978
+ /* 0 */ 428, 422, 422, 422, 422, 422, 422, 422, 422, 422,
979
+ /* 10 */ 422, 422, 422, 422, 422, 422, 422, 422, 422, 422,
980
+ /* 20 */ 422, 422, 422, 428, 551, 556, 556, 556, 428, 458,
981
+ /* 30 */ 422, 422, 422, 555, 464, 422, 422, 422, 422, 422,
982
+ /* 40 */ 422, 422, 422, 422, 422, 422, 422, 422, 422, 422,
983
+ /* 50 */ 454, 422, 422, 422, 422, 422, 422, 422, 422, 422,
984
+ /* 60 */ 422, 422, 422, 422, 422, 422, 422, 422, 422, 422,
985
+ /* 70 */ 422, 422, 422, 551, 422, 434, 448, 490, 551, 490,
986
+ /* 80 */ 446, 476, 422, 422, 422, 422, 422, 422, 422, 422,
987
+ /* 90 */ 422, 422, 422, 457, 452, 422, 422, 422, 422, 470,
988
+ /* 100 */ 469, 466, 465, 494, 493, 492, 453, 437, 422, 542,
989
+ /* 110 */ 422, 422, 422, 563, 422, 523, 522, 518, 422, 511,
990
+ /* 120 */ 508, 422, 508, 422, 422, 422, 474, 422, 422, 422,
991
+ /* 130 */ 422, 422, 422, 422, 422, 422, 422, 422, 422, 422,
992
+ /* 140 */ 422, 422, 567, 422, 422, 422, 422, 422, 422, 422,
993
+ /* 150 */ 422, 422, 422, 575, 422, 422,
947994
};
948995
/********** End of lemon-generated parsing tables *****************************/
949996
950997
/* The next table maps tokens (terminal symbols) into fallback tokens.
951998
** If a construct like the following:
@@ -975,10 +1022,14 @@
9751022
0, /* UMINUS => nothing */
9761023
0, /* EOL => nothing */
9771024
0, /* ASSIGN => nothing */
9781025
0, /* PLACENAME => nothing */
9791026
0, /* COLON => nothing */
1027
+ 0, /* ASSERT => nothing */
1028
+ 0, /* LP => nothing */
1029
+ 0, /* EQ => nothing */
1030
+ 0, /* RP => nothing */
9801031
0, /* FILL => nothing */
9811032
0, /* COLOR => nothing */
9821033
0, /* THICKNESS => nothing */
9831034
0, /* PRINT => nothing */
9841035
0, /* STRING => nothing */
@@ -1028,33 +1079,32 @@
10281079
0, /* ITALIC => nothing */
10291080
0, /* BOLD => nothing */
10301081
0, /* ALIGNED => nothing */
10311082
0, /* BIG => nothing */
10321083
0, /* SMALL => nothing */
1033
- 0, /* LP => nothing */
1034
- 0, /* RP => nothing */
10351084
0, /* AND => nothing */
10361085
0, /* LT => nothing */
10371086
0, /* GT => nothing */
10381087
0, /* WAY => nothing */
10391088
0, /* BETWEEN => nothing */
10401089
0, /* THE => nothing */
1041
- 0, /* DOT_L => nothing */
1090
+ 0, /* NTH => nothing */
1091
+ 0, /* VERTEX => nothing */
1092
+ 0, /* TOP => nothing */
1093
+ 0, /* BOTTOM => nothing */
10421094
0, /* START => nothing */
10431095
0, /* END => nothing */
1044
- 0, /* NTH => nothing */
1045
- 0, /* VERTEX => nothing */
10461096
0, /* IN => nothing */
10471097
0, /* DOT_U => nothing */
10481098
0, /* LAST => nothing */
10491099
0, /* NUMBER => nothing */
10501100
0, /* FUNC1 => nothing */
10511101
0, /* FUNC2 => nothing */
1102
+ 0, /* DOT_XY => nothing */
10521103
0, /* X => nothing */
10531104
0, /* Y => nothing */
1054
- 0, /* TOP => nothing */
1055
- 0, /* BOTTOM => nothing */
1105
+ 0, /* DOT_L => nothing */
10561106
};
10571107
#endif /* YYFALLBACK */
10581108
10591109
/* The following structure represents a single element of the
10601110
** parser's stack. Information stored includes:
@@ -1153,119 +1203,123 @@
11531203
/* 9 */ "UMINUS",
11541204
/* 10 */ "EOL",
11551205
/* 11 */ "ASSIGN",
11561206
/* 12 */ "PLACENAME",
11571207
/* 13 */ "COLON",
1158
- /* 14 */ "FILL",
1159
- /* 15 */ "COLOR",
1160
- /* 16 */ "THICKNESS",
1161
- /* 17 */ "PRINT",
1162
- /* 18 */ "STRING",
1163
- /* 19 */ "COMMA",
1164
- /* 20 */ "CLASSNAME",
1165
- /* 21 */ "LB",
1166
- /* 22 */ "RB",
1167
- /* 23 */ "UP",
1168
- /* 24 */ "DOWN",
1169
- /* 25 */ "LEFT",
1170
- /* 26 */ "RIGHT",
1171
- /* 27 */ "CLOSE",
1172
- /* 28 */ "CHOP",
1173
- /* 29 */ "FROM",
1174
- /* 30 */ "TO",
1175
- /* 31 */ "THEN",
1176
- /* 32 */ "HEADING",
1177
- /* 33 */ "GO",
1178
- /* 34 */ "AT",
1179
- /* 35 */ "WITH",
1180
- /* 36 */ "SAME",
1181
- /* 37 */ "AS",
1182
- /* 38 */ "FIT",
1183
- /* 39 */ "BEHIND",
1184
- /* 40 */ "UNTIL",
1185
- /* 41 */ "EVEN",
1186
- /* 42 */ "DOT_E",
1187
- /* 43 */ "HEIGHT",
1188
- /* 44 */ "WIDTH",
1189
- /* 45 */ "RADIUS",
1190
- /* 46 */ "DIAMETER",
1191
- /* 47 */ "DOTTED",
1192
- /* 48 */ "DASHED",
1193
- /* 49 */ "CW",
1194
- /* 50 */ "CCW",
1195
- /* 51 */ "LARROW",
1196
- /* 52 */ "RARROW",
1197
- /* 53 */ "LRARROW",
1198
- /* 54 */ "INVIS",
1199
- /* 55 */ "THICK",
1200
- /* 56 */ "THIN",
1201
- /* 57 */ "CENTER",
1202
- /* 58 */ "LJUST",
1203
- /* 59 */ "RJUST",
1204
- /* 60 */ "ABOVE",
1205
- /* 61 */ "BELOW",
1206
- /* 62 */ "ITALIC",
1207
- /* 63 */ "BOLD",
1208
- /* 64 */ "ALIGNED",
1209
- /* 65 */ "BIG",
1210
- /* 66 */ "SMALL",
1211
- /* 67 */ "LP",
1212
- /* 68 */ "RP",
1213
- /* 69 */ "AND",
1214
- /* 70 */ "LT",
1215
- /* 71 */ "GT",
1216
- /* 72 */ "WAY",
1217
- /* 73 */ "BETWEEN",
1218
- /* 74 */ "THE",
1219
- /* 75 */ "DOT_L",
1220
- /* 76 */ "START",
1221
- /* 77 */ "END",
1222
- /* 78 */ "NTH",
1223
- /* 79 */ "VERTEX",
1224
- /* 80 */ "IN",
1225
- /* 81 */ "DOT_U",
1226
- /* 82 */ "LAST",
1227
- /* 83 */ "NUMBER",
1228
- /* 84 */ "FUNC1",
1229
- /* 85 */ "FUNC2",
1230
- /* 86 */ "X",
1231
- /* 87 */ "Y",
1232
- /* 88 */ "TOP",
1233
- /* 89 */ "BOTTOM",
1234
- /* 90 */ "element_list",
1235
- /* 91 */ "element",
1236
- /* 92 */ "unnamed_element",
1237
- /* 93 */ "basetype",
1238
- /* 94 */ "expr",
1239
- /* 95 */ "numproperty",
1240
- /* 96 */ "edge",
1241
- /* 97 */ "direction",
1242
- /* 98 */ "dashproperty",
1243
- /* 99 */ "colorproperty",
1244
- /* 100 */ "locproperty",
1245
- /* 101 */ "position",
1246
- /* 102 */ "place",
1247
- /* 103 */ "object",
1248
- /* 104 */ "objectname",
1249
- /* 105 */ "nth",
1250
- /* 106 */ "textposition",
1251
- /* 107 */ "rvalue",
1252
- /* 108 */ "lvalue",
1253
- /* 109 */ "even",
1254
- /* 110 */ "document",
1255
- /* 111 */ "print",
1256
- /* 112 */ "prlist",
1257
- /* 113 */ "pritem",
1258
- /* 114 */ "prsep",
1259
- /* 115 */ "attribute_list",
1260
- /* 116 */ "savelist",
1261
- /* 117 */ "alist",
1262
- /* 118 */ "attribute",
1263
- /* 119 */ "go",
1264
- /* 120 */ "boolproperty",
1265
- /* 121 */ "withclause",
1266
- /* 122 */ "between",
1208
+ /* 14 */ "ASSERT",
1209
+ /* 15 */ "LP",
1210
+ /* 16 */ "EQ",
1211
+ /* 17 */ "RP",
1212
+ /* 18 */ "FILL",
1213
+ /* 19 */ "COLOR",
1214
+ /* 20 */ "THICKNESS",
1215
+ /* 21 */ "PRINT",
1216
+ /* 22 */ "STRING",
1217
+ /* 23 */ "COMMA",
1218
+ /* 24 */ "CLASSNAME",
1219
+ /* 25 */ "LB",
1220
+ /* 26 */ "RB",
1221
+ /* 27 */ "UP",
1222
+ /* 28 */ "DOWN",
1223
+ /* 29 */ "LEFT",
1224
+ /* 30 */ "RIGHT",
1225
+ /* 31 */ "CLOSE",
1226
+ /* 32 */ "CHOP",
1227
+ /* 33 */ "FROM",
1228
+ /* 34 */ "TO",
1229
+ /* 35 */ "THEN",
1230
+ /* 36 */ "HEADING",
1231
+ /* 37 */ "GO",
1232
+ /* 38 */ "AT",
1233
+ /* 39 */ "WITH",
1234
+ /* 40 */ "SAME",
1235
+ /* 41 */ "AS",
1236
+ /* 42 */ "FIT",
1237
+ /* 43 */ "BEHIND",
1238
+ /* 44 */ "UNTIL",
1239
+ /* 45 */ "EVEN",
1240
+ /* 46 */ "DOT_E",
1241
+ /* 47 */ "HEIGHT",
1242
+ /* 48 */ "WIDTH",
1243
+ /* 49 */ "RADIUS",
1244
+ /* 50 */ "DIAMETER",
1245
+ /* 51 */ "DOTTED",
1246
+ /* 52 */ "DASHED",
1247
+ /* 53 */ "CW",
1248
+ /* 54 */ "CCW",
1249
+ /* 55 */ "LARROW",
1250
+ /* 56 */ "RARROW",
1251
+ /* 57 */ "LRARROW",
1252
+ /* 58 */ "INVIS",
1253
+ /* 59 */ "THICK",
1254
+ /* 60 */ "THIN",
1255
+ /* 61 */ "CENTER",
1256
+ /* 62 */ "LJUST",
1257
+ /* 63 */ "RJUST",
1258
+ /* 64 */ "ABOVE",
1259
+ /* 65 */ "BELOW",
1260
+ /* 66 */ "ITALIC",
1261
+ /* 67 */ "BOLD",
1262
+ /* 68 */ "ALIGNED",
1263
+ /* 69 */ "BIG",
1264
+ /* 70 */ "SMALL",
1265
+ /* 71 */ "AND",
1266
+ /* 72 */ "LT",
1267
+ /* 73 */ "GT",
1268
+ /* 74 */ "WAY",
1269
+ /* 75 */ "BETWEEN",
1270
+ /* 76 */ "THE",
1271
+ /* 77 */ "NTH",
1272
+ /* 78 */ "VERTEX",
1273
+ /* 79 */ "TOP",
1274
+ /* 80 */ "BOTTOM",
1275
+ /* 81 */ "START",
1276
+ /* 82 */ "END",
1277
+ /* 83 */ "IN",
1278
+ /* 84 */ "DOT_U",
1279
+ /* 85 */ "LAST",
1280
+ /* 86 */ "NUMBER",
1281
+ /* 87 */ "FUNC1",
1282
+ /* 88 */ "FUNC2",
1283
+ /* 89 */ "DOT_XY",
1284
+ /* 90 */ "X",
1285
+ /* 91 */ "Y",
1286
+ /* 92 */ "DOT_L",
1287
+ /* 93 */ "element_list",
1288
+ /* 94 */ "element",
1289
+ /* 95 */ "unnamed_element",
1290
+ /* 96 */ "basetype",
1291
+ /* 97 */ "expr",
1292
+ /* 98 */ "numproperty",
1293
+ /* 99 */ "edge",
1294
+ /* 100 */ "direction",
1295
+ /* 101 */ "dashproperty",
1296
+ /* 102 */ "colorproperty",
1297
+ /* 103 */ "locproperty",
1298
+ /* 104 */ "position",
1299
+ /* 105 */ "place",
1300
+ /* 106 */ "object",
1301
+ /* 107 */ "objectname",
1302
+ /* 108 */ "nth",
1303
+ /* 109 */ "textposition",
1304
+ /* 110 */ "rvalue",
1305
+ /* 111 */ "lvalue",
1306
+ /* 112 */ "even",
1307
+ /* 113 */ "document",
1308
+ /* 114 */ "print",
1309
+ /* 115 */ "prlist",
1310
+ /* 116 */ "pritem",
1311
+ /* 117 */ "prsep",
1312
+ /* 118 */ "attribute_list",
1313
+ /* 119 */ "savelist",
1314
+ /* 120 */ "alist",
1315
+ /* 121 */ "attribute",
1316
+ /* 122 */ "go",
1317
+ /* 123 */ "boolproperty",
1318
+ /* 124 */ "withclause",
1319
+ /* 125 */ "between",
1320
+ /* 126 */ "place2",
12671321
};
12681322
#endif /* defined(YYCOVERAGE) || !defined(NDEBUG) */
12691323
12701324
#ifndef NDEBUG
12711325
/* For tracing reduce actions, the names of all rules are required.
@@ -1279,158 +1333,151 @@
12791333
/* 5 */ "element ::= lvalue ASSIGN rvalue",
12801334
/* 6 */ "element ::= PLACENAME COLON unnamed_element",
12811335
/* 7 */ "element ::= PLACENAME COLON position",
12821336
/* 8 */ "element ::= unnamed_element",
12831337
/* 9 */ "element ::= print prlist",
1284
- /* 10 */ "rvalue ::= PLACENAME",
1285
- /* 11 */ "pritem ::= FILL",
1286
- /* 12 */ "pritem ::= COLOR",
1287
- /* 13 */ "pritem ::= THICKNESS",
1288
- /* 14 */ "pritem ::= rvalue",
1289
- /* 15 */ "pritem ::= STRING",
1290
- /* 16 */ "prsep ::= COMMA",
1291
- /* 17 */ "unnamed_element ::= basetype attribute_list",
1292
- /* 18 */ "basetype ::= CLASSNAME",
1293
- /* 19 */ "basetype ::= STRING textposition",
1294
- /* 20 */ "basetype ::= LB savelist element_list RB",
1295
- /* 21 */ "savelist ::=",
1296
- /* 22 */ "attribute_list ::= expr",
1297
- /* 23 */ "attribute_list ::= expr PERCENT",
1298
- /* 24 */ "attribute ::= numproperty expr PERCENT",
1299
- /* 25 */ "attribute ::= numproperty expr",
1300
- /* 26 */ "attribute ::= dashproperty expr",
1301
- /* 27 */ "attribute ::= dashproperty",
1302
- /* 28 */ "attribute ::= colorproperty rvalue",
1303
- /* 29 */ "attribute ::= go direction expr PERCENT",
1304
- /* 30 */ "attribute ::= go direction expr",
1305
- /* 31 */ "attribute ::= go direction",
1306
- /* 32 */ "attribute ::= go direction even position",
1307
- /* 33 */ "attribute ::= CLOSE",
1308
- /* 34 */ "attribute ::= CHOP",
1309
- /* 35 */ "attribute ::= FROM position",
1310
- /* 36 */ "attribute ::= TO position",
1311
- /* 37 */ "attribute ::= THEN",
1312
- /* 38 */ "attribute ::= THEN expr HEADING expr",
1313
- /* 39 */ "attribute ::= THEN HEADING expr",
1314
- /* 40 */ "attribute ::= THEN expr EDGEPT",
1315
- /* 41 */ "attribute ::= THEN EDGEPT",
1316
- /* 42 */ "attribute ::= GO expr HEADING expr",
1317
- /* 43 */ "attribute ::= GO HEADING expr",
1318
- /* 44 */ "attribute ::= GO expr EDGEPT",
1319
- /* 45 */ "attribute ::= GO EDGEPT",
1320
- /* 46 */ "attribute ::= AT position",
1321
- /* 47 */ "attribute ::= SAME",
1322
- /* 48 */ "attribute ::= SAME AS object",
1323
- /* 49 */ "attribute ::= STRING textposition",
1324
- /* 50 */ "attribute ::= FIT",
1325
- /* 51 */ "attribute ::= BEHIND object",
1326
- /* 52 */ "withclause ::= DOT_E edge AT position",
1327
- /* 53 */ "withclause ::= edge AT position",
1328
- /* 54 */ "numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS",
1329
- /* 55 */ "boolproperty ::= CW",
1330
- /* 56 */ "boolproperty ::= CCW",
1331
- /* 57 */ "boolproperty ::= LARROW",
1332
- /* 58 */ "boolproperty ::= RARROW",
1333
- /* 59 */ "boolproperty ::= LRARROW",
1334
- /* 60 */ "boolproperty ::= INVIS",
1335
- /* 61 */ "boolproperty ::= THICK",
1336
- /* 62 */ "boolproperty ::= THIN",
1337
- /* 63 */ "textposition ::=",
1338
- /* 64 */ "textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL",
1339
- /* 65 */ "position ::= expr COMMA expr",
1340
- /* 66 */ "position ::= place PLUS expr COMMA expr",
1341
- /* 67 */ "position ::= place MINUS expr COMMA expr",
1342
- /* 68 */ "position ::= place PLUS LP expr COMMA expr RP",
1343
- /* 69 */ "position ::= place MINUS LP expr COMMA expr RP",
1344
- /* 70 */ "position ::= LP position COMMA position RP",
1345
- /* 71 */ "position ::= LP position RP",
1346
- /* 72 */ "position ::= expr between position AND position",
1347
- /* 73 */ "position ::= expr LT position COMMA position GT",
1348
- /* 74 */ "position ::= expr ABOVE position",
1349
- /* 75 */ "position ::= expr BELOW position",
1350
- /* 76 */ "position ::= expr LEFT OF position",
1351
- /* 77 */ "position ::= expr RIGHT OF position",
1352
- /* 78 */ "position ::= expr EDGEPT OF position",
1353
- /* 79 */ "position ::= expr HEADING expr FROM position",
1354
- /* 80 */ "place ::= object",
1355
- /* 81 */ "place ::= object DOT_E edge",
1356
- /* 82 */ "place ::= object DOT_L START",
1357
- /* 83 */ "place ::= object DOT_L END",
1358
- /* 84 */ "place ::= START OF object",
1359
- /* 85 */ "place ::= END OF object",
1360
- /* 86 */ "place ::= edge OF object",
1361
- /* 87 */ "place ::= NTH VERTEX OF object",
1362
- /* 88 */ "object ::= nth",
1363
- /* 89 */ "object ::= nth OF|IN object",
1364
- /* 90 */ "objectname ::= PLACENAME",
1365
- /* 91 */ "objectname ::= objectname DOT_U PLACENAME",
1366
- /* 92 */ "nth ::= NTH CLASSNAME",
1367
- /* 93 */ "nth ::= NTH LAST CLASSNAME",
1368
- /* 94 */ "nth ::= LAST CLASSNAME",
1369
- /* 95 */ "nth ::= LAST",
1370
- /* 96 */ "nth ::= NTH LB RB",
1371
- /* 97 */ "nth ::= NTH LAST LB RB",
1372
- /* 98 */ "nth ::= LAST LB RB",
1373
- /* 99 */ "expr ::= expr PLUS expr",
1374
- /* 100 */ "expr ::= expr MINUS expr",
1375
- /* 101 */ "expr ::= expr STAR expr",
1376
- /* 102 */ "expr ::= expr SLASH expr",
1377
- /* 103 */ "expr ::= MINUS expr",
1378
- /* 104 */ "expr ::= PLUS expr",
1379
- /* 105 */ "expr ::= LP expr RP",
1380
- /* 106 */ "expr ::= NUMBER",
1381
- /* 107 */ "expr ::= ID",
1382
- /* 108 */ "expr ::= FUNC1 LP expr RP",
1383
- /* 109 */ "expr ::= FUNC2 LP expr COMMA expr RP",
1384
- /* 110 */ "expr ::= object DOT_L locproperty",
1385
- /* 111 */ "expr ::= object DOT_L numproperty",
1386
- /* 112 */ "expr ::= object DOT_L dashproperty",
1387
- /* 113 */ "expr ::= object DOT_L colorproperty",
1388
- /* 114 */ "expr ::= object DOT_E edge DOT_L X",
1389
- /* 115 */ "expr ::= object DOT_E edge DOT_L Y",
1390
- /* 116 */ "expr ::= LP locproperty OF object RP",
1391
- /* 117 */ "expr ::= LP dashproperty OF object RP",
1392
- /* 118 */ "expr ::= LP numproperty OF object RP",
1393
- /* 119 */ "expr ::= LP colorproperty OF object RP",
1394
- /* 120 */ "expr ::= NTH VERTEX OF object DOT_L X",
1395
- /* 121 */ "expr ::= NTH VERTEX OF object DOT_L Y",
1396
- /* 122 */ "lvalue ::= ID",
1397
- /* 123 */ "lvalue ::= FILL",
1398
- /* 124 */ "lvalue ::= COLOR",
1399
- /* 125 */ "lvalue ::= THICKNESS",
1400
- /* 126 */ "rvalue ::= expr",
1401
- /* 127 */ "print ::= PRINT",
1402
- /* 128 */ "prlist ::= pritem",
1403
- /* 129 */ "prlist ::= prlist prsep pritem",
1404
- /* 130 */ "direction ::= UP",
1405
- /* 131 */ "direction ::= DOWN",
1406
- /* 132 */ "direction ::= LEFT",
1407
- /* 133 */ "direction ::= RIGHT",
1408
- /* 134 */ "attribute_list ::= alist",
1409
- /* 135 */ "alist ::=",
1410
- /* 136 */ "alist ::= alist attribute",
1411
- /* 137 */ "attribute ::= boolproperty",
1412
- /* 138 */ "attribute ::= WITH withclause",
1413
- /* 139 */ "go ::= GO",
1414
- /* 140 */ "go ::=",
1415
- /* 141 */ "even ::= UNTIL EVEN WITH",
1416
- /* 142 */ "even ::= EVEN WITH",
1417
- /* 143 */ "dashproperty ::= DOTTED",
1418
- /* 144 */ "dashproperty ::= DASHED",
1419
- /* 145 */ "colorproperty ::= FILL",
1420
- /* 146 */ "colorproperty ::= COLOR",
1421
- /* 147 */ "position ::= place",
1422
- /* 148 */ "between ::= WAY BETWEEN",
1423
- /* 149 */ "between ::= BETWEEN",
1424
- /* 150 */ "between ::= OF THE WAY BETWEEN",
1425
- /* 151 */ "object ::= objectname",
1426
- /* 152 */ "locproperty ::= X|Y",
1427
- /* 153 */ "edge ::= EDGEPT",
1428
- /* 154 */ "edge ::= TOP",
1429
- /* 155 */ "edge ::= BOTTOM",
1430
- /* 156 */ "edge ::= LEFT",
1431
- /* 157 */ "edge ::= RIGHT",
1338
+ /* 10 */ "element ::= ASSERT LP expr EQ expr RP",
1339
+ /* 11 */ "element ::= ASSERT LP place EQ place RP",
1340
+ /* 12 */ "rvalue ::= PLACENAME",
1341
+ /* 13 */ "pritem ::= FILL",
1342
+ /* 14 */ "pritem ::= COLOR",
1343
+ /* 15 */ "pritem ::= THICKNESS",
1344
+ /* 16 */ "pritem ::= rvalue",
1345
+ /* 17 */ "pritem ::= STRING",
1346
+ /* 18 */ "prsep ::= COMMA",
1347
+ /* 19 */ "unnamed_element ::= basetype attribute_list",
1348
+ /* 20 */ "basetype ::= CLASSNAME",
1349
+ /* 21 */ "basetype ::= STRING textposition",
1350
+ /* 22 */ "basetype ::= LB savelist element_list RB",
1351
+ /* 23 */ "savelist ::=",
1352
+ /* 24 */ "attribute_list ::= expr alist",
1353
+ /* 25 */ "attribute_list ::= expr PERCENT alist",
1354
+ /* 26 */ "attribute ::= numproperty expr PERCENT",
1355
+ /* 27 */ "attribute ::= numproperty expr",
1356
+ /* 28 */ "attribute ::= dashproperty expr",
1357
+ /* 29 */ "attribute ::= dashproperty",
1358
+ /* 30 */ "attribute ::= colorproperty rvalue",
1359
+ /* 31 */ "attribute ::= go direction expr PERCENT",
1360
+ /* 32 */ "attribute ::= go direction expr",
1361
+ /* 33 */ "attribute ::= go direction",
1362
+ /* 34 */ "attribute ::= go direction even position",
1363
+ /* 35 */ "attribute ::= CLOSE",
1364
+ /* 36 */ "attribute ::= CHOP",
1365
+ /* 37 */ "attribute ::= FROM position",
1366
+ /* 38 */ "attribute ::= TO position",
1367
+ /* 39 */ "attribute ::= THEN",
1368
+ /* 40 */ "attribute ::= THEN expr HEADING expr",
1369
+ /* 41 */ "attribute ::= THEN HEADING expr",
1370
+ /* 42 */ "attribute ::= THEN expr EDGEPT",
1371
+ /* 43 */ "attribute ::= THEN EDGEPT",
1372
+ /* 44 */ "attribute ::= GO expr HEADING expr",
1373
+ /* 45 */ "attribute ::= GO HEADING expr",
1374
+ /* 46 */ "attribute ::= GO expr EDGEPT",
1375
+ /* 47 */ "attribute ::= GO EDGEPT",
1376
+ /* 48 */ "attribute ::= AT position",
1377
+ /* 49 */ "attribute ::= SAME",
1378
+ /* 50 */ "attribute ::= SAME AS object",
1379
+ /* 51 */ "attribute ::= STRING textposition",
1380
+ /* 52 */ "attribute ::= FIT",
1381
+ /* 53 */ "attribute ::= BEHIND object",
1382
+ /* 54 */ "withclause ::= DOT_E edge AT position",
1383
+ /* 55 */ "withclause ::= edge AT position",
1384
+ /* 56 */ "numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS",
1385
+ /* 57 */ "boolproperty ::= CW",
1386
+ /* 58 */ "boolproperty ::= CCW",
1387
+ /* 59 */ "boolproperty ::= LARROW",
1388
+ /* 60 */ "boolproperty ::= RARROW",
1389
+ /* 61 */ "boolproperty ::= LRARROW",
1390
+ /* 62 */ "boolproperty ::= INVIS",
1391
+ /* 63 */ "boolproperty ::= THICK",
1392
+ /* 64 */ "boolproperty ::= THIN",
1393
+ /* 65 */ "textposition ::=",
1394
+ /* 66 */ "textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL",
1395
+ /* 67 */ "position ::= expr COMMA expr",
1396
+ /* 68 */ "position ::= place PLUS expr COMMA expr",
1397
+ /* 69 */ "position ::= place MINUS expr COMMA expr",
1398
+ /* 70 */ "position ::= place PLUS LP expr COMMA expr RP",
1399
+ /* 71 */ "position ::= place MINUS LP expr COMMA expr RP",
1400
+ /* 72 */ "position ::= LP position COMMA position RP",
1401
+ /* 73 */ "position ::= LP position RP",
1402
+ /* 74 */ "position ::= expr between position AND position",
1403
+ /* 75 */ "position ::= expr LT position COMMA position GT",
1404
+ /* 76 */ "position ::= expr ABOVE position",
1405
+ /* 77 */ "position ::= expr BELOW position",
1406
+ /* 78 */ "position ::= expr LEFT OF position",
1407
+ /* 79 */ "position ::= expr RIGHT OF position",
1408
+ /* 80 */ "position ::= expr EDGEPT OF position",
1409
+ /* 81 */ "position ::= expr HEADING expr FROM position",
1410
+ /* 82 */ "place ::= edge OF object",
1411
+ /* 83 */ "place2 ::= object",
1412
+ /* 84 */ "place2 ::= object DOT_E edge",
1413
+ /* 85 */ "place2 ::= NTH VERTEX OF object",
1414
+ /* 86 */ "object ::= nth",
1415
+ /* 87 */ "object ::= nth OF|IN object",
1416
+ /* 88 */ "objectname ::= PLACENAME",
1417
+ /* 89 */ "objectname ::= objectname DOT_U PLACENAME",
1418
+ /* 90 */ "nth ::= NTH CLASSNAME",
1419
+ /* 91 */ "nth ::= NTH LAST CLASSNAME",
1420
+ /* 92 */ "nth ::= LAST CLASSNAME",
1421
+ /* 93 */ "nth ::= LAST",
1422
+ /* 94 */ "nth ::= NTH LB RB",
1423
+ /* 95 */ "nth ::= NTH LAST LB RB",
1424
+ /* 96 */ "nth ::= LAST LB RB",
1425
+ /* 97 */ "expr ::= expr PLUS expr",
1426
+ /* 98 */ "expr ::= expr MINUS expr",
1427
+ /* 99 */ "expr ::= expr STAR expr",
1428
+ /* 100 */ "expr ::= expr SLASH expr",
1429
+ /* 101 */ "expr ::= MINUS expr",
1430
+ /* 102 */ "expr ::= PLUS expr",
1431
+ /* 103 */ "expr ::= LP expr RP",
1432
+ /* 104 */ "expr ::= NUMBER",
1433
+ /* 105 */ "expr ::= ID",
1434
+ /* 106 */ "expr ::= FUNC1 LP expr RP",
1435
+ /* 107 */ "expr ::= FUNC2 LP expr COMMA expr RP",
1436
+ /* 108 */ "expr ::= place2 DOT_XY X",
1437
+ /* 109 */ "expr ::= place2 DOT_XY Y",
1438
+ /* 110 */ "expr ::= object DOT_L numproperty",
1439
+ /* 111 */ "expr ::= object DOT_L dashproperty",
1440
+ /* 112 */ "expr ::= object DOT_L colorproperty",
1441
+ /* 113 */ "lvalue ::= ID",
1442
+ /* 114 */ "lvalue ::= FILL",
1443
+ /* 115 */ "lvalue ::= COLOR",
1444
+ /* 116 */ "lvalue ::= THICKNESS",
1445
+ /* 117 */ "rvalue ::= expr",
1446
+ /* 118 */ "print ::= PRINT",
1447
+ /* 119 */ "prlist ::= pritem",
1448
+ /* 120 */ "prlist ::= prlist prsep pritem",
1449
+ /* 121 */ "direction ::= UP",
1450
+ /* 122 */ "direction ::= DOWN",
1451
+ /* 123 */ "direction ::= LEFT",
1452
+ /* 124 */ "direction ::= RIGHT",
1453
+ /* 125 */ "attribute_list ::= alist",
1454
+ /* 126 */ "alist ::=",
1455
+ /* 127 */ "alist ::= alist attribute",
1456
+ /* 128 */ "attribute ::= boolproperty",
1457
+ /* 129 */ "attribute ::= WITH withclause",
1458
+ /* 130 */ "go ::= GO",
1459
+ /* 131 */ "go ::=",
1460
+ /* 132 */ "even ::= UNTIL EVEN WITH",
1461
+ /* 133 */ "even ::= EVEN WITH",
1462
+ /* 134 */ "dashproperty ::= DOTTED",
1463
+ /* 135 */ "dashproperty ::= DASHED",
1464
+ /* 136 */ "colorproperty ::= FILL",
1465
+ /* 137 */ "colorproperty ::= COLOR",
1466
+ /* 138 */ "position ::= place",
1467
+ /* 139 */ "between ::= WAY BETWEEN",
1468
+ /* 140 */ "between ::= BETWEEN",
1469
+ /* 141 */ "between ::= OF THE WAY BETWEEN",
1470
+ /* 142 */ "place ::= place2",
1471
+ /* 143 */ "edge ::= EDGEPT",
1472
+ /* 144 */ "edge ::= TOP",
1473
+ /* 145 */ "edge ::= BOTTOM",
1474
+ /* 146 */ "edge ::= START",
1475
+ /* 147 */ "edge ::= END",
1476
+ /* 148 */ "edge ::= RIGHT",
1477
+ /* 149 */ "edge ::= LEFT",
1478
+ /* 150 */ "object ::= objectname",
14321479
};
14331480
#endif /* NDEBUG */
14341481
14351482
14361483
#if YYSTACKDEPTH<=0
@@ -1552,24 +1599,24 @@
15521599
** Note: during a reduce, the only symbols destroyed are those
15531600
** which appear on the RHS of the rule, but which are *not* used
15541601
** inside the C code.
15551602
*/
15561603
/********* Begin destructor definitions ***************************************/
1557
- case 90: /* element_list */
1558
-{
1559
-#line 445 "pikchr.y"
1560
-pik_elist_free(p,(yypminor->yy80));
1561
-#line 1586 "pikchr.c"
1562
-}
1563
- break;
1564
- case 91: /* element */
1565
- case 92: /* unnamed_element */
1566
- case 93: /* basetype */
1604
+ case 93: /* element_list */
15671605
{
15681606
#line 447 "pikchr.y"
1569
-pik_elem_free(p,(yypminor->yy174));
1570
-#line 1595 "pikchr.c"
1607
+pik_elist_free(p,(yypminor->yy42));
1608
+#line 1633 "pikchr.c"
1609
+}
1610
+ break;
1611
+ case 94: /* element */
1612
+ case 95: /* unnamed_element */
1613
+ case 96: /* basetype */
1614
+{
1615
+#line 449 "pikchr.y"
1616
+pik_elem_free(p,(yypminor->yy118));
1617
+#line 1642 "pikchr.c"
15711618
}
15721619
break;
15731620
/********* End destructor definitions *****************************************/
15741621
default: break; /* If no destructor action specified: do nothing */
15751622
}
@@ -1783,14 +1830,14 @@
17831830
#endif
17841831
while( yypParser->yytos>yypParser->yystack ) yy_pop_parser_stack(yypParser);
17851832
/* Here code is inserted which will execute if the parser
17861833
** stack every overflows */
17871834
/******** Begin %stack_overflow code ******************************************/
1788
-#line 476 "pikchr.y"
1835
+#line 478 "pikchr.y"
17891836
17901837
pik_error(p, 0, "parser stack overflow");
1791
-#line 1816 "pikchr.c"
1838
+#line 1863 "pikchr.c"
17921839
/******** End %stack_overflow code ********************************************/
17931840
pik_parserARG_STORE /* Suppress warning about unused %extra_argument var */
17941841
pik_parserCTX_STORE
17951842
}
17961843
@@ -1858,168 +1905,161 @@
18581905
}
18591906
18601907
/* For rule J, yyRuleInfoLhs[J] contains the symbol on the left-hand side
18611908
** of that rule */
18621909
static const YYCODETYPE yyRuleInfoLhs[] = {
1863
- 110, /* (0) document ::= element_list */
1864
- 90, /* (1) element_list ::= element */
1865
- 90, /* (2) element_list ::= element_list EOL element */
1866
- 91, /* (3) element ::= */
1867
- 91, /* (4) element ::= direction */
1868
- 91, /* (5) element ::= lvalue ASSIGN rvalue */
1869
- 91, /* (6) element ::= PLACENAME COLON unnamed_element */
1870
- 91, /* (7) element ::= PLACENAME COLON position */
1871
- 91, /* (8) element ::= unnamed_element */
1872
- 91, /* (9) element ::= print prlist */
1873
- 107, /* (10) rvalue ::= PLACENAME */
1874
- 113, /* (11) pritem ::= FILL */
1875
- 113, /* (12) pritem ::= COLOR */
1876
- 113, /* (13) pritem ::= THICKNESS */
1877
- 113, /* (14) pritem ::= rvalue */
1878
- 113, /* (15) pritem ::= STRING */
1879
- 114, /* (16) prsep ::= COMMA */
1880
- 92, /* (17) unnamed_element ::= basetype attribute_list */
1881
- 93, /* (18) basetype ::= CLASSNAME */
1882
- 93, /* (19) basetype ::= STRING textposition */
1883
- 93, /* (20) basetype ::= LB savelist element_list RB */
1884
- 116, /* (21) savelist ::= */
1885
- 115, /* (22) attribute_list ::= expr */
1886
- 115, /* (23) attribute_list ::= expr PERCENT */
1887
- 118, /* (24) attribute ::= numproperty expr PERCENT */
1888
- 118, /* (25) attribute ::= numproperty expr */
1889
- 118, /* (26) attribute ::= dashproperty expr */
1890
- 118, /* (27) attribute ::= dashproperty */
1891
- 118, /* (28) attribute ::= colorproperty rvalue */
1892
- 118, /* (29) attribute ::= go direction expr PERCENT */
1893
- 118, /* (30) attribute ::= go direction expr */
1894
- 118, /* (31) attribute ::= go direction */
1895
- 118, /* (32) attribute ::= go direction even position */
1896
- 118, /* (33) attribute ::= CLOSE */
1897
- 118, /* (34) attribute ::= CHOP */
1898
- 118, /* (35) attribute ::= FROM position */
1899
- 118, /* (36) attribute ::= TO position */
1900
- 118, /* (37) attribute ::= THEN */
1901
- 118, /* (38) attribute ::= THEN expr HEADING expr */
1902
- 118, /* (39) attribute ::= THEN HEADING expr */
1903
- 118, /* (40) attribute ::= THEN expr EDGEPT */
1904
- 118, /* (41) attribute ::= THEN EDGEPT */
1905
- 118, /* (42) attribute ::= GO expr HEADING expr */
1906
- 118, /* (43) attribute ::= GO HEADING expr */
1907
- 118, /* (44) attribute ::= GO expr EDGEPT */
1908
- 118, /* (45) attribute ::= GO EDGEPT */
1909
- 118, /* (46) attribute ::= AT position */
1910
- 118, /* (47) attribute ::= SAME */
1911
- 118, /* (48) attribute ::= SAME AS object */
1912
- 118, /* (49) attribute ::= STRING textposition */
1913
- 118, /* (50) attribute ::= FIT */
1914
- 118, /* (51) attribute ::= BEHIND object */
1915
- 121, /* (52) withclause ::= DOT_E edge AT position */
1916
- 121, /* (53) withclause ::= edge AT position */
1917
- 95, /* (54) numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
1918
- 120, /* (55) boolproperty ::= CW */
1919
- 120, /* (56) boolproperty ::= CCW */
1920
- 120, /* (57) boolproperty ::= LARROW */
1921
- 120, /* (58) boolproperty ::= RARROW */
1922
- 120, /* (59) boolproperty ::= LRARROW */
1923
- 120, /* (60) boolproperty ::= INVIS */
1924
- 120, /* (61) boolproperty ::= THICK */
1925
- 120, /* (62) boolproperty ::= THIN */
1926
- 106, /* (63) textposition ::= */
1927
- 106, /* (64) textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */
1928
- 101, /* (65) position ::= expr COMMA expr */
1929
- 101, /* (66) position ::= place PLUS expr COMMA expr */
1930
- 101, /* (67) position ::= place MINUS expr COMMA expr */
1931
- 101, /* (68) position ::= place PLUS LP expr COMMA expr RP */
1932
- 101, /* (69) position ::= place MINUS LP expr COMMA expr RP */
1933
- 101, /* (70) position ::= LP position COMMA position RP */
1934
- 101, /* (71) position ::= LP position RP */
1935
- 101, /* (72) position ::= expr between position AND position */
1936
- 101, /* (73) position ::= expr LT position COMMA position GT */
1937
- 101, /* (74) position ::= expr ABOVE position */
1938
- 101, /* (75) position ::= expr BELOW position */
1939
- 101, /* (76) position ::= expr LEFT OF position */
1940
- 101, /* (77) position ::= expr RIGHT OF position */
1941
- 101, /* (78) position ::= expr EDGEPT OF position */
1942
- 101, /* (79) position ::= expr HEADING expr FROM position */
1943
- 102, /* (80) place ::= object */
1944
- 102, /* (81) place ::= object DOT_E edge */
1945
- 102, /* (82) place ::= object DOT_L START */
1946
- 102, /* (83) place ::= object DOT_L END */
1947
- 102, /* (84) place ::= START OF object */
1948
- 102, /* (85) place ::= END OF object */
1949
- 102, /* (86) place ::= edge OF object */
1950
- 102, /* (87) place ::= NTH VERTEX OF object */
1951
- 103, /* (88) object ::= nth */
1952
- 103, /* (89) object ::= nth OF|IN object */
1953
- 104, /* (90) objectname ::= PLACENAME */
1954
- 104, /* (91) objectname ::= objectname DOT_U PLACENAME */
1955
- 105, /* (92) nth ::= NTH CLASSNAME */
1956
- 105, /* (93) nth ::= NTH LAST CLASSNAME */
1957
- 105, /* (94) nth ::= LAST CLASSNAME */
1958
- 105, /* (95) nth ::= LAST */
1959
- 105, /* (96) nth ::= NTH LB RB */
1960
- 105, /* (97) nth ::= NTH LAST LB RB */
1961
- 105, /* (98) nth ::= LAST LB RB */
1962
- 94, /* (99) expr ::= expr PLUS expr */
1963
- 94, /* (100) expr ::= expr MINUS expr */
1964
- 94, /* (101) expr ::= expr STAR expr */
1965
- 94, /* (102) expr ::= expr SLASH expr */
1966
- 94, /* (103) expr ::= MINUS expr */
1967
- 94, /* (104) expr ::= PLUS expr */
1968
- 94, /* (105) expr ::= LP expr RP */
1969
- 94, /* (106) expr ::= NUMBER */
1970
- 94, /* (107) expr ::= ID */
1971
- 94, /* (108) expr ::= FUNC1 LP expr RP */
1972
- 94, /* (109) expr ::= FUNC2 LP expr COMMA expr RP */
1973
- 94, /* (110) expr ::= object DOT_L locproperty */
1974
- 94, /* (111) expr ::= object DOT_L numproperty */
1975
- 94, /* (112) expr ::= object DOT_L dashproperty */
1976
- 94, /* (113) expr ::= object DOT_L colorproperty */
1977
- 94, /* (114) expr ::= object DOT_E edge DOT_L X */
1978
- 94, /* (115) expr ::= object DOT_E edge DOT_L Y */
1979
- 94, /* (116) expr ::= LP locproperty OF object RP */
1980
- 94, /* (117) expr ::= LP dashproperty OF object RP */
1981
- 94, /* (118) expr ::= LP numproperty OF object RP */
1982
- 94, /* (119) expr ::= LP colorproperty OF object RP */
1983
- 94, /* (120) expr ::= NTH VERTEX OF object DOT_L X */
1984
- 94, /* (121) expr ::= NTH VERTEX OF object DOT_L Y */
1985
- 108, /* (122) lvalue ::= ID */
1986
- 108, /* (123) lvalue ::= FILL */
1987
- 108, /* (124) lvalue ::= COLOR */
1988
- 108, /* (125) lvalue ::= THICKNESS */
1989
- 107, /* (126) rvalue ::= expr */
1990
- 111, /* (127) print ::= PRINT */
1991
- 112, /* (128) prlist ::= pritem */
1992
- 112, /* (129) prlist ::= prlist prsep pritem */
1993
- 97, /* (130) direction ::= UP */
1994
- 97, /* (131) direction ::= DOWN */
1995
- 97, /* (132) direction ::= LEFT */
1996
- 97, /* (133) direction ::= RIGHT */
1997
- 115, /* (134) attribute_list ::= alist */
1998
- 117, /* (135) alist ::= */
1999
- 117, /* (136) alist ::= alist attribute */
2000
- 118, /* (137) attribute ::= boolproperty */
2001
- 118, /* (138) attribute ::= WITH withclause */
2002
- 119, /* (139) go ::= GO */
2003
- 119, /* (140) go ::= */
2004
- 109, /* (141) even ::= UNTIL EVEN WITH */
2005
- 109, /* (142) even ::= EVEN WITH */
2006
- 98, /* (143) dashproperty ::= DOTTED */
2007
- 98, /* (144) dashproperty ::= DASHED */
2008
- 99, /* (145) colorproperty ::= FILL */
2009
- 99, /* (146) colorproperty ::= COLOR */
2010
- 101, /* (147) position ::= place */
2011
- 122, /* (148) between ::= WAY BETWEEN */
2012
- 122, /* (149) between ::= BETWEEN */
2013
- 122, /* (150) between ::= OF THE WAY BETWEEN */
2014
- 103, /* (151) object ::= objectname */
2015
- 100, /* (152) locproperty ::= X|Y */
2016
- 96, /* (153) edge ::= EDGEPT */
2017
- 96, /* (154) edge ::= TOP */
2018
- 96, /* (155) edge ::= BOTTOM */
2019
- 96, /* (156) edge ::= LEFT */
2020
- 96, /* (157) edge ::= RIGHT */
1910
+ 113, /* (0) document ::= element_list */
1911
+ 93, /* (1) element_list ::= element */
1912
+ 93, /* (2) element_list ::= element_list EOL element */
1913
+ 94, /* (3) element ::= */
1914
+ 94, /* (4) element ::= direction */
1915
+ 94, /* (5) element ::= lvalue ASSIGN rvalue */
1916
+ 94, /* (6) element ::= PLACENAME COLON unnamed_element */
1917
+ 94, /* (7) element ::= PLACENAME COLON position */
1918
+ 94, /* (8) element ::= unnamed_element */
1919
+ 94, /* (9) element ::= print prlist */
1920
+ 94, /* (10) element ::= ASSERT LP expr EQ expr RP */
1921
+ 94, /* (11) element ::= ASSERT LP place EQ place RP */
1922
+ 110, /* (12) rvalue ::= PLACENAME */
1923
+ 116, /* (13) pritem ::= FILL */
1924
+ 116, /* (14) pritem ::= COLOR */
1925
+ 116, /* (15) pritem ::= THICKNESS */
1926
+ 116, /* (16) pritem ::= rvalue */
1927
+ 116, /* (17) pritem ::= STRING */
1928
+ 117, /* (18) prsep ::= COMMA */
1929
+ 95, /* (19) unnamed_element ::= basetype attribute_list */
1930
+ 96, /* (20) basetype ::= CLASSNAME */
1931
+ 96, /* (21) basetype ::= STRING textposition */
1932
+ 96, /* (22) basetype ::= LB savelist element_list RB */
1933
+ 119, /* (23) savelist ::= */
1934
+ 118, /* (24) attribute_list ::= expr alist */
1935
+ 118, /* (25) attribute_list ::= expr PERCENT alist */
1936
+ 121, /* (26) attribute ::= numproperty expr PERCENT */
1937
+ 121, /* (27) attribute ::= numproperty expr */
1938
+ 121, /* (28) attribute ::= dashproperty expr */
1939
+ 121, /* (29) attribute ::= dashproperty */
1940
+ 121, /* (30) attribute ::= colorproperty rvalue */
1941
+ 121, /* (31) attribute ::= go direction expr PERCENT */
1942
+ 121, /* (32) attribute ::= go direction expr */
1943
+ 121, /* (33) attribute ::= go direction */
1944
+ 121, /* (34) attribute ::= go direction even position */
1945
+ 121, /* (35) attribute ::= CLOSE */
1946
+ 121, /* (36) attribute ::= CHOP */
1947
+ 121, /* (37) attribute ::= FROM position */
1948
+ 121, /* (38) attribute ::= TO position */
1949
+ 121, /* (39) attribute ::= THEN */
1950
+ 121, /* (40) attribute ::= THEN expr HEADING expr */
1951
+ 121, /* (41) attribute ::= THEN HEADING expr */
1952
+ 121, /* (42) attribute ::= THEN expr EDGEPT */
1953
+ 121, /* (43) attribute ::= THEN EDGEPT */
1954
+ 121, /* (44) attribute ::= GO expr HEADING expr */
1955
+ 121, /* (45) attribute ::= GO HEADING expr */
1956
+ 121, /* (46) attribute ::= GO expr EDGEPT */
1957
+ 121, /* (47) attribute ::= GO EDGEPT */
1958
+ 121, /* (48) attribute ::= AT position */
1959
+ 121, /* (49) attribute ::= SAME */
1960
+ 121, /* (50) attribute ::= SAME AS object */
1961
+ 121, /* (51) attribute ::= STRING textposition */
1962
+ 121, /* (52) attribute ::= FIT */
1963
+ 121, /* (53) attribute ::= BEHIND object */
1964
+ 124, /* (54) withclause ::= DOT_E edge AT position */
1965
+ 124, /* (55) withclause ::= edge AT position */
1966
+ 98, /* (56) numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
1967
+ 123, /* (57) boolproperty ::= CW */
1968
+ 123, /* (58) boolproperty ::= CCW */
1969
+ 123, /* (59) boolproperty ::= LARROW */
1970
+ 123, /* (60) boolproperty ::= RARROW */
1971
+ 123, /* (61) boolproperty ::= LRARROW */
1972
+ 123, /* (62) boolproperty ::= INVIS */
1973
+ 123, /* (63) boolproperty ::= THICK */
1974
+ 123, /* (64) boolproperty ::= THIN */
1975
+ 109, /* (65) textposition ::= */
1976
+ 109, /* (66) textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */
1977
+ 104, /* (67) position ::= expr COMMA expr */
1978
+ 104, /* (68) position ::= place PLUS expr COMMA expr */
1979
+ 104, /* (69) position ::= place MINUS expr COMMA expr */
1980
+ 104, /* (70) position ::= place PLUS LP expr COMMA expr RP */
1981
+ 104, /* (71) position ::= place MINUS LP expr COMMA expr RP */
1982
+ 104, /* (72) position ::= LP position COMMA position RP */
1983
+ 104, /* (73) position ::= LP position RP */
1984
+ 104, /* (74) position ::= expr between position AND position */
1985
+ 104, /* (75) position ::= expr LT position COMMA position GT */
1986
+ 104, /* (76) position ::= expr ABOVE position */
1987
+ 104, /* (77) position ::= expr BELOW position */
1988
+ 104, /* (78) position ::= expr LEFT OF position */
1989
+ 104, /* (79) position ::= expr RIGHT OF position */
1990
+ 104, /* (80) position ::= expr EDGEPT OF position */
1991
+ 104, /* (81) position ::= expr HEADING expr FROM position */
1992
+ 105, /* (82) place ::= edge OF object */
1993
+ 126, /* (83) place2 ::= object */
1994
+ 126, /* (84) place2 ::= object DOT_E edge */
1995
+ 126, /* (85) place2 ::= NTH VERTEX OF object */
1996
+ 106, /* (86) object ::= nth */
1997
+ 106, /* (87) object ::= nth OF|IN object */
1998
+ 107, /* (88) objectname ::= PLACENAME */
1999
+ 107, /* (89) objectname ::= objectname DOT_U PLACENAME */
2000
+ 108, /* (90) nth ::= NTH CLASSNAME */
2001
+ 108, /* (91) nth ::= NTH LAST CLASSNAME */
2002
+ 108, /* (92) nth ::= LAST CLASSNAME */
2003
+ 108, /* (93) nth ::= LAST */
2004
+ 108, /* (94) nth ::= NTH LB RB */
2005
+ 108, /* (95) nth ::= NTH LAST LB RB */
2006
+ 108, /* (96) nth ::= LAST LB RB */
2007
+ 97, /* (97) expr ::= expr PLUS expr */
2008
+ 97, /* (98) expr ::= expr MINUS expr */
2009
+ 97, /* (99) expr ::= expr STAR expr */
2010
+ 97, /* (100) expr ::= expr SLASH expr */
2011
+ 97, /* (101) expr ::= MINUS expr */
2012
+ 97, /* (102) expr ::= PLUS expr */
2013
+ 97, /* (103) expr ::= LP expr RP */
2014
+ 97, /* (104) expr ::= NUMBER */
2015
+ 97, /* (105) expr ::= ID */
2016
+ 97, /* (106) expr ::= FUNC1 LP expr RP */
2017
+ 97, /* (107) expr ::= FUNC2 LP expr COMMA expr RP */
2018
+ 97, /* (108) expr ::= place2 DOT_XY X */
2019
+ 97, /* (109) expr ::= place2 DOT_XY Y */
2020
+ 97, /* (110) expr ::= object DOT_L numproperty */
2021
+ 97, /* (111) expr ::= object DOT_L dashproperty */
2022
+ 97, /* (112) expr ::= object DOT_L colorproperty */
2023
+ 111, /* (113) lvalue ::= ID */
2024
+ 111, /* (114) lvalue ::= FILL */
2025
+ 111, /* (115) lvalue ::= COLOR */
2026
+ 111, /* (116) lvalue ::= THICKNESS */
2027
+ 110, /* (117) rvalue ::= expr */
2028
+ 114, /* (118) print ::= PRINT */
2029
+ 115, /* (119) prlist ::= pritem */
2030
+ 115, /* (120) prlist ::= prlist prsep pritem */
2031
+ 100, /* (121) direction ::= UP */
2032
+ 100, /* (122) direction ::= DOWN */
2033
+ 100, /* (123) direction ::= LEFT */
2034
+ 100, /* (124) direction ::= RIGHT */
2035
+ 118, /* (125) attribute_list ::= alist */
2036
+ 120, /* (126) alist ::= */
2037
+ 120, /* (127) alist ::= alist attribute */
2038
+ 121, /* (128) attribute ::= boolproperty */
2039
+ 121, /* (129) attribute ::= WITH withclause */
2040
+ 122, /* (130) go ::= GO */
2041
+ 122, /* (131) go ::= */
2042
+ 112, /* (132) even ::= UNTIL EVEN WITH */
2043
+ 112, /* (133) even ::= EVEN WITH */
2044
+ 101, /* (134) dashproperty ::= DOTTED */
2045
+ 101, /* (135) dashproperty ::= DASHED */
2046
+ 102, /* (136) colorproperty ::= FILL */
2047
+ 102, /* (137) colorproperty ::= COLOR */
2048
+ 104, /* (138) position ::= place */
2049
+ 125, /* (139) between ::= WAY BETWEEN */
2050
+ 125, /* (140) between ::= BETWEEN */
2051
+ 125, /* (141) between ::= OF THE WAY BETWEEN */
2052
+ 105, /* (142) place ::= place2 */
2053
+ 99, /* (143) edge ::= EDGEPT */
2054
+ 99, /* (144) edge ::= TOP */
2055
+ 99, /* (145) edge ::= BOTTOM */
2056
+ 99, /* (146) edge ::= START */
2057
+ 99, /* (147) edge ::= END */
2058
+ 99, /* (148) edge ::= RIGHT */
2059
+ 99, /* (149) edge ::= LEFT */
2060
+ 106, /* (150) object ::= objectname */
20212061
};
20222062
20232063
/* For rule J, yyRuleInfoNRhs[J] contains the negative of the number
20242064
** of symbols on the right-hand side of that rule. */
20252065
static const signed char yyRuleInfoNRhs[] = {
@@ -2031,158 +2071,151 @@
20312071
-3, /* (5) element ::= lvalue ASSIGN rvalue */
20322072
-3, /* (6) element ::= PLACENAME COLON unnamed_element */
20332073
-3, /* (7) element ::= PLACENAME COLON position */
20342074
-1, /* (8) element ::= unnamed_element */
20352075
-2, /* (9) element ::= print prlist */
2036
- -1, /* (10) rvalue ::= PLACENAME */
2037
- -1, /* (11) pritem ::= FILL */
2038
- -1, /* (12) pritem ::= COLOR */
2039
- -1, /* (13) pritem ::= THICKNESS */
2040
- -1, /* (14) pritem ::= rvalue */
2041
- -1, /* (15) pritem ::= STRING */
2042
- -1, /* (16) prsep ::= COMMA */
2043
- -2, /* (17) unnamed_element ::= basetype attribute_list */
2044
- -1, /* (18) basetype ::= CLASSNAME */
2045
- -2, /* (19) basetype ::= STRING textposition */
2046
- -4, /* (20) basetype ::= LB savelist element_list RB */
2047
- 0, /* (21) savelist ::= */
2048
- -1, /* (22) attribute_list ::= expr */
2049
- -2, /* (23) attribute_list ::= expr PERCENT */
2050
- -3, /* (24) attribute ::= numproperty expr PERCENT */
2051
- -2, /* (25) attribute ::= numproperty expr */
2052
- -2, /* (26) attribute ::= dashproperty expr */
2053
- -1, /* (27) attribute ::= dashproperty */
2054
- -2, /* (28) attribute ::= colorproperty rvalue */
2055
- -4, /* (29) attribute ::= go direction expr PERCENT */
2056
- -3, /* (30) attribute ::= go direction expr */
2057
- -2, /* (31) attribute ::= go direction */
2058
- -4, /* (32) attribute ::= go direction even position */
2059
- -1, /* (33) attribute ::= CLOSE */
2060
- -1, /* (34) attribute ::= CHOP */
2061
- -2, /* (35) attribute ::= FROM position */
2062
- -2, /* (36) attribute ::= TO position */
2063
- -1, /* (37) attribute ::= THEN */
2064
- -4, /* (38) attribute ::= THEN expr HEADING expr */
2065
- -3, /* (39) attribute ::= THEN HEADING expr */
2066
- -3, /* (40) attribute ::= THEN expr EDGEPT */
2067
- -2, /* (41) attribute ::= THEN EDGEPT */
2068
- -4, /* (42) attribute ::= GO expr HEADING expr */
2069
- -3, /* (43) attribute ::= GO HEADING expr */
2070
- -3, /* (44) attribute ::= GO expr EDGEPT */
2071
- -2, /* (45) attribute ::= GO EDGEPT */
2072
- -2, /* (46) attribute ::= AT position */
2073
- -1, /* (47) attribute ::= SAME */
2074
- -3, /* (48) attribute ::= SAME AS object */
2075
- -2, /* (49) attribute ::= STRING textposition */
2076
- -1, /* (50) attribute ::= FIT */
2077
- -2, /* (51) attribute ::= BEHIND object */
2078
- -4, /* (52) withclause ::= DOT_E edge AT position */
2079
- -3, /* (53) withclause ::= edge AT position */
2080
- -1, /* (54) numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
2081
- -1, /* (55) boolproperty ::= CW */
2082
- -1, /* (56) boolproperty ::= CCW */
2083
- -1, /* (57) boolproperty ::= LARROW */
2084
- -1, /* (58) boolproperty ::= RARROW */
2085
- -1, /* (59) boolproperty ::= LRARROW */
2086
- -1, /* (60) boolproperty ::= INVIS */
2087
- -1, /* (61) boolproperty ::= THICK */
2088
- -1, /* (62) boolproperty ::= THIN */
2089
- 0, /* (63) textposition ::= */
2090
- -2, /* (64) textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */
2091
- -3, /* (65) position ::= expr COMMA expr */
2092
- -5, /* (66) position ::= place PLUS expr COMMA expr */
2093
- -5, /* (67) position ::= place MINUS expr COMMA expr */
2094
- -7, /* (68) position ::= place PLUS LP expr COMMA expr RP */
2095
- -7, /* (69) position ::= place MINUS LP expr COMMA expr RP */
2096
- -5, /* (70) position ::= LP position COMMA position RP */
2097
- -3, /* (71) position ::= LP position RP */
2098
- -5, /* (72) position ::= expr between position AND position */
2099
- -6, /* (73) position ::= expr LT position COMMA position GT */
2100
- -3, /* (74) position ::= expr ABOVE position */
2101
- -3, /* (75) position ::= expr BELOW position */
2102
- -4, /* (76) position ::= expr LEFT OF position */
2103
- -4, /* (77) position ::= expr RIGHT OF position */
2104
- -4, /* (78) position ::= expr EDGEPT OF position */
2105
- -5, /* (79) position ::= expr HEADING expr FROM position */
2106
- -1, /* (80) place ::= object */
2107
- -3, /* (81) place ::= object DOT_E edge */
2108
- -3, /* (82) place ::= object DOT_L START */
2109
- -3, /* (83) place ::= object DOT_L END */
2110
- -3, /* (84) place ::= START OF object */
2111
- -3, /* (85) place ::= END OF object */
2112
- -3, /* (86) place ::= edge OF object */
2113
- -4, /* (87) place ::= NTH VERTEX OF object */
2114
- -1, /* (88) object ::= nth */
2115
- -3, /* (89) object ::= nth OF|IN object */
2116
- -1, /* (90) objectname ::= PLACENAME */
2117
- -3, /* (91) objectname ::= objectname DOT_U PLACENAME */
2118
- -2, /* (92) nth ::= NTH CLASSNAME */
2119
- -3, /* (93) nth ::= NTH LAST CLASSNAME */
2120
- -2, /* (94) nth ::= LAST CLASSNAME */
2121
- -1, /* (95) nth ::= LAST */
2122
- -3, /* (96) nth ::= NTH LB RB */
2123
- -4, /* (97) nth ::= NTH LAST LB RB */
2124
- -3, /* (98) nth ::= LAST LB RB */
2125
- -3, /* (99) expr ::= expr PLUS expr */
2126
- -3, /* (100) expr ::= expr MINUS expr */
2127
- -3, /* (101) expr ::= expr STAR expr */
2128
- -3, /* (102) expr ::= expr SLASH expr */
2129
- -2, /* (103) expr ::= MINUS expr */
2130
- -2, /* (104) expr ::= PLUS expr */
2131
- -3, /* (105) expr ::= LP expr RP */
2132
- -1, /* (106) expr ::= NUMBER */
2133
- -1, /* (107) expr ::= ID */
2134
- -4, /* (108) expr ::= FUNC1 LP expr RP */
2135
- -6, /* (109) expr ::= FUNC2 LP expr COMMA expr RP */
2136
- -3, /* (110) expr ::= object DOT_L locproperty */
2137
- -3, /* (111) expr ::= object DOT_L numproperty */
2138
- -3, /* (112) expr ::= object DOT_L dashproperty */
2139
- -3, /* (113) expr ::= object DOT_L colorproperty */
2140
- -5, /* (114) expr ::= object DOT_E edge DOT_L X */
2141
- -5, /* (115) expr ::= object DOT_E edge DOT_L Y */
2142
- -5, /* (116) expr ::= LP locproperty OF object RP */
2143
- -5, /* (117) expr ::= LP dashproperty OF object RP */
2144
- -5, /* (118) expr ::= LP numproperty OF object RP */
2145
- -5, /* (119) expr ::= LP colorproperty OF object RP */
2146
- -6, /* (120) expr ::= NTH VERTEX OF object DOT_L X */
2147
- -6, /* (121) expr ::= NTH VERTEX OF object DOT_L Y */
2148
- -1, /* (122) lvalue ::= ID */
2149
- -1, /* (123) lvalue ::= FILL */
2150
- -1, /* (124) lvalue ::= COLOR */
2151
- -1, /* (125) lvalue ::= THICKNESS */
2152
- -1, /* (126) rvalue ::= expr */
2153
- -1, /* (127) print ::= PRINT */
2154
- -1, /* (128) prlist ::= pritem */
2155
- -3, /* (129) prlist ::= prlist prsep pritem */
2156
- -1, /* (130) direction ::= UP */
2157
- -1, /* (131) direction ::= DOWN */
2158
- -1, /* (132) direction ::= LEFT */
2159
- -1, /* (133) direction ::= RIGHT */
2160
- -1, /* (134) attribute_list ::= alist */
2161
- 0, /* (135) alist ::= */
2162
- -2, /* (136) alist ::= alist attribute */
2163
- -1, /* (137) attribute ::= boolproperty */
2164
- -2, /* (138) attribute ::= WITH withclause */
2165
- -1, /* (139) go ::= GO */
2166
- 0, /* (140) go ::= */
2167
- -3, /* (141) even ::= UNTIL EVEN WITH */
2168
- -2, /* (142) even ::= EVEN WITH */
2169
- -1, /* (143) dashproperty ::= DOTTED */
2170
- -1, /* (144) dashproperty ::= DASHED */
2171
- -1, /* (145) colorproperty ::= FILL */
2172
- -1, /* (146) colorproperty ::= COLOR */
2173
- -1, /* (147) position ::= place */
2174
- -2, /* (148) between ::= WAY BETWEEN */
2175
- -1, /* (149) between ::= BETWEEN */
2176
- -4, /* (150) between ::= OF THE WAY BETWEEN */
2177
- -1, /* (151) object ::= objectname */
2178
- -1, /* (152) locproperty ::= X|Y */
2179
- -1, /* (153) edge ::= EDGEPT */
2180
- -1, /* (154) edge ::= TOP */
2181
- -1, /* (155) edge ::= BOTTOM */
2182
- -1, /* (156) edge ::= LEFT */
2183
- -1, /* (157) edge ::= RIGHT */
2076
+ -6, /* (10) element ::= ASSERT LP expr EQ expr RP */
2077
+ -6, /* (11) element ::= ASSERT LP place EQ place RP */
2078
+ -1, /* (12) rvalue ::= PLACENAME */
2079
+ -1, /* (13) pritem ::= FILL */
2080
+ -1, /* (14) pritem ::= COLOR */
2081
+ -1, /* (15) pritem ::= THICKNESS */
2082
+ -1, /* (16) pritem ::= rvalue */
2083
+ -1, /* (17) pritem ::= STRING */
2084
+ -1, /* (18) prsep ::= COMMA */
2085
+ -2, /* (19) unnamed_element ::= basetype attribute_list */
2086
+ -1, /* (20) basetype ::= CLASSNAME */
2087
+ -2, /* (21) basetype ::= STRING textposition */
2088
+ -4, /* (22) basetype ::= LB savelist element_list RB */
2089
+ 0, /* (23) savelist ::= */
2090
+ -2, /* (24) attribute_list ::= expr alist */
2091
+ -3, /* (25) attribute_list ::= expr PERCENT alist */
2092
+ -3, /* (26) attribute ::= numproperty expr PERCENT */
2093
+ -2, /* (27) attribute ::= numproperty expr */
2094
+ -2, /* (28) attribute ::= dashproperty expr */
2095
+ -1, /* (29) attribute ::= dashproperty */
2096
+ -2, /* (30) attribute ::= colorproperty rvalue */
2097
+ -4, /* (31) attribute ::= go direction expr PERCENT */
2098
+ -3, /* (32) attribute ::= go direction expr */
2099
+ -2, /* (33) attribute ::= go direction */
2100
+ -4, /* (34) attribute ::= go direction even position */
2101
+ -1, /* (35) attribute ::= CLOSE */
2102
+ -1, /* (36) attribute ::= CHOP */
2103
+ -2, /* (37) attribute ::= FROM position */
2104
+ -2, /* (38) attribute ::= TO position */
2105
+ -1, /* (39) attribute ::= THEN */
2106
+ -4, /* (40) attribute ::= THEN expr HEADING expr */
2107
+ -3, /* (41) attribute ::= THEN HEADING expr */
2108
+ -3, /* (42) attribute ::= THEN expr EDGEPT */
2109
+ -2, /* (43) attribute ::= THEN EDGEPT */
2110
+ -4, /* (44) attribute ::= GO expr HEADING expr */
2111
+ -3, /* (45) attribute ::= GO HEADING expr */
2112
+ -3, /* (46) attribute ::= GO expr EDGEPT */
2113
+ -2, /* (47) attribute ::= GO EDGEPT */
2114
+ -2, /* (48) attribute ::= AT position */
2115
+ -1, /* (49) attribute ::= SAME */
2116
+ -3, /* (50) attribute ::= SAME AS object */
2117
+ -2, /* (51) attribute ::= STRING textposition */
2118
+ -1, /* (52) attribute ::= FIT */
2119
+ -2, /* (53) attribute ::= BEHIND object */
2120
+ -4, /* (54) withclause ::= DOT_E edge AT position */
2121
+ -3, /* (55) withclause ::= edge AT position */
2122
+ -1, /* (56) numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
2123
+ -1, /* (57) boolproperty ::= CW */
2124
+ -1, /* (58) boolproperty ::= CCW */
2125
+ -1, /* (59) boolproperty ::= LARROW */
2126
+ -1, /* (60) boolproperty ::= RARROW */
2127
+ -1, /* (61) boolproperty ::= LRARROW */
2128
+ -1, /* (62) boolproperty ::= INVIS */
2129
+ -1, /* (63) boolproperty ::= THICK */
2130
+ -1, /* (64) boolproperty ::= THIN */
2131
+ 0, /* (65) textposition ::= */
2132
+ -2, /* (66) textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */
2133
+ -3, /* (67) position ::= expr COMMA expr */
2134
+ -5, /* (68) position ::= place PLUS expr COMMA expr */
2135
+ -5, /* (69) position ::= place MINUS expr COMMA expr */
2136
+ -7, /* (70) position ::= place PLUS LP expr COMMA expr RP */
2137
+ -7, /* (71) position ::= place MINUS LP expr COMMA expr RP */
2138
+ -5, /* (72) position ::= LP position COMMA position RP */
2139
+ -3, /* (73) position ::= LP position RP */
2140
+ -5, /* (74) position ::= expr between position AND position */
2141
+ -6, /* (75) position ::= expr LT position COMMA position GT */
2142
+ -3, /* (76) position ::= expr ABOVE position */
2143
+ -3, /* (77) position ::= expr BELOW position */
2144
+ -4, /* (78) position ::= expr LEFT OF position */
2145
+ -4, /* (79) position ::= expr RIGHT OF position */
2146
+ -4, /* (80) position ::= expr EDGEPT OF position */
2147
+ -5, /* (81) position ::= expr HEADING expr FROM position */
2148
+ -3, /* (82) place ::= edge OF object */
2149
+ -1, /* (83) place2 ::= object */
2150
+ -3, /* (84) place2 ::= object DOT_E edge */
2151
+ -4, /* (85) place2 ::= NTH VERTEX OF object */
2152
+ -1, /* (86) object ::= nth */
2153
+ -3, /* (87) object ::= nth OF|IN object */
2154
+ -1, /* (88) objectname ::= PLACENAME */
2155
+ -3, /* (89) objectname ::= objectname DOT_U PLACENAME */
2156
+ -2, /* (90) nth ::= NTH CLASSNAME */
2157
+ -3, /* (91) nth ::= NTH LAST CLASSNAME */
2158
+ -2, /* (92) nth ::= LAST CLASSNAME */
2159
+ -1, /* (93) nth ::= LAST */
2160
+ -3, /* (94) nth ::= NTH LB RB */
2161
+ -4, /* (95) nth ::= NTH LAST LB RB */
2162
+ -3, /* (96) nth ::= LAST LB RB */
2163
+ -3, /* (97) expr ::= expr PLUS expr */
2164
+ -3, /* (98) expr ::= expr MINUS expr */
2165
+ -3, /* (99) expr ::= expr STAR expr */
2166
+ -3, /* (100) expr ::= expr SLASH expr */
2167
+ -2, /* (101) expr ::= MINUS expr */
2168
+ -2, /* (102) expr ::= PLUS expr */
2169
+ -3, /* (103) expr ::= LP expr RP */
2170
+ -1, /* (104) expr ::= NUMBER */
2171
+ -1, /* (105) expr ::= ID */
2172
+ -4, /* (106) expr ::= FUNC1 LP expr RP */
2173
+ -6, /* (107) expr ::= FUNC2 LP expr COMMA expr RP */
2174
+ -3, /* (108) expr ::= place2 DOT_XY X */
2175
+ -3, /* (109) expr ::= place2 DOT_XY Y */
2176
+ -3, /* (110) expr ::= object DOT_L numproperty */
2177
+ -3, /* (111) expr ::= object DOT_L dashproperty */
2178
+ -3, /* (112) expr ::= object DOT_L colorproperty */
2179
+ -1, /* (113) lvalue ::= ID */
2180
+ -1, /* (114) lvalue ::= FILL */
2181
+ -1, /* (115) lvalue ::= COLOR */
2182
+ -1, /* (116) lvalue ::= THICKNESS */
2183
+ -1, /* (117) rvalue ::= expr */
2184
+ -1, /* (118) print ::= PRINT */
2185
+ -1, /* (119) prlist ::= pritem */
2186
+ -3, /* (120) prlist ::= prlist prsep pritem */
2187
+ -1, /* (121) direction ::= UP */
2188
+ -1, /* (122) direction ::= DOWN */
2189
+ -1, /* (123) direction ::= LEFT */
2190
+ -1, /* (124) direction ::= RIGHT */
2191
+ -1, /* (125) attribute_list ::= alist */
2192
+ 0, /* (126) alist ::= */
2193
+ -2, /* (127) alist ::= alist attribute */
2194
+ -1, /* (128) attribute ::= boolproperty */
2195
+ -2, /* (129) attribute ::= WITH withclause */
2196
+ -1, /* (130) go ::= GO */
2197
+ 0, /* (131) go ::= */
2198
+ -3, /* (132) even ::= UNTIL EVEN WITH */
2199
+ -2, /* (133) even ::= EVEN WITH */
2200
+ -1, /* (134) dashproperty ::= DOTTED */
2201
+ -1, /* (135) dashproperty ::= DASHED */
2202
+ -1, /* (136) colorproperty ::= FILL */
2203
+ -1, /* (137) colorproperty ::= COLOR */
2204
+ -1, /* (138) position ::= place */
2205
+ -2, /* (139) between ::= WAY BETWEEN */
2206
+ -1, /* (140) between ::= BETWEEN */
2207
+ -4, /* (141) between ::= OF THE WAY BETWEEN */
2208
+ -1, /* (142) place ::= place2 */
2209
+ -1, /* (143) edge ::= EDGEPT */
2210
+ -1, /* (144) edge ::= TOP */
2211
+ -1, /* (145) edge ::= BOTTOM */
2212
+ -1, /* (146) edge ::= START */
2213
+ -1, /* (147) edge ::= END */
2214
+ -1, /* (148) edge ::= RIGHT */
2215
+ -1, /* (149) edge ::= LEFT */
2216
+ -1, /* (150) object ::= objectname */
21842217
};
21852218
21862219
static void yy_accept(yyParser*); /* Forward Declaration */
21872220
21882221
/*
@@ -2269,640 +2302,627 @@
22692302
** break;
22702303
*/
22712304
/********** Begin reduce actions **********************************************/
22722305
YYMINORTYPE yylhsminor;
22732306
case 0: /* document ::= element_list */
2274
-#line 480 "pikchr.y"
2275
-{pik_render(p,yymsp[0].minor.yy80);}
2276
-#line 2301 "pikchr.c"
2307
+#line 482 "pikchr.y"
2308
+{pik_render(p,yymsp[0].minor.yy42);}
2309
+#line 2334 "pikchr.c"
22772310
break;
22782311
case 1: /* element_list ::= element */
2279
-#line 483 "pikchr.y"
2280
-{ yylhsminor.yy80 = pik_elist_append(p,0,yymsp[0].minor.yy174); }
2281
-#line 2306 "pikchr.c"
2282
- yymsp[0].minor.yy80 = yylhsminor.yy80;
2312
+#line 485 "pikchr.y"
2313
+{ yylhsminor.yy42 = pik_elist_append(p,0,yymsp[0].minor.yy118); }
2314
+#line 2339 "pikchr.c"
2315
+ yymsp[0].minor.yy42 = yylhsminor.yy42;
22832316
break;
22842317
case 2: /* element_list ::= element_list EOL element */
2285
-#line 485 "pikchr.y"
2286
-{ yylhsminor.yy80 = pik_elist_append(p,yymsp[-2].minor.yy80,yymsp[0].minor.yy174); }
2287
-#line 2312 "pikchr.c"
2288
- yymsp[-2].minor.yy80 = yylhsminor.yy80;
2318
+#line 487 "pikchr.y"
2319
+{ yylhsminor.yy42 = pik_elist_append(p,yymsp[-2].minor.yy42,yymsp[0].minor.yy118); }
2320
+#line 2345 "pikchr.c"
2321
+ yymsp[-2].minor.yy42 = yylhsminor.yy42;
22892322
break;
22902323
case 3: /* element ::= */
2291
-#line 488 "pikchr.y"
2292
-{ yymsp[1].minor.yy174 = 0; }
2293
-#line 2318 "pikchr.c"
2324
+#line 490 "pikchr.y"
2325
+{ yymsp[1].minor.yy118 = 0; }
2326
+#line 2351 "pikchr.c"
22942327
break;
22952328
case 4: /* element ::= direction */
2296
-#line 489 "pikchr.y"
2297
-{ pik_set_direction(p,yymsp[0].minor.yy0.eCode); yylhsminor.yy174=0; }
2298
-#line 2323 "pikchr.c"
2299
- yymsp[0].minor.yy174 = yylhsminor.yy174;
2329
+#line 491 "pikchr.y"
2330
+{ pik_set_direction(p,yymsp[0].minor.yy0.eCode); yylhsminor.yy118=0; }
2331
+#line 2356 "pikchr.c"
2332
+ yymsp[0].minor.yy118 = yylhsminor.yy118;
23002333
break;
23012334
case 5: /* element ::= lvalue ASSIGN rvalue */
2302
-#line 490 "pikchr.y"
2303
-{pik_set_var(p,&yymsp[-2].minor.yy0,yymsp[0].minor.yy147,&yymsp[-1].minor.yy0); yylhsminor.yy174=0;}
2304
-#line 2329 "pikchr.c"
2305
- yymsp[-2].minor.yy174 = yylhsminor.yy174;
2335
+#line 492 "pikchr.y"
2336
+{pik_set_var(p,&yymsp[-2].minor.yy0,yymsp[0].minor.yy215,&yymsp[-1].minor.yy0); yylhsminor.yy118=0;}
2337
+#line 2362 "pikchr.c"
2338
+ yymsp[-2].minor.yy118 = yylhsminor.yy118;
23062339
break;
23072340
case 6: /* element ::= PLACENAME COLON unnamed_element */
2308
-#line 492 "pikchr.y"
2309
-{ yylhsminor.yy174 = yymsp[0].minor.yy174; pik_elem_setname(p,yymsp[0].minor.yy174,&yymsp[-2].minor.yy0); }
2310
-#line 2335 "pikchr.c"
2311
- yymsp[-2].minor.yy174 = yylhsminor.yy174;
2341
+#line 494 "pikchr.y"
2342
+{ yylhsminor.yy118 = yymsp[0].minor.yy118; pik_elem_setname(p,yymsp[0].minor.yy118,&yymsp[-2].minor.yy0); }
2343
+#line 2368 "pikchr.c"
2344
+ yymsp[-2].minor.yy118 = yylhsminor.yy118;
23122345
break;
23132346
case 7: /* element ::= PLACENAME COLON position */
2314
-#line 494 "pikchr.y"
2315
-{ yylhsminor.yy174 = pik_elem_new(p,0,0,0);
2316
- if(yylhsminor.yy174){ yylhsminor.yy174->ptAt = yymsp[0].minor.yy211; pik_elem_setname(p,yylhsminor.yy174,&yymsp[-2].minor.yy0); }}
2317
-#line 2342 "pikchr.c"
2318
- yymsp[-2].minor.yy174 = yylhsminor.yy174;
2347
+#line 496 "pikchr.y"
2348
+{ yylhsminor.yy118 = pik_elem_new(p,0,0,0);
2349
+ if(yylhsminor.yy118){ yylhsminor.yy118->ptAt = yymsp[0].minor.yy85; pik_elem_setname(p,yylhsminor.yy118,&yymsp[-2].minor.yy0); }}
2350
+#line 2375 "pikchr.c"
2351
+ yymsp[-2].minor.yy118 = yylhsminor.yy118;
23192352
break;
23202353
case 8: /* element ::= unnamed_element */
2321
-#line 496 "pikchr.y"
2322
-{yylhsminor.yy174 = yymsp[0].minor.yy174;}
2323
-#line 2348 "pikchr.c"
2324
- yymsp[0].minor.yy174 = yylhsminor.yy174;
2354
+#line 498 "pikchr.y"
2355
+{yylhsminor.yy118 = yymsp[0].minor.yy118;}
2356
+#line 2381 "pikchr.c"
2357
+ yymsp[0].minor.yy118 = yylhsminor.yy118;
23252358
break;
23262359
case 9: /* element ::= print prlist */
2327
-#line 497 "pikchr.y"
2328
-{pik_append(p,"<br>\n",5); yymsp[-1].minor.yy174=0;}
2329
-#line 2354 "pikchr.c"
2330
- break;
2331
- case 10: /* rvalue ::= PLACENAME */
2332
-#line 508 "pikchr.y"
2333
-{yylhsminor.yy147 = pik_lookup_color(p,&yymsp[0].minor.yy0);}
2334
-#line 2359 "pikchr.c"
2335
- yymsp[0].minor.yy147 = yylhsminor.yy147;
2336
- break;
2337
- case 11: /* pritem ::= FILL */
2338
- case 12: /* pritem ::= COLOR */ yytestcase(yyruleno==12);
2339
- case 13: /* pritem ::= THICKNESS */ yytestcase(yyruleno==13);
2340
-#line 513 "pikchr.y"
2341
-{pik_append_num(p,"",pik_value(p,yymsp[0].minor.yy0.z,yymsp[0].minor.yy0.n,0));}
2342
-#line 2367 "pikchr.c"
2343
- break;
2344
- case 14: /* pritem ::= rvalue */
2345
-#line 516 "pikchr.y"
2346
-{pik_append_num(p,"",yymsp[0].minor.yy147);}
2347
-#line 2372 "pikchr.c"
2348
- break;
2349
- case 15: /* pritem ::= STRING */
2360
+#line 499 "pikchr.y"
2361
+{pik_append(p,"<br>\n",5); yymsp[-1].minor.yy118=0;}
2362
+#line 2387 "pikchr.c"
2363
+ break;
2364
+ case 10: /* element ::= ASSERT LP expr EQ expr RP */
2365
+#line 504 "pikchr.y"
2366
+{yymsp[-5].minor.yy118=pik_assert(p,yymsp[-3].minor.yy215,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy215);}
2367
+#line 2392 "pikchr.c"
2368
+ break;
2369
+ case 11: /* element ::= ASSERT LP place EQ place RP */
2370
+#line 506 "pikchr.y"
2371
+{yymsp[-5].minor.yy118=pik_place_assert(p,&yymsp[-3].minor.yy85,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy85);}
2372
+#line 2397 "pikchr.c"
2373
+ break;
2374
+ case 12: /* rvalue ::= PLACENAME */
23502375
#line 517 "pikchr.y"
2351
-{pik_append_text(p,yymsp[0].minor.yy0.z+1,yymsp[0].minor.yy0.n-2,0);}
2352
-#line 2377 "pikchr.c"
2353
- break;
2354
- case 16: /* prsep ::= COMMA */
2355
-#line 518 "pikchr.y"
2356
-{pik_append(p, " ", 1);}
2357
-#line 2382 "pikchr.c"
2358
- break;
2359
- case 17: /* unnamed_element ::= basetype attribute_list */
2360
-#line 521 "pikchr.y"
2361
-{yylhsminor.yy174 = yymsp[-1].minor.yy174; pik_after_adding_attributes(p,yylhsminor.yy174);}
2362
-#line 2387 "pikchr.c"
2363
- yymsp[-1].minor.yy174 = yylhsminor.yy174;
2364
- break;
2365
- case 18: /* basetype ::= CLASSNAME */
2366
-#line 523 "pikchr.y"
2367
-{yylhsminor.yy174 = pik_elem_new(p,&yymsp[0].minor.yy0,0,0); }
2368
-#line 2393 "pikchr.c"
2369
- yymsp[0].minor.yy174 = yylhsminor.yy174;
2370
- break;
2371
- case 19: /* basetype ::= STRING textposition */
2372
-#line 525 "pikchr.y"
2373
-{yymsp[-1].minor.yy0.eCode = yymsp[0].minor.yy34; yylhsminor.yy174 = pik_elem_new(p,0,&yymsp[-1].minor.yy0,0); }
2374
-#line 2399 "pikchr.c"
2375
- yymsp[-1].minor.yy174 = yylhsminor.yy174;
2376
- break;
2377
- case 20: /* basetype ::= LB savelist element_list RB */
2378
-#line 527 "pikchr.y"
2379
-{ p->list = yymsp[-2].minor.yy80; yymsp[-3].minor.yy174 = pik_elem_new(p,0,0,yymsp[-1].minor.yy80); if(yymsp[-3].minor.yy174) yymsp[-3].minor.yy174->errTok = yymsp[0].minor.yy0; }
2380
-#line 2405 "pikchr.c"
2381
- break;
2382
- case 21: /* savelist ::= */
2383
-#line 532 "pikchr.y"
2384
-{yymsp[1].minor.yy80 = p->list; p->list = 0;}
2376
+{yylhsminor.yy215 = pik_lookup_color(p,&yymsp[0].minor.yy0);}
2377
+#line 2402 "pikchr.c"
2378
+ yymsp[0].minor.yy215 = yylhsminor.yy215;
2379
+ break;
2380
+ case 13: /* pritem ::= FILL */
2381
+ case 14: /* pritem ::= COLOR */ yytestcase(yyruleno==14);
2382
+ case 15: /* pritem ::= THICKNESS */ yytestcase(yyruleno==15);
2383
+#line 522 "pikchr.y"
2384
+{pik_append_num(p,"",pik_value(p,yymsp[0].minor.yy0.z,yymsp[0].minor.yy0.n,0));}
23852385
#line 2410 "pikchr.c"
23862386
break;
2387
- case 22: /* attribute_list ::= expr */
2388
-#line 539 "pikchr.y"
2389
-{ pik_add_direction(p,0,&yymsp[0].minor.yy147,0);}
2387
+ case 16: /* pritem ::= rvalue */
2388
+#line 525 "pikchr.y"
2389
+{pik_append_num(p,"",yymsp[0].minor.yy215);}
23902390
#line 2415 "pikchr.c"
23912391
break;
2392
- case 23: /* attribute_list ::= expr PERCENT */
2393
-#line 540 "pikchr.y"
2394
-{ pik_add_direction(p,0,&yymsp[-1].minor.yy147,1);}
2392
+ case 17: /* pritem ::= STRING */
2393
+#line 526 "pikchr.y"
2394
+{pik_append_text(p,yymsp[0].minor.yy0.z+1,yymsp[0].minor.yy0.n-2,0);}
23952395
#line 2420 "pikchr.c"
23962396
break;
2397
- case 24: /* attribute ::= numproperty expr PERCENT */
2398
-#line 545 "pikchr.y"
2399
-{ pik_set_numprop(p,&yymsp[-2].minor.yy0,0.0,yymsp[-1].minor.yy147/100.0); }
2397
+ case 18: /* prsep ::= COMMA */
2398
+#line 527 "pikchr.y"
2399
+{pik_append(p, " ", 1);}
24002400
#line 2425 "pikchr.c"
24012401
break;
2402
- case 25: /* attribute ::= numproperty expr */
2403
- case 28: /* attribute ::= colorproperty rvalue */ yytestcase(yyruleno==28);
2404
-#line 546 "pikchr.y"
2405
-{ pik_set_numprop(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy147,0.0); }
2406
-#line 2431 "pikchr.c"
2402
+ case 19: /* unnamed_element ::= basetype attribute_list */
2403
+#line 530 "pikchr.y"
2404
+{yylhsminor.yy118 = yymsp[-1].minor.yy118; pik_after_adding_attributes(p,yylhsminor.yy118);}
2405
+#line 2430 "pikchr.c"
2406
+ yymsp[-1].minor.yy118 = yylhsminor.yy118;
24072407
break;
2408
- case 26: /* attribute ::= dashproperty expr */
2409
-#line 547 "pikchr.y"
2410
-{ pik_set_dashed(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy147); }
2408
+ case 20: /* basetype ::= CLASSNAME */
2409
+#line 532 "pikchr.y"
2410
+{yylhsminor.yy118 = pik_elem_new(p,&yymsp[0].minor.yy0,0,0); }
24112411
#line 2436 "pikchr.c"
2412
+ yymsp[0].minor.yy118 = yylhsminor.yy118;
24122413
break;
2413
- case 27: /* attribute ::= dashproperty */
2414
+ case 21: /* basetype ::= STRING textposition */
2415
+#line 534 "pikchr.y"
2416
+{yymsp[-1].minor.yy0.eCode = yymsp[0].minor.yy156; yylhsminor.yy118 = pik_elem_new(p,0,&yymsp[-1].minor.yy0,0); }
2417
+#line 2442 "pikchr.c"
2418
+ yymsp[-1].minor.yy118 = yylhsminor.yy118;
2419
+ break;
2420
+ case 22: /* basetype ::= LB savelist element_list RB */
2421
+#line 536 "pikchr.y"
2422
+{ p->list = yymsp[-2].minor.yy42; yymsp[-3].minor.yy118 = pik_elem_new(p,0,0,yymsp[-1].minor.yy42); if(yymsp[-3].minor.yy118) yymsp[-3].minor.yy118->errTok = yymsp[0].minor.yy0; }
2423
+#line 2448 "pikchr.c"
2424
+ break;
2425
+ case 23: /* savelist ::= */
2426
+#line 541 "pikchr.y"
2427
+{yymsp[1].minor.yy42 = p->list; p->list = 0;}
2428
+#line 2453 "pikchr.c"
2429
+ break;
2430
+ case 24: /* attribute_list ::= expr alist */
24142431
#line 548 "pikchr.y"
2415
-{ pik_set_dashed(p,&yymsp[0].minor.yy0,0); }
2416
-#line 2441 "pikchr.c"
2417
- break;
2418
- case 29: /* attribute ::= go direction expr PERCENT */
2419
-#line 551 "pikchr.y"
2420
-{ pik_add_direction(p,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy147,1);}
2421
-#line 2446 "pikchr.c"
2422
- break;
2423
- case 30: /* attribute ::= go direction expr */
2424
-#line 552 "pikchr.y"
2425
-{ pik_add_direction(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy147,0);}
2426
-#line 2451 "pikchr.c"
2427
- break;
2428
- case 31: /* attribute ::= go direction */
2429
-#line 553 "pikchr.y"
2430
-{ pik_add_direction(p,&yymsp[0].minor.yy0,0,0); }
2431
-#line 2456 "pikchr.c"
2432
- break;
2433
- case 32: /* attribute ::= go direction even position */
2432
+{ pik_add_direction(p,0,&yymsp[-1].minor.yy215,0);}
2433
+#line 2458 "pikchr.c"
2434
+ break;
2435
+ case 25: /* attribute_list ::= expr PERCENT alist */
2436
+#line 549 "pikchr.y"
2437
+{ pik_add_direction(p,0,&yymsp[-2].minor.yy215,1);}
2438
+#line 2463 "pikchr.c"
2439
+ break;
2440
+ case 26: /* attribute ::= numproperty expr PERCENT */
24342441
#line 554 "pikchr.y"
2435
-{pik_evenwith(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy211);}
2436
-#line 2461 "pikchr.c"
2442
+{ pik_set_numprop(p,&yymsp[-2].minor.yy0,0.0,yymsp[-1].minor.yy215/100.0); }
2443
+#line 2468 "pikchr.c"
24372444
break;
2438
- case 33: /* attribute ::= CLOSE */
2445
+ case 27: /* attribute ::= numproperty expr */
2446
+ case 30: /* attribute ::= colorproperty rvalue */ yytestcase(yyruleno==30);
24392447
#line 555 "pikchr.y"
2440
-{ pik_close_path(p,&yymsp[0].minor.yy0); }
2441
-#line 2466 "pikchr.c"
2448
+{ pik_set_numprop(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy215,0.0); }
2449
+#line 2474 "pikchr.c"
24422450
break;
2443
- case 34: /* attribute ::= CHOP */
2451
+ case 28: /* attribute ::= dashproperty expr */
24442452
#line 556 "pikchr.y"
2445
-{ p->cur->bChop = 1; }
2446
-#line 2471 "pikchr.c"
2453
+{ pik_set_dashed(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy215); }
2454
+#line 2479 "pikchr.c"
24472455
break;
2448
- case 35: /* attribute ::= FROM position */
2456
+ case 29: /* attribute ::= dashproperty */
24492457
#line 557 "pikchr.y"
2450
-{ pik_set_from(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy211); }
2451
-#line 2476 "pikchr.c"
2452
- break;
2453
- case 36: /* attribute ::= TO position */
2454
-#line 558 "pikchr.y"
2455
-{ pik_add_to(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy211); }
2456
-#line 2481 "pikchr.c"
2457
- break;
2458
- case 37: /* attribute ::= THEN */
2459
-#line 559 "pikchr.y"
2460
-{ pik_then(p, &yymsp[0].minor.yy0, p->cur); }
2461
-#line 2486 "pikchr.c"
2462
- break;
2463
- case 38: /* attribute ::= THEN expr HEADING expr */
2464
- case 42: /* attribute ::= GO expr HEADING expr */ yytestcase(yyruleno==42);
2458
+{ pik_set_dashed(p,&yymsp[0].minor.yy0,0); }
2459
+#line 2484 "pikchr.c"
2460
+ break;
2461
+ case 31: /* attribute ::= go direction expr PERCENT */
2462
+#line 560 "pikchr.y"
2463
+{ pik_add_direction(p,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy215,1);}
2464
+#line 2489 "pikchr.c"
2465
+ break;
2466
+ case 32: /* attribute ::= go direction expr */
24652467
#line 561 "pikchr.y"
2466
-{pik_move_hdg(p,&yymsp[-2].minor.yy147,&yymsp[-1].minor.yy0,yymsp[0].minor.yy147,0,&yymsp[-3].minor.yy0);}
2467
-#line 2492 "pikchr.c"
2468
+{ pik_add_direction(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy215,0);}
2469
+#line 2494 "pikchr.c"
24682470
break;
2469
- case 39: /* attribute ::= THEN HEADING expr */
2470
- case 43: /* attribute ::= GO HEADING expr */ yytestcase(yyruleno==43);
2471
+ case 33: /* attribute ::= go direction */
24712472
#line 562 "pikchr.y"
2472
-{pik_move_hdg(p,0,&yymsp[-1].minor.yy0,yymsp[0].minor.yy147,0,&yymsp[-2].minor.yy0);}
2473
-#line 2498 "pikchr.c"
2473
+{ pik_add_direction(p,&yymsp[0].minor.yy0,0,0); }
2474
+#line 2499 "pikchr.c"
24742475
break;
2475
- case 40: /* attribute ::= THEN expr EDGEPT */
2476
- case 44: /* attribute ::= GO expr EDGEPT */ yytestcase(yyruleno==44);
2476
+ case 34: /* attribute ::= go direction even position */
24772477
#line 563 "pikchr.y"
2478
-{pik_move_hdg(p,&yymsp[-1].minor.yy147,0,0,&yymsp[0].minor.yy0,&yymsp[-2].minor.yy0);}
2478
+{pik_evenwith(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy85);}
24792479
#line 2504 "pikchr.c"
24802480
break;
2481
- case 41: /* attribute ::= THEN EDGEPT */
2482
- case 45: /* attribute ::= GO EDGEPT */ yytestcase(yyruleno==45);
2481
+ case 35: /* attribute ::= CLOSE */
24832482
#line 564 "pikchr.y"
2484
-{pik_move_hdg(p,0,0,0,&yymsp[0].minor.yy0,&yymsp[-1].minor.yy0);}
2485
-#line 2510 "pikchr.c"
2483
+{ pik_close_path(p,&yymsp[0].minor.yy0); }
2484
+#line 2509 "pikchr.c"
24862485
break;
2487
- case 46: /* attribute ::= AT position */
2486
+ case 36: /* attribute ::= CHOP */
2487
+#line 565 "pikchr.y"
2488
+{ p->cur->bChop = 1; }
2489
+#line 2514 "pikchr.c"
2490
+ break;
2491
+ case 37: /* attribute ::= FROM position */
2492
+#line 566 "pikchr.y"
2493
+{ pik_set_from(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy85); }
2494
+#line 2519 "pikchr.c"
2495
+ break;
2496
+ case 38: /* attribute ::= TO position */
2497
+#line 567 "pikchr.y"
2498
+{ pik_add_to(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy85); }
2499
+#line 2524 "pikchr.c"
2500
+ break;
2501
+ case 39: /* attribute ::= THEN */
2502
+#line 568 "pikchr.y"
2503
+{ pik_then(p, &yymsp[0].minor.yy0, p->cur); }
2504
+#line 2529 "pikchr.c"
2505
+ break;
2506
+ case 40: /* attribute ::= THEN expr HEADING expr */
2507
+ case 44: /* attribute ::= GO expr HEADING expr */ yytestcase(yyruleno==44);
24882508
#line 570 "pikchr.y"
2489
-{ pik_set_at(p,0,&yymsp[0].minor.yy211,&yymsp[-1].minor.yy0); }
2490
-#line 2515 "pikchr.c"
2491
- break;
2492
- case 47: /* attribute ::= SAME */
2493
-#line 572 "pikchr.y"
2494
-{pik_same(p,0,&yymsp[0].minor.yy0);}
2495
-#line 2520 "pikchr.c"
2496
- break;
2497
- case 48: /* attribute ::= SAME AS object */
2498
-#line 573 "pikchr.y"
2499
-{pik_same(p,yymsp[0].minor.yy174,&yymsp[-2].minor.yy0);}
2500
-#line 2525 "pikchr.c"
2501
- break;
2502
- case 49: /* attribute ::= STRING textposition */
2503
-#line 574 "pikchr.y"
2504
-{pik_add_txt(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy34);}
2505
-#line 2530 "pikchr.c"
2506
- break;
2507
- case 50: /* attribute ::= FIT */
2508
-#line 575 "pikchr.y"
2509
-{pik_size_to_fit(p,&yymsp[0].minor.yy0); }
2509
+{pik_move_hdg(p,&yymsp[-2].minor.yy215,&yymsp[-1].minor.yy0,yymsp[0].minor.yy215,0,&yymsp[-3].minor.yy0);}
25102510
#line 2535 "pikchr.c"
25112511
break;
2512
- case 51: /* attribute ::= BEHIND object */
2513
-#line 576 "pikchr.y"
2514
-{pik_behind(p,yymsp[0].minor.yy174);}
2515
-#line 2540 "pikchr.c"
2512
+ case 41: /* attribute ::= THEN HEADING expr */
2513
+ case 45: /* attribute ::= GO HEADING expr */ yytestcase(yyruleno==45);
2514
+#line 571 "pikchr.y"
2515
+{pik_move_hdg(p,0,&yymsp[-1].minor.yy0,yymsp[0].minor.yy215,0,&yymsp[-2].minor.yy0);}
2516
+#line 2541 "pikchr.c"
2517
+ break;
2518
+ case 42: /* attribute ::= THEN expr EDGEPT */
2519
+ case 46: /* attribute ::= GO expr EDGEPT */ yytestcase(yyruleno==46);
2520
+#line 572 "pikchr.y"
2521
+{pik_move_hdg(p,&yymsp[-1].minor.yy215,0,0,&yymsp[0].minor.yy0,&yymsp[-2].minor.yy0);}
2522
+#line 2547 "pikchr.c"
2523
+ break;
2524
+ case 43: /* attribute ::= THEN EDGEPT */
2525
+ case 47: /* attribute ::= GO EDGEPT */ yytestcase(yyruleno==47);
2526
+#line 573 "pikchr.y"
2527
+{pik_move_hdg(p,0,0,0,&yymsp[0].minor.yy0,&yymsp[-1].minor.yy0);}
2528
+#line 2553 "pikchr.c"
2529
+ break;
2530
+ case 48: /* attribute ::= AT position */
2531
+#line 579 "pikchr.y"
2532
+{ pik_set_at(p,0,&yymsp[0].minor.yy85,&yymsp[-1].minor.yy0); }
2533
+#line 2558 "pikchr.c"
2534
+ break;
2535
+ case 49: /* attribute ::= SAME */
2536
+#line 581 "pikchr.y"
2537
+{pik_same(p,0,&yymsp[0].minor.yy0);}
2538
+#line 2563 "pikchr.c"
2539
+ break;
2540
+ case 50: /* attribute ::= SAME AS object */
2541
+#line 582 "pikchr.y"
2542
+{pik_same(p,yymsp[0].minor.yy118,&yymsp[-2].minor.yy0);}
2543
+#line 2568 "pikchr.c"
2544
+ break;
2545
+ case 51: /* attribute ::= STRING textposition */
2546
+#line 583 "pikchr.y"
2547
+{pik_add_txt(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy156);}
2548
+#line 2573 "pikchr.c"
25162549
break;
2517
- case 52: /* withclause ::= DOT_E edge AT position */
2518
- case 53: /* withclause ::= edge AT position */ yytestcase(yyruleno==53);
2550
+ case 52: /* attribute ::= FIT */
25192551
#line 584 "pikchr.y"
2520
-{ pik_set_at(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy211,&yymsp[-1].minor.yy0); }
2521
-#line 2546 "pikchr.c"
2552
+{pik_size_to_fit(p,&yymsp[0].minor.yy0); }
2553
+#line 2578 "pikchr.c"
2554
+ break;
2555
+ case 53: /* attribute ::= BEHIND object */
2556
+#line 585 "pikchr.y"
2557
+{pik_behind(p,yymsp[0].minor.yy118);}
2558
+#line 2583 "pikchr.c"
2559
+ break;
2560
+ case 54: /* withclause ::= DOT_E edge AT position */
2561
+ case 55: /* withclause ::= edge AT position */ yytestcase(yyruleno==55);
2562
+#line 593 "pikchr.y"
2563
+{ pik_set_at(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy85,&yymsp[-1].minor.yy0); }
2564
+#line 2589 "pikchr.c"
25222565
break;
2523
- case 54: /* numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
2524
-#line 588 "pikchr.y"
2566
+ case 56: /* numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
2567
+#line 597 "pikchr.y"
25252568
{yylhsminor.yy0 = yymsp[0].minor.yy0;}
2526
-#line 2551 "pikchr.c"
2569
+#line 2594 "pikchr.c"
25272570
yymsp[0].minor.yy0 = yylhsminor.yy0;
25282571
break;
2529
- case 55: /* boolproperty ::= CW */
2530
-#line 599 "pikchr.y"
2572
+ case 57: /* boolproperty ::= CW */
2573
+#line 608 "pikchr.y"
25312574
{p->cur->cw = 1;}
2532
-#line 2557 "pikchr.c"
2575
+#line 2600 "pikchr.c"
25332576
break;
2534
- case 56: /* boolproperty ::= CCW */
2535
-#line 600 "pikchr.y"
2577
+ case 58: /* boolproperty ::= CCW */
2578
+#line 609 "pikchr.y"
25362579
{p->cur->cw = 0;}
2537
-#line 2562 "pikchr.c"
2580
+#line 2605 "pikchr.c"
25382581
break;
2539
- case 57: /* boolproperty ::= LARROW */
2540
-#line 601 "pikchr.y"
2582
+ case 59: /* boolproperty ::= LARROW */
2583
+#line 610 "pikchr.y"
25412584
{p->cur->larrow=1; p->cur->rarrow=0; }
2542
-#line 2567 "pikchr.c"
2585
+#line 2610 "pikchr.c"
25432586
break;
2544
- case 58: /* boolproperty ::= RARROW */
2545
-#line 602 "pikchr.y"
2587
+ case 60: /* boolproperty ::= RARROW */
2588
+#line 611 "pikchr.y"
25462589
{p->cur->larrow=0; p->cur->rarrow=1; }
2547
-#line 2572 "pikchr.c"
2590
+#line 2615 "pikchr.c"
25482591
break;
2549
- case 59: /* boolproperty ::= LRARROW */
2550
-#line 603 "pikchr.y"
2592
+ case 61: /* boolproperty ::= LRARROW */
2593
+#line 612 "pikchr.y"
25512594
{p->cur->larrow=1; p->cur->rarrow=1; }
2552
-#line 2577 "pikchr.c"
2595
+#line 2620 "pikchr.c"
25532596
break;
2554
- case 60: /* boolproperty ::= INVIS */
2555
-#line 604 "pikchr.y"
2597
+ case 62: /* boolproperty ::= INVIS */
2598
+#line 613 "pikchr.y"
25562599
{p->cur->sw = 0.0;}
2557
-#line 2582 "pikchr.c"
2600
+#line 2625 "pikchr.c"
25582601
break;
2559
- case 61: /* boolproperty ::= THICK */
2560
-#line 605 "pikchr.y"
2602
+ case 63: /* boolproperty ::= THICK */
2603
+#line 614 "pikchr.y"
25612604
{p->cur->sw *= 1.5;}
2562
-#line 2587 "pikchr.c"
2605
+#line 2630 "pikchr.c"
25632606
break;
2564
- case 62: /* boolproperty ::= THIN */
2565
-#line 606 "pikchr.y"
2607
+ case 64: /* boolproperty ::= THIN */
2608
+#line 615 "pikchr.y"
25662609
{p->cur->sw *= 0.67;}
2567
-#line 2592 "pikchr.c"
2568
- break;
2569
- case 63: /* textposition ::= */
2570
-#line 608 "pikchr.y"
2571
-{yymsp[1].minor.yy34 = 0;}
2572
-#line 2597 "pikchr.c"
2573
- break;
2574
- case 64: /* textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */
2575
-#line 611 "pikchr.y"
2576
-{yylhsminor.yy34 = pik_text_position(p,yymsp[-1].minor.yy34,&yymsp[0].minor.yy0);}
2577
-#line 2602 "pikchr.c"
2578
- yymsp[-1].minor.yy34 = yylhsminor.yy34;
2579
- break;
2580
- case 65: /* position ::= expr COMMA expr */
2581
-#line 614 "pikchr.y"
2582
-{yylhsminor.yy211.x=yymsp[-2].minor.yy147; yylhsminor.yy211.y=yymsp[0].minor.yy147;}
2583
-#line 2608 "pikchr.c"
2584
- yymsp[-2].minor.yy211 = yylhsminor.yy211;
2585
- break;
2586
- case 66: /* position ::= place PLUS expr COMMA expr */
2587
-#line 616 "pikchr.y"
2588
-{yylhsminor.yy211.x=yymsp[-4].minor.yy211.x+yymsp[-2].minor.yy147; yylhsminor.yy211.y=yymsp[-4].minor.yy211.y+yymsp[0].minor.yy147;}
2589
-#line 2614 "pikchr.c"
2590
- yymsp[-4].minor.yy211 = yylhsminor.yy211;
2591
- break;
2592
- case 67: /* position ::= place MINUS expr COMMA expr */
2610
+#line 2635 "pikchr.c"
2611
+ break;
2612
+ case 65: /* textposition ::= */
25932613
#line 617 "pikchr.y"
2594
-{yylhsminor.yy211.x=yymsp[-4].minor.yy211.x-yymsp[-2].minor.yy147; yylhsminor.yy211.y=yymsp[-4].minor.yy211.y-yymsp[0].minor.yy147;}
2595
-#line 2620 "pikchr.c"
2596
- yymsp[-4].minor.yy211 = yylhsminor.yy211;
2597
- break;
2598
- case 68: /* position ::= place PLUS LP expr COMMA expr RP */
2599
-#line 619 "pikchr.y"
2600
-{yylhsminor.yy211.x=yymsp[-6].minor.yy211.x+yymsp[-3].minor.yy147; yylhsminor.yy211.y=yymsp[-6].minor.yy211.y+yymsp[-1].minor.yy147;}
2601
-#line 2626 "pikchr.c"
2602
- yymsp[-6].minor.yy211 = yylhsminor.yy211;
2603
- break;
2604
- case 69: /* position ::= place MINUS LP expr COMMA expr RP */
2605
-#line 621 "pikchr.y"
2606
-{yylhsminor.yy211.x=yymsp[-6].minor.yy211.x-yymsp[-3].minor.yy147; yylhsminor.yy211.y=yymsp[-6].minor.yy211.y-yymsp[-1].minor.yy147;}
2607
-#line 2632 "pikchr.c"
2608
- yymsp[-6].minor.yy211 = yylhsminor.yy211;
2609
- break;
2610
- case 70: /* position ::= LP position COMMA position RP */
2611
-#line 622 "pikchr.y"
2612
-{yymsp[-4].minor.yy211.x=yymsp[-3].minor.yy211.x; yymsp[-4].minor.yy211.y=yymsp[-1].minor.yy211.y;}
2613
-#line 2638 "pikchr.c"
2614
- break;
2615
- case 71: /* position ::= LP position RP */
2614
+{yymsp[1].minor.yy156 = 0;}
2615
+#line 2640 "pikchr.c"
2616
+ break;
2617
+ case 66: /* textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */
2618
+#line 620 "pikchr.y"
2619
+{yylhsminor.yy156 = pik_text_position(p,yymsp[-1].minor.yy156,&yymsp[0].minor.yy0);}
2620
+#line 2645 "pikchr.c"
2621
+ yymsp[-1].minor.yy156 = yylhsminor.yy156;
2622
+ break;
2623
+ case 67: /* position ::= expr COMMA expr */
26162624
#line 623 "pikchr.y"
2617
-{yymsp[-2].minor.yy211=yymsp[-1].minor.yy211;}
2618
-#line 2643 "pikchr.c"
2625
+{yylhsminor.yy85.x=yymsp[-2].minor.yy215; yylhsminor.yy85.y=yymsp[0].minor.yy215;}
2626
+#line 2651 "pikchr.c"
2627
+ yymsp[-2].minor.yy85 = yylhsminor.yy85;
26192628
break;
2620
- case 72: /* position ::= expr between position AND position */
2629
+ case 68: /* position ::= place PLUS expr COMMA expr */
26212630
#line 625 "pikchr.y"
2622
-{yylhsminor.yy211 = pik_position_between(p,yymsp[-4].minor.yy147,yymsp[-2].minor.yy211,yymsp[0].minor.yy211);}
2623
-#line 2648 "pikchr.c"
2624
- yymsp[-4].minor.yy211 = yylhsminor.yy211;
2625
- break;
2626
- case 73: /* position ::= expr LT position COMMA position GT */
2627
-#line 627 "pikchr.y"
2628
-{yylhsminor.yy211 = pik_position_between(p,yymsp[-5].minor.yy147,yymsp[-3].minor.yy211,yymsp[-1].minor.yy211);}
2629
-#line 2654 "pikchr.c"
2630
- yymsp[-5].minor.yy211 = yylhsminor.yy211;
2631
- break;
2632
- case 74: /* position ::= expr ABOVE position */
2631
+{yylhsminor.yy85.x=yymsp[-4].minor.yy85.x+yymsp[-2].minor.yy215; yylhsminor.yy85.y=yymsp[-4].minor.yy85.y+yymsp[0].minor.yy215;}
2632
+#line 2657 "pikchr.c"
2633
+ yymsp[-4].minor.yy85 = yylhsminor.yy85;
2634
+ break;
2635
+ case 69: /* position ::= place MINUS expr COMMA expr */
2636
+#line 626 "pikchr.y"
2637
+{yylhsminor.yy85.x=yymsp[-4].minor.yy85.x-yymsp[-2].minor.yy215; yylhsminor.yy85.y=yymsp[-4].minor.yy85.y-yymsp[0].minor.yy215;}
2638
+#line 2663 "pikchr.c"
2639
+ yymsp[-4].minor.yy85 = yylhsminor.yy85;
2640
+ break;
2641
+ case 70: /* position ::= place PLUS LP expr COMMA expr RP */
26332642
#line 628 "pikchr.y"
2634
-{yylhsminor.yy211=yymsp[0].minor.yy211; yylhsminor.yy211.y += yymsp[-2].minor.yy147;}
2635
-#line 2660 "pikchr.c"
2636
- yymsp[-2].minor.yy211 = yylhsminor.yy211;
2637
- break;
2638
- case 75: /* position ::= expr BELOW position */
2639
-#line 629 "pikchr.y"
2640
-{yylhsminor.yy211=yymsp[0].minor.yy211; yylhsminor.yy211.y -= yymsp[-2].minor.yy147;}
2641
-#line 2666 "pikchr.c"
2642
- yymsp[-2].minor.yy211 = yylhsminor.yy211;
2643
- break;
2644
- case 76: /* position ::= expr LEFT OF position */
2643
+{yylhsminor.yy85.x=yymsp[-6].minor.yy85.x+yymsp[-3].minor.yy215; yylhsminor.yy85.y=yymsp[-6].minor.yy85.y+yymsp[-1].minor.yy215;}
2644
+#line 2669 "pikchr.c"
2645
+ yymsp[-6].minor.yy85 = yylhsminor.yy85;
2646
+ break;
2647
+ case 71: /* position ::= place MINUS LP expr COMMA expr RP */
26452648
#line 630 "pikchr.y"
2646
-{yylhsminor.yy211=yymsp[0].minor.yy211; yylhsminor.yy211.x -= yymsp[-3].minor.yy147;}
2647
-#line 2672 "pikchr.c"
2648
- yymsp[-3].minor.yy211 = yylhsminor.yy211;
2649
+{yylhsminor.yy85.x=yymsp[-6].minor.yy85.x-yymsp[-3].minor.yy215; yylhsminor.yy85.y=yymsp[-6].minor.yy85.y-yymsp[-1].minor.yy215;}
2650
+#line 2675 "pikchr.c"
2651
+ yymsp[-6].minor.yy85 = yylhsminor.yy85;
26492652
break;
2650
- case 77: /* position ::= expr RIGHT OF position */
2653
+ case 72: /* position ::= LP position COMMA position RP */
26512654
#line 631 "pikchr.y"
2652
-{yylhsminor.yy211=yymsp[0].minor.yy211; yylhsminor.yy211.x += yymsp[-3].minor.yy147;}
2653
-#line 2678 "pikchr.c"
2654
- yymsp[-3].minor.yy211 = yylhsminor.yy211;
2655
- break;
2656
- case 78: /* position ::= expr EDGEPT OF position */
2657
-#line 633 "pikchr.y"
2658
-{yylhsminor.yy211 = pik_position_at_hdg(p,yymsp[-3].minor.yy147,&yymsp[-2].minor.yy0,yymsp[0].minor.yy211);}
2659
-#line 2684 "pikchr.c"
2660
- yymsp[-3].minor.yy211 = yylhsminor.yy211;
2661
- break;
2662
- case 79: /* position ::= expr HEADING expr FROM position */
2663
-#line 635 "pikchr.y"
2664
-{yylhsminor.yy211 = pik_position_at_angle(p,yymsp[-4].minor.yy147,yymsp[-2].minor.yy147,yymsp[0].minor.yy211);}
2665
-#line 2690 "pikchr.c"
2666
- yymsp[-4].minor.yy211 = yylhsminor.yy211;
2667
- break;
2668
- case 80: /* place ::= object */
2669
-#line 641 "pikchr.y"
2670
-{yylhsminor.yy211 = pik_place_of_elem(p,yymsp[0].minor.yy174,0);}
2671
-#line 2696 "pikchr.c"
2672
- yymsp[0].minor.yy211 = yylhsminor.yy211;
2673
- break;
2674
- case 81: /* place ::= object DOT_E edge */
2675
- case 82: /* place ::= object DOT_L START */ yytestcase(yyruleno==82);
2676
- case 83: /* place ::= object DOT_L END */ yytestcase(yyruleno==83);
2655
+{yymsp[-4].minor.yy85.x=yymsp[-3].minor.yy85.x; yymsp[-4].minor.yy85.y=yymsp[-1].minor.yy85.y;}
2656
+#line 2681 "pikchr.c"
2657
+ break;
2658
+ case 73: /* position ::= LP position RP */
2659
+#line 632 "pikchr.y"
2660
+{yymsp[-2].minor.yy85=yymsp[-1].minor.yy85;}
2661
+#line 2686 "pikchr.c"
2662
+ break;
2663
+ case 74: /* position ::= expr between position AND position */
2664
+#line 634 "pikchr.y"
2665
+{yylhsminor.yy85 = pik_position_between(p,yymsp[-4].minor.yy215,yymsp[-2].minor.yy85,yymsp[0].minor.yy85);}
2666
+#line 2691 "pikchr.c"
2667
+ yymsp[-4].minor.yy85 = yylhsminor.yy85;
2668
+ break;
2669
+ case 75: /* position ::= expr LT position COMMA position GT */
2670
+#line 636 "pikchr.y"
2671
+{yylhsminor.yy85 = pik_position_between(p,yymsp[-5].minor.yy215,yymsp[-3].minor.yy85,yymsp[-1].minor.yy85);}
2672
+#line 2697 "pikchr.c"
2673
+ yymsp[-5].minor.yy85 = yylhsminor.yy85;
2674
+ break;
2675
+ case 76: /* position ::= expr ABOVE position */
2676
+#line 637 "pikchr.y"
2677
+{yylhsminor.yy85=yymsp[0].minor.yy85; yylhsminor.yy85.y += yymsp[-2].minor.yy215;}
2678
+#line 2703 "pikchr.c"
2679
+ yymsp[-2].minor.yy85 = yylhsminor.yy85;
2680
+ break;
2681
+ case 77: /* position ::= expr BELOW position */
2682
+#line 638 "pikchr.y"
2683
+{yylhsminor.yy85=yymsp[0].minor.yy85; yylhsminor.yy85.y -= yymsp[-2].minor.yy215;}
2684
+#line 2709 "pikchr.c"
2685
+ yymsp[-2].minor.yy85 = yylhsminor.yy85;
2686
+ break;
2687
+ case 78: /* position ::= expr LEFT OF position */
2688
+#line 639 "pikchr.y"
2689
+{yylhsminor.yy85=yymsp[0].minor.yy85; yylhsminor.yy85.x -= yymsp[-3].minor.yy215;}
2690
+#line 2715 "pikchr.c"
2691
+ yymsp[-3].minor.yy85 = yylhsminor.yy85;
2692
+ break;
2693
+ case 79: /* position ::= expr RIGHT OF position */
2694
+#line 640 "pikchr.y"
2695
+{yylhsminor.yy85=yymsp[0].minor.yy85; yylhsminor.yy85.x += yymsp[-3].minor.yy215;}
2696
+#line 2721 "pikchr.c"
2697
+ yymsp[-3].minor.yy85 = yylhsminor.yy85;
2698
+ break;
2699
+ case 80: /* position ::= expr EDGEPT OF position */
26772700
#line 642 "pikchr.y"
2678
-{yylhsminor.yy211 = pik_place_of_elem(p,yymsp[-2].minor.yy174,&yymsp[0].minor.yy0);}
2679
-#line 2704 "pikchr.c"
2680
- yymsp[-2].minor.yy211 = yylhsminor.yy211;
2681
- break;
2682
- case 84: /* place ::= START OF object */
2683
- case 85: /* place ::= END OF object */ yytestcase(yyruleno==85);
2684
- case 86: /* place ::= edge OF object */ yytestcase(yyruleno==86);
2685
-#line 645 "pikchr.y"
2686
-{yylhsminor.yy211 = pik_place_of_elem(p,yymsp[0].minor.yy174,&yymsp[-2].minor.yy0);}
2687
-#line 2712 "pikchr.c"
2688
- yymsp[-2].minor.yy211 = yylhsminor.yy211;
2689
- break;
2690
- case 87: /* place ::= NTH VERTEX OF object */
2691
-#line 648 "pikchr.y"
2692
-{yylhsminor.yy211 = pik_nth_vertex(p,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,yymsp[0].minor.yy174);}
2693
-#line 2718 "pikchr.c"
2694
- yymsp[-3].minor.yy211 = yylhsminor.yy211;
2695
- break;
2696
- case 88: /* object ::= nth */
2697
-#line 651 "pikchr.y"
2698
-{yylhsminor.yy174 = pik_find_nth(p,0,&yymsp[0].minor.yy0);}
2699
-#line 2724 "pikchr.c"
2700
- yymsp[0].minor.yy174 = yylhsminor.yy174;
2701
- break;
2702
- case 89: /* object ::= nth OF|IN object */
2703
-#line 652 "pikchr.y"
2704
-{yylhsminor.yy174 = pik_find_nth(p,yymsp[0].minor.yy174,&yymsp[-2].minor.yy0);}
2705
-#line 2730 "pikchr.c"
2706
- yymsp[-2].minor.yy174 = yylhsminor.yy174;
2707
- break;
2708
- case 90: /* objectname ::= PLACENAME */
2709
-#line 654 "pikchr.y"
2710
-{yylhsminor.yy174 = pik_find_byname(p,0,&yymsp[0].minor.yy0);}
2711
-#line 2736 "pikchr.c"
2712
- yymsp[0].minor.yy174 = yylhsminor.yy174;
2713
- break;
2714
- case 91: /* objectname ::= objectname DOT_U PLACENAME */
2701
+{yylhsminor.yy85 = pik_position_at_hdg(p,yymsp[-3].minor.yy215,&yymsp[-2].minor.yy0,yymsp[0].minor.yy85);}
2702
+#line 2727 "pikchr.c"
2703
+ yymsp[-3].minor.yy85 = yylhsminor.yy85;
2704
+ break;
2705
+ case 81: /* position ::= expr HEADING expr FROM position */
2706
+#line 644 "pikchr.y"
2707
+{yylhsminor.yy85 = pik_position_at_angle(p,yymsp[-4].minor.yy215,yymsp[-2].minor.yy215,yymsp[0].minor.yy85);}
2708
+#line 2733 "pikchr.c"
2709
+ yymsp[-4].minor.yy85 = yylhsminor.yy85;
2710
+ break;
2711
+ case 82: /* place ::= edge OF object */
27152712
#line 656 "pikchr.y"
2716
-{yylhsminor.yy174 = pik_find_byname(p,yymsp[-2].minor.yy174,&yymsp[0].minor.yy0);}
2717
-#line 2742 "pikchr.c"
2718
- yymsp[-2].minor.yy174 = yylhsminor.yy174;
2713
+{yylhsminor.yy85 = pik_place_of_elem(p,yymsp[0].minor.yy118,&yymsp[-2].minor.yy0);}
2714
+#line 2739 "pikchr.c"
2715
+ yymsp[-2].minor.yy85 = yylhsminor.yy85;
2716
+ break;
2717
+ case 83: /* place2 ::= object */
2718
+#line 657 "pikchr.y"
2719
+{yylhsminor.yy85 = pik_place_of_elem(p,yymsp[0].minor.yy118,0);}
2720
+#line 2745 "pikchr.c"
2721
+ yymsp[0].minor.yy85 = yylhsminor.yy85;
27192722
break;
2720
- case 92: /* nth ::= NTH CLASSNAME */
2723
+ case 84: /* place2 ::= object DOT_E edge */
27212724
#line 658 "pikchr.y"
2725
+{yylhsminor.yy85 = pik_place_of_elem(p,yymsp[-2].minor.yy118,&yymsp[0].minor.yy0);}
2726
+#line 2751 "pikchr.c"
2727
+ yymsp[-2].minor.yy85 = yylhsminor.yy85;
2728
+ break;
2729
+ case 85: /* place2 ::= NTH VERTEX OF object */
2730
+#line 659 "pikchr.y"
2731
+{yylhsminor.yy85 = pik_nth_vertex(p,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,yymsp[0].minor.yy118);}
2732
+#line 2757 "pikchr.c"
2733
+ yymsp[-3].minor.yy85 = yylhsminor.yy85;
2734
+ break;
2735
+ case 86: /* object ::= nth */
2736
+#line 670 "pikchr.y"
2737
+{yylhsminor.yy118 = pik_find_nth(p,0,&yymsp[0].minor.yy0);}
2738
+#line 2763 "pikchr.c"
2739
+ yymsp[0].minor.yy118 = yylhsminor.yy118;
2740
+ break;
2741
+ case 87: /* object ::= nth OF|IN object */
2742
+#line 671 "pikchr.y"
2743
+{yylhsminor.yy118 = pik_find_nth(p,yymsp[0].minor.yy118,&yymsp[-2].minor.yy0);}
2744
+#line 2769 "pikchr.c"
2745
+ yymsp[-2].minor.yy118 = yylhsminor.yy118;
2746
+ break;
2747
+ case 88: /* objectname ::= PLACENAME */
2748
+#line 673 "pikchr.y"
2749
+{yylhsminor.yy118 = pik_find_byname(p,0,&yymsp[0].minor.yy0);}
2750
+#line 2775 "pikchr.c"
2751
+ yymsp[0].minor.yy118 = yylhsminor.yy118;
2752
+ break;
2753
+ case 89: /* objectname ::= objectname DOT_U PLACENAME */
2754
+#line 675 "pikchr.y"
2755
+{yylhsminor.yy118 = pik_find_byname(p,yymsp[-2].minor.yy118,&yymsp[0].minor.yy0);}
2756
+#line 2781 "pikchr.c"
2757
+ yymsp[-2].minor.yy118 = yylhsminor.yy118;
2758
+ break;
2759
+ case 90: /* nth ::= NTH CLASSNAME */
2760
+#line 677 "pikchr.y"
27222761
{yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-1].minor.yy0); }
2723
-#line 2748 "pikchr.c"
2762
+#line 2787 "pikchr.c"
27242763
yymsp[-1].minor.yy0 = yylhsminor.yy0;
27252764
break;
2726
- case 93: /* nth ::= NTH LAST CLASSNAME */
2727
-#line 659 "pikchr.y"
2765
+ case 91: /* nth ::= NTH LAST CLASSNAME */
2766
+#line 678 "pikchr.y"
27282767
{yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-2].minor.yy0); }
2729
-#line 2754 "pikchr.c"
2768
+#line 2793 "pikchr.c"
27302769
yymsp[-2].minor.yy0 = yylhsminor.yy0;
27312770
break;
2732
- case 94: /* nth ::= LAST CLASSNAME */
2733
-#line 660 "pikchr.y"
2771
+ case 92: /* nth ::= LAST CLASSNAME */
2772
+#line 679 "pikchr.y"
27342773
{yymsp[-1].minor.yy0=yymsp[0].minor.yy0; yymsp[-1].minor.yy0.eCode = -1;}
2735
-#line 2760 "pikchr.c"
2774
+#line 2799 "pikchr.c"
27362775
break;
2737
- case 95: /* nth ::= LAST */
2738
-#line 661 "pikchr.y"
2776
+ case 93: /* nth ::= LAST */
2777
+#line 680 "pikchr.y"
27392778
{yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -1;}
2740
-#line 2765 "pikchr.c"
2779
+#line 2804 "pikchr.c"
27412780
yymsp[0].minor.yy0 = yylhsminor.yy0;
27422781
break;
2743
- case 96: /* nth ::= NTH LB RB */
2744
-#line 662 "pikchr.y"
2782
+ case 94: /* nth ::= NTH LB RB */
2783
+#line 681 "pikchr.y"
27452784
{yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-2].minor.yy0);}
2746
-#line 2771 "pikchr.c"
2785
+#line 2810 "pikchr.c"
27472786
yymsp[-2].minor.yy0 = yylhsminor.yy0;
27482787
break;
2749
- case 97: /* nth ::= NTH LAST LB RB */
2750
-#line 663 "pikchr.y"
2788
+ case 95: /* nth ::= NTH LAST LB RB */
2789
+#line 682 "pikchr.y"
27512790
{yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-3].minor.yy0);}
2752
-#line 2777 "pikchr.c"
2791
+#line 2816 "pikchr.c"
27532792
yymsp[-3].minor.yy0 = yylhsminor.yy0;
27542793
break;
2755
- case 98: /* nth ::= LAST LB RB */
2756
-#line 664 "pikchr.y"
2757
-{yymsp[-2].minor.yy0=yymsp[-1].minor.yy0; yymsp[-2].minor.yy0.eCode = -1; }
2758
-#line 2783 "pikchr.c"
2759
- break;
2760
- case 99: /* expr ::= expr PLUS expr */
2761
-#line 666 "pikchr.y"
2762
-{yylhsminor.yy147=yymsp[-2].minor.yy147+yymsp[0].minor.yy147;}
2763
-#line 2788 "pikchr.c"
2764
- yymsp[-2].minor.yy147 = yylhsminor.yy147;
2765
- break;
2766
- case 100: /* expr ::= expr MINUS expr */
2767
-#line 667 "pikchr.y"
2768
-{yylhsminor.yy147=yymsp[-2].minor.yy147-yymsp[0].minor.yy147;}
2769
-#line 2794 "pikchr.c"
2770
- yymsp[-2].minor.yy147 = yylhsminor.yy147;
2771
- break;
2772
- case 101: /* expr ::= expr STAR expr */
2773
-#line 668 "pikchr.y"
2774
-{yylhsminor.yy147=yymsp[-2].minor.yy147*yymsp[0].minor.yy147;}
2775
-#line 2800 "pikchr.c"
2776
- yymsp[-2].minor.yy147 = yylhsminor.yy147;
2777
- break;
2778
- case 102: /* expr ::= expr SLASH expr */
2779
-#line 669 "pikchr.y"
2780
-{
2781
- if( yymsp[0].minor.yy147==0.0 ){ pik_error(p, &yymsp[-1].minor.yy0, "division by zero"); yylhsminor.yy147 = 0.0; }
2782
- else{ yylhsminor.yy147 = yymsp[-2].minor.yy147/yymsp[0].minor.yy147; }
2783
-}
2784
-#line 2809 "pikchr.c"
2785
- yymsp[-2].minor.yy147 = yylhsminor.yy147;
2786
- break;
2787
- case 103: /* expr ::= MINUS expr */
2788
-#line 673 "pikchr.y"
2789
-{yymsp[-1].minor.yy147=-yymsp[0].minor.yy147;}
2790
-#line 2815 "pikchr.c"
2791
- break;
2792
- case 104: /* expr ::= PLUS expr */
2793
-#line 674 "pikchr.y"
2794
-{yymsp[-1].minor.yy147=yymsp[0].minor.yy147;}
2795
-#line 2820 "pikchr.c"
2796
- break;
2797
- case 105: /* expr ::= LP expr RP */
2798
-#line 675 "pikchr.y"
2799
-{yymsp[-2].minor.yy147=yymsp[-1].minor.yy147;}
2800
-#line 2825 "pikchr.c"
2801
- break;
2802
- case 106: /* expr ::= NUMBER */
2803
-#line 676 "pikchr.y"
2804
-{yylhsminor.yy147=pik_atof(p,&yymsp[0].minor.yy0);}
2805
-#line 2830 "pikchr.c"
2806
- yymsp[0].minor.yy147 = yylhsminor.yy147;
2807
- break;
2808
- case 107: /* expr ::= ID */
2809
-#line 677 "pikchr.y"
2810
-{yylhsminor.yy147=pik_get_var(p,&yymsp[0].minor.yy0);}
2811
-#line 2836 "pikchr.c"
2812
- yymsp[0].minor.yy147 = yylhsminor.yy147;
2813
- break;
2814
- case 108: /* expr ::= FUNC1 LP expr RP */
2815
-#line 678 "pikchr.y"
2816
-{yylhsminor.yy147 = pik_func(p,&yymsp[-3].minor.yy0,yymsp[-1].minor.yy147,0.0);}
2817
-#line 2842 "pikchr.c"
2818
- yymsp[-3].minor.yy147 = yylhsminor.yy147;
2819
- break;
2820
- case 109: /* expr ::= FUNC2 LP expr COMMA expr RP */
2821
-#line 679 "pikchr.y"
2822
-{yylhsminor.yy147 = pik_func(p,&yymsp[-5].minor.yy0,yymsp[-3].minor.yy147,yymsp[-1].minor.yy147);}
2823
-#line 2848 "pikchr.c"
2824
- yymsp[-5].minor.yy147 = yylhsminor.yy147;
2825
- break;
2826
- case 110: /* expr ::= object DOT_L locproperty */
2827
- case 111: /* expr ::= object DOT_L numproperty */ yytestcase(yyruleno==111);
2828
- case 112: /* expr ::= object DOT_L dashproperty */ yytestcase(yyruleno==112);
2829
- case 113: /* expr ::= object DOT_L colorproperty */ yytestcase(yyruleno==113);
2830
-#line 681 "pikchr.y"
2831
-{yylhsminor.yy147=pik_property_of(p,yymsp[-2].minor.yy174,&yymsp[0].minor.yy0);}
2832
-#line 2857 "pikchr.c"
2833
- yymsp[-2].minor.yy147 = yylhsminor.yy147;
2834
- break;
2835
- case 114: /* expr ::= object DOT_E edge DOT_L X */
2836
-#line 685 "pikchr.y"
2837
-{yylhsminor.yy147=pik_place_of_elem(p,yymsp[-4].minor.yy174,&yymsp[-2].minor.yy0).x;}
2838
-#line 2863 "pikchr.c"
2839
- yymsp[-4].minor.yy147 = yylhsminor.yy147;
2840
- break;
2841
- case 115: /* expr ::= object DOT_E edge DOT_L Y */
2842
-#line 686 "pikchr.y"
2843
-{yylhsminor.yy147=pik_place_of_elem(p,yymsp[-4].minor.yy174,&yymsp[-2].minor.yy0).y;}
2844
-#line 2869 "pikchr.c"
2845
- yymsp[-4].minor.yy147 = yylhsminor.yy147;
2846
- break;
2847
- case 116: /* expr ::= LP locproperty OF object RP */
2848
- case 117: /* expr ::= LP dashproperty OF object RP */ yytestcase(yyruleno==117);
2849
- case 118: /* expr ::= LP numproperty OF object RP */ yytestcase(yyruleno==118);
2850
- case 119: /* expr ::= LP colorproperty OF object RP */ yytestcase(yyruleno==119);
2851
-#line 687 "pikchr.y"
2852
-{yymsp[-4].minor.yy147=pik_property_of(p,yymsp[-1].minor.yy174,&yymsp[-3].minor.yy0);}
2853
-#line 2878 "pikchr.c"
2854
- break;
2855
- case 120: /* expr ::= NTH VERTEX OF object DOT_L X */
2856
-#line 693 "pikchr.y"
2857
-{yylhsminor.yy147 = pik_nth_vertex(p,&yymsp[-5].minor.yy0,&yymsp[-4].minor.yy0,yymsp[-2].minor.yy174).x;}
2858
-#line 2883 "pikchr.c"
2859
- yymsp[-5].minor.yy147 = yylhsminor.yy147;
2860
- break;
2861
- case 121: /* expr ::= NTH VERTEX OF object DOT_L Y */
2862
-#line 695 "pikchr.y"
2863
-{yylhsminor.yy147 = pik_nth_vertex(p,&yymsp[-5].minor.yy0,&yymsp[-4].minor.yy0,yymsp[-2].minor.yy174).y;}
2864
-#line 2889 "pikchr.c"
2865
- yymsp[-5].minor.yy147 = yylhsminor.yy147;
2794
+ case 96: /* nth ::= LAST LB RB */
2795
+#line 683 "pikchr.y"
2796
+{yymsp[-2].minor.yy0=yymsp[-1].minor.yy0; yymsp[-2].minor.yy0.eCode = -1; }
2797
+#line 2822 "pikchr.c"
2798
+ break;
2799
+ case 97: /* expr ::= expr PLUS expr */
2800
+#line 685 "pikchr.y"
2801
+{yylhsminor.yy215=yymsp[-2].minor.yy215+yymsp[0].minor.yy215;}
2802
+#line 2827 "pikchr.c"
2803
+ yymsp[-2].minor.yy215 = yylhsminor.yy215;
2804
+ break;
2805
+ case 98: /* expr ::= expr MINUS expr */
2806
+#line 686 "pikchr.y"
2807
+{yylhsminor.yy215=yymsp[-2].minor.yy215-yymsp[0].minor.yy215;}
2808
+#line 2833 "pikchr.c"
2809
+ yymsp[-2].minor.yy215 = yylhsminor.yy215;
2810
+ break;
2811
+ case 99: /* expr ::= expr STAR expr */
2812
+#line 687 "pikchr.y"
2813
+{yylhsminor.yy215=yymsp[-2].minor.yy215*yymsp[0].minor.yy215;}
2814
+#line 2839 "pikchr.c"
2815
+ yymsp[-2].minor.yy215 = yylhsminor.yy215;
2816
+ break;
2817
+ case 100: /* expr ::= expr SLASH expr */
2818
+#line 688 "pikchr.y"
2819
+{
2820
+ if( yymsp[0].minor.yy215==0.0 ){ pik_error(p, &yymsp[-1].minor.yy0, "division by zero"); yylhsminor.yy215 = 0.0; }
2821
+ else{ yylhsminor.yy215 = yymsp[-2].minor.yy215/yymsp[0].minor.yy215; }
2822
+}
2823
+#line 2848 "pikchr.c"
2824
+ yymsp[-2].minor.yy215 = yylhsminor.yy215;
2825
+ break;
2826
+ case 101: /* expr ::= MINUS expr */
2827
+#line 692 "pikchr.y"
2828
+{yymsp[-1].minor.yy215=-yymsp[0].minor.yy215;}
2829
+#line 2854 "pikchr.c"
2830
+ break;
2831
+ case 102: /* expr ::= PLUS expr */
2832
+#line 693 "pikchr.y"
2833
+{yymsp[-1].minor.yy215=yymsp[0].minor.yy215;}
2834
+#line 2859 "pikchr.c"
2835
+ break;
2836
+ case 103: /* expr ::= LP expr RP */
2837
+#line 694 "pikchr.y"
2838
+{yymsp[-2].minor.yy215=yymsp[-1].minor.yy215;}
2839
+#line 2864 "pikchr.c"
2840
+ break;
2841
+ case 104: /* expr ::= NUMBER */
2842
+#line 695 "pikchr.y"
2843
+{yylhsminor.yy215=pik_atof(p,&yymsp[0].minor.yy0);}
2844
+#line 2869 "pikchr.c"
2845
+ yymsp[0].minor.yy215 = yylhsminor.yy215;
2846
+ break;
2847
+ case 105: /* expr ::= ID */
2848
+#line 696 "pikchr.y"
2849
+{yylhsminor.yy215=pik_get_var(p,&yymsp[0].minor.yy0);}
2850
+#line 2875 "pikchr.c"
2851
+ yymsp[0].minor.yy215 = yylhsminor.yy215;
2852
+ break;
2853
+ case 106: /* expr ::= FUNC1 LP expr RP */
2854
+#line 697 "pikchr.y"
2855
+{yylhsminor.yy215 = pik_func(p,&yymsp[-3].minor.yy0,yymsp[-1].minor.yy215,0.0);}
2856
+#line 2881 "pikchr.c"
2857
+ yymsp[-3].minor.yy215 = yylhsminor.yy215;
2858
+ break;
2859
+ case 107: /* expr ::= FUNC2 LP expr COMMA expr RP */
2860
+#line 698 "pikchr.y"
2861
+{yylhsminor.yy215 = pik_func(p,&yymsp[-5].minor.yy0,yymsp[-3].minor.yy215,yymsp[-1].minor.yy215);}
2862
+#line 2887 "pikchr.c"
2863
+ yymsp[-5].minor.yy215 = yylhsminor.yy215;
2864
+ break;
2865
+ case 108: /* expr ::= place2 DOT_XY X */
2866
+#line 699 "pikchr.y"
2867
+{yylhsminor.yy215 = yymsp[-2].minor.yy85.x;}
2868
+#line 2893 "pikchr.c"
2869
+ yymsp[-2].minor.yy215 = yylhsminor.yy215;
2870
+ break;
2871
+ case 109: /* expr ::= place2 DOT_XY Y */
2872
+#line 700 "pikchr.y"
2873
+{yylhsminor.yy215 = yymsp[-2].minor.yy85.y;}
2874
+#line 2899 "pikchr.c"
2875
+ yymsp[-2].minor.yy215 = yylhsminor.yy215;
2876
+ break;
2877
+ case 110: /* expr ::= object DOT_L numproperty */
2878
+ case 111: /* expr ::= object DOT_L dashproperty */ yytestcase(yyruleno==111);
2879
+ case 112: /* expr ::= object DOT_L colorproperty */ yytestcase(yyruleno==112);
2880
+#line 701 "pikchr.y"
2881
+{yylhsminor.yy215=pik_property_of(p,yymsp[-2].minor.yy118,&yymsp[0].minor.yy0);}
2882
+#line 2907 "pikchr.c"
2883
+ yymsp[-2].minor.yy215 = yylhsminor.yy215;
28662884
break;
28672885
default:
2868
- /* (122) lvalue ::= ID */ yytestcase(yyruleno==122);
2869
- /* (123) lvalue ::= FILL */ yytestcase(yyruleno==123);
2870
- /* (124) lvalue ::= COLOR */ yytestcase(yyruleno==124);
2871
- /* (125) lvalue ::= THICKNESS */ yytestcase(yyruleno==125);
2872
- /* (126) rvalue ::= expr */ yytestcase(yyruleno==126);
2873
- /* (127) print ::= PRINT */ yytestcase(yyruleno==127);
2874
- /* (128) prlist ::= pritem (OPTIMIZED OUT) */ assert(yyruleno!=128);
2875
- /* (129) prlist ::= prlist prsep pritem */ yytestcase(yyruleno==129);
2876
- /* (130) direction ::= UP */ yytestcase(yyruleno==130);
2877
- /* (131) direction ::= DOWN */ yytestcase(yyruleno==131);
2878
- /* (132) direction ::= LEFT */ yytestcase(yyruleno==132);
2879
- /* (133) direction ::= RIGHT */ yytestcase(yyruleno==133);
2880
- /* (134) attribute_list ::= alist */ yytestcase(yyruleno==134);
2881
- /* (135) alist ::= */ yytestcase(yyruleno==135);
2882
- /* (136) alist ::= alist attribute */ yytestcase(yyruleno==136);
2883
- /* (137) attribute ::= boolproperty (OPTIMIZED OUT) */ assert(yyruleno!=137);
2884
- /* (138) attribute ::= WITH withclause */ yytestcase(yyruleno==138);
2885
- /* (139) go ::= GO */ yytestcase(yyruleno==139);
2886
- /* (140) go ::= */ yytestcase(yyruleno==140);
2887
- /* (141) even ::= UNTIL EVEN WITH */ yytestcase(yyruleno==141);
2888
- /* (142) even ::= EVEN WITH */ yytestcase(yyruleno==142);
2889
- /* (143) dashproperty ::= DOTTED */ yytestcase(yyruleno==143);
2890
- /* (144) dashproperty ::= DASHED */ yytestcase(yyruleno==144);
2891
- /* (145) colorproperty ::= FILL */ yytestcase(yyruleno==145);
2892
- /* (146) colorproperty ::= COLOR */ yytestcase(yyruleno==146);
2893
- /* (147) position ::= place */ yytestcase(yyruleno==147);
2894
- /* (148) between ::= WAY BETWEEN */ yytestcase(yyruleno==148);
2895
- /* (149) between ::= BETWEEN */ yytestcase(yyruleno==149);
2896
- /* (150) between ::= OF THE WAY BETWEEN */ yytestcase(yyruleno==150);
2897
- /* (151) object ::= objectname */ yytestcase(yyruleno==151);
2898
- /* (152) locproperty ::= X|Y */ yytestcase(yyruleno==152);
2899
- /* (153) edge ::= EDGEPT */ yytestcase(yyruleno==153);
2900
- /* (154) edge ::= TOP */ yytestcase(yyruleno==154);
2901
- /* (155) edge ::= BOTTOM */ yytestcase(yyruleno==155);
2902
- /* (156) edge ::= LEFT */ yytestcase(yyruleno==156);
2903
- /* (157) edge ::= RIGHT */ yytestcase(yyruleno==157);
2886
+ /* (113) lvalue ::= ID */ yytestcase(yyruleno==113);
2887
+ /* (114) lvalue ::= FILL */ yytestcase(yyruleno==114);
2888
+ /* (115) lvalue ::= COLOR */ yytestcase(yyruleno==115);
2889
+ /* (116) lvalue ::= THICKNESS */ yytestcase(yyruleno==116);
2890
+ /* (117) rvalue ::= expr */ yytestcase(yyruleno==117);
2891
+ /* (118) print ::= PRINT */ yytestcase(yyruleno==118);
2892
+ /* (119) prlist ::= pritem (OPTIMIZED OUT) */ assert(yyruleno!=119);
2893
+ /* (120) prlist ::= prlist prsep pritem */ yytestcase(yyruleno==120);
2894
+ /* (121) direction ::= UP */ yytestcase(yyruleno==121);
2895
+ /* (122) direction ::= DOWN */ yytestcase(yyruleno==122);
2896
+ /* (123) direction ::= LEFT */ yytestcase(yyruleno==123);
2897
+ /* (124) direction ::= RIGHT */ yytestcase(yyruleno==124);
2898
+ /* (125) attribute_list ::= alist */ yytestcase(yyruleno==125);
2899
+ /* (126) alist ::= */ yytestcase(yyruleno==126);
2900
+ /* (127) alist ::= alist attribute */ yytestcase(yyruleno==127);
2901
+ /* (128) attribute ::= boolproperty (OPTIMIZED OUT) */ assert(yyruleno!=128);
2902
+ /* (129) attribute ::= WITH withclause */ yytestcase(yyruleno==129);
2903
+ /* (130) go ::= GO */ yytestcase(yyruleno==130);
2904
+ /* (131) go ::= */ yytestcase(yyruleno==131);
2905
+ /* (132) even ::= UNTIL EVEN WITH */ yytestcase(yyruleno==132);
2906
+ /* (133) even ::= EVEN WITH */ yytestcase(yyruleno==133);
2907
+ /* (134) dashproperty ::= DOTTED */ yytestcase(yyruleno==134);
2908
+ /* (135) dashproperty ::= DASHED */ yytestcase(yyruleno==135);
2909
+ /* (136) colorproperty ::= FILL */ yytestcase(yyruleno==136);
2910
+ /* (137) colorproperty ::= COLOR */ yytestcase(yyruleno==137);
2911
+ /* (138) position ::= place */ yytestcase(yyruleno==138);
2912
+ /* (139) between ::= WAY BETWEEN */ yytestcase(yyruleno==139);
2913
+ /* (140) between ::= BETWEEN */ yytestcase(yyruleno==140);
2914
+ /* (141) between ::= OF THE WAY BETWEEN */ yytestcase(yyruleno==141);
2915
+ /* (142) place ::= place2 */ yytestcase(yyruleno==142);
2916
+ /* (143) edge ::= EDGEPT */ yytestcase(yyruleno==143);
2917
+ /* (144) edge ::= TOP */ yytestcase(yyruleno==144);
2918
+ /* (145) edge ::= BOTTOM */ yytestcase(yyruleno==145);
2919
+ /* (146) edge ::= START */ yytestcase(yyruleno==146);
2920
+ /* (147) edge ::= END */ yytestcase(yyruleno==147);
2921
+ /* (148) edge ::= RIGHT */ yytestcase(yyruleno==148);
2922
+ /* (149) edge ::= LEFT */ yytestcase(yyruleno==149);
2923
+ /* (150) object ::= objectname */ yytestcase(yyruleno==150);
29042924
break;
29052925
/********** End reduce actions ************************************************/
29062926
};
29072927
assert( yyruleno<sizeof(yyRuleInfoLhs)/sizeof(yyRuleInfoLhs[0]) );
29082928
yygoto = yyRuleInfoLhs[yyruleno];
@@ -2958,18 +2978,18 @@
29582978
){
29592979
pik_parserARG_FETCH
29602980
pik_parserCTX_FETCH
29612981
#define TOKEN yyminor
29622982
/************ Begin %syntax_error code ****************************************/
2963
-#line 469 "pikchr.y"
2983
+#line 471 "pikchr.y"
29642984
29652985
if( TOKEN.z && TOKEN.z[0] ){
29662986
pik_error(p, &TOKEN, "syntax error");
29672987
}else{
29682988
pik_error(p, 0, "syntax error");
29692989
}
2970
-#line 2995 "pikchr.c"
2990
+#line 3015 "pikchr.c"
29712991
/************ End %syntax_error code ******************************************/
29722992
pik_parserARG_STORE /* Suppress warning about unused %extra_argument variable */
29732993
pik_parserCTX_STORE
29742994
}
29752995
@@ -3198,11 +3218,11 @@
31983218
#else
31993219
(void)iToken;
32003220
return 0;
32013221
#endif
32023222
}
3203
-#line 705 "pikchr.y"
3223
+#line 706 "pikchr.y"
32043224
32053225
32063226
32073227
/* Chart of the 140 official HTML color names with their
32083228
** corresponding RGB value.
@@ -4634,10 +4654,44 @@
46344654
pik_append(p, "\nERROR: ", -1);
46354655
pik_append_text(p, zMsg, -1, 0);
46364656
pik_append(p, "\n", 1);
46374657
pik_append(p, "\n</pre></div>\n", -1);
46384658
}
4659
+
4660
+/*
4661
+** Process an "assert( e1 == e2 )" statement. Always return NULL.
4662
+*/
4663
+static PElem *pik_assert(Pik *p, PNum e1, PToken *pEq, PNum e2){
4664
+ char zE1[50], zE2[50], zMsg[200];
4665
+
4666
+ /* Convert the numbers to strings using %g for comparison. This
4667
+ ** limits the precision of the comparison to account for rounding error. */
4668
+ snprintf(zE1, sizeof(zE1), "%g", e1); zE1[sizeof(zE1)-1] = 0;
4669
+ snprintf(zE2, sizeof(zE2), "%g", e2); zE1[sizeof(zE2)-1] = 0;
4670
+ if( strcmp(zE1,zE2)!=0 ){
4671
+ snprintf(zMsg, sizeof(zMsg), "%s != %s", zE1, zE2);
4672
+ pik_error(p, pEq, zMsg);
4673
+ }
4674
+ return 0;
4675
+}
4676
+
4677
+/*
4678
+** Process an "assert( place1 == place2 )" statement. Always return NULL.
4679
+*/
4680
+static PElem *pik_place_assert(Pik *p, PPoint *e1, PToken *pEq, PPoint *e2){
4681
+ char zE1[100], zE2[100], zMsg[200];
4682
+
4683
+ /* Convert the numbers to strings using %g for comparison. This
4684
+ ** limits the precision of the comparison to account for rounding error. */
4685
+ snprintf(zE1, sizeof(zE1), "(%g,%g)", e1->x, e1->y); zE1[sizeof(zE1)-1] = 0;
4686
+ snprintf(zE2, sizeof(zE2), "(%g,%g)", e2->x, e2->y); zE1[sizeof(zE2)-1] = 0;
4687
+ if( strcmp(zE1,zE2)!=0 ){
4688
+ snprintf(zMsg, sizeof(zMsg), "%s != %s", zE1, zE2);
4689
+ pik_error(p, pEq, zMsg);
4690
+ }
4691
+ return 0;
4692
+}
46394693
46404694
/* Free a complete list of elements */
46414695
static void pik_elist_free(Pik *p, PEList *pEList){
46424696
int i;
46434697
if( pEList==0 ) return;
@@ -6279,10 +6333,11 @@
62796333
{ "above", 5, T_ABOVE, 0, 0 },
62806334
{ "abs", 3, T_FUNC1, FN_ABS, 0 },
62816335
{ "aligned", 7, T_ALIGNED, 0, 0 },
62826336
{ "and", 3, T_AND, 0, 0 },
62836337
{ "as", 2, T_AS, 0, 0 },
6338
+ { "assert", 6, T_ASSERT, 0, 0 },
62846339
{ "at", 2, T_AT, 0, 0 },
62856340
{ "behind", 6, T_BEHIND, 0, 0 },
62866341
{ "below", 5, T_BELOW, 0, 0 },
62876342
{ "between", 7, T_BETWEEN, 0, 0 },
62886343
{ "big", 3, T_BIG, 0, 0 },
@@ -6488,12 +6543,19 @@
64886543
case '[': { pToken->eType = T_LB; return 1; }
64896544
case ']': { pToken->eType = T_RB; return 1; }
64906545
case ',': { pToken->eType = T_COMMA; return 1; }
64916546
case ':': { pToken->eType = T_COLON; return 1; }
64926547
case '>': { pToken->eType = T_GT; return 1; }
6493
- case '=': { pToken->eType = T_ASSIGN;
6494
- pToken->eCode = T_ASSIGN; return 1; }
6548
+ case '=': {
6549
+ if( z[1]=='=' ){
6550
+ pToken->eType = T_EQ;
6551
+ return 2;
6552
+ }
6553
+ pToken->eType = T_ASSIGN;
6554
+ pToken->eCode = T_ASSIGN;
6555
+ return 1;
6556
+ }
64956557
case '-': {
64966558
if( z[1]=='>' ){
64976559
pToken->eType = T_RARROW;
64986560
return 2;
64996561
}else if( z[1]=='=' ){
@@ -6526,13 +6588,22 @@
65266588
if( islower(c1) ){
65276589
const PikWord *pFound;
65286590
for(i=2; (c = z[i])>='a' && c<='z'; i++){}
65296591
pFound = pik_find_word((const char*)z+1, i-1,
65306592
pik_keywords, count(pik_keywords));
6531
- if( pFound && (pFound->eType==T_EDGEPT || pFound->eEdge>0) ){
6593
+ if( pFound && (pFound->eEdge>0 ||
6594
+ pFound->eType==T_EDGEPT ||
6595
+ pFound->eType==T_START ||
6596
+ pFound->eType==T_END)
6597
+ ){
6598
+ /* Dot followed by something that is a 2-D place value */
65326599
pToken->eType = T_DOT_E;
6600
+ }else if( pFound->eType==T_X || pFound->eType==T_Y ){
6601
+ /* Dot followed by "x" or "y" */
6602
+ pToken->eType = T_DOT_XY;
65336603
}else{
6604
+ /* Any other "dot" */
65346605
pToken->eType = T_DOT_L;
65356606
}
65366607
return 1;
65376608
}else if( isdigit(c1) ){
65386609
i = 0;
@@ -6764,10 +6835,11 @@
67646835
** input text and the rendered SVG for all files named on the command
67656836
** line.
67666837
*/
67676838
int main(int argc, char **argv){
67686839
int i;
6840
+ int bNoEcho = 0; /* Do not the text of the script */
67696841
printf(
67706842
"<!DOCTYPE html>\n"
67716843
"<html lang=\"en-US\">\n"
67726844
"<head>\n<title>PIKCHR Test</title>\n"
67736845
"<meta charset=\"utf-8\">\n"
@@ -6781,10 +6853,23 @@
67816853
char *zOut;
67826854
char *z, c;
67836855
int j;
67846856
int w, h;
67856857
6858
+ if( argv[i][0]=='-' ){
6859
+ char *z = argv[i];
6860
+ z++;
6861
+ if( z[0]=='-' ) z++;
6862
+ if( strcmp(z,"no-echo")==0 ){
6863
+ bNoEcho = 1;
6864
+ }else
6865
+ {
6866
+ fprintf(stderr,"unknown option: \"%s\"\n", argv[i]);
6867
+ exit(1);
6868
+ }
6869
+ continue;
6870
+ }
67866871
printf("<h1>File %s</h1>\n", argv[i]);
67876872
in = fopen(argv[i], "rb");
67886873
if( in==0 ){
67896874
fprintf(stderr, "cannot open \"%s\" for reading\n", argv[i]);
67906875
continue;
@@ -6799,42 +6884,45 @@
67996884
continue;
68006885
}
68016886
sz = fread(zIn, 1, sz, in);
68026887
fclose(in);
68036888
zIn[sz] = 0;
6804
- printf("<p>Source text:</p>\n<blockquote><pre>\n");
6805
- z = zIn;
6806
- while( z[0]!=0 ){
6807
- for(j=0; (c = z[j])!=0 && c!='<' && c!='>' && c!='&'; j++){}
6808
- if( j ) printf("%.*s", j, z);
6809
- z += j+1;
6810
- j = -1;
6811
- if( c=='<' ){
6812
- printf("&lt;");
6813
- }else if( c=='>' ){
6814
- printf("&gt;");
6815
- }else if( c=='&' ){
6816
- printf("&amp;");
6817
- }else if( c==0 ){
6818
- break;
6819
- }
6820
- }
6821
- printf("</pre></blockquote>\n");
6889
+ if( !bNoEcho ){
6890
+ printf("<p>Source text:</p>\n<blockquote><pre>\n");
6891
+ z = zIn;
6892
+ while( z[0]!=0 ){
6893
+ for(j=0; (c = z[j])!=0 && c!='<' && c!='>' && c!='&'; j++){}
6894
+ if( j ) printf("%.*s", j, z);
6895
+ z += j+1;
6896
+ j = -1;
6897
+ if( c=='<' ){
6898
+ printf("&lt;");
6899
+ }else if( c=='>' ){
6900
+ printf("&gt;");
6901
+ }else if( c=='&' ){
6902
+ printf("&amp;");
6903
+ }else if( c==0 ){
6904
+ break;
6905
+ }
6906
+ }
6907
+ printf("</pre></blockquote>\n");
6908
+ }
68226909
zOut = pikchr(zIn, "pikchr", 0, &w, &h);
68236910
free(zIn);
68246911
if( zOut ){
68256912
if( w<0 ){
68266913
printf("<p>ERROR:</p>\n");
68276914
}else{
68286915
printf("<p>Output size: %d by %d</p>\n", w, h);
68296916
}
6830
- printf("<div style='border:2px solid gray;max-width:%dpx'>\n%s</div>\n",
6917
+ printf("<div style='border:3px solid lightgray;max-width:%dpx'>\n"
6918
+ "%s</div>\n",
68316919
w, zOut);
68326920
free(zOut);
68336921
}
68346922
}
68356923
printf("</body></html>\n");
68366924
return 0;
68376925
}
68386926
#endif /* PIKCHR_SHELL */
68396927
6840
-#line 6865 "pikchr.c"
6928
+#line 6953 "pikchr.c"
68416929
--- src/pikchr.c
+++ src/pikchr.c
@@ -423,13 +423,15 @@
423 static void pik_same(Pik *p, PElem*, PToken*);
424 static PPoint pik_nth_vertex(Pik *p, PToken *pNth, PToken *pErr, PElem *pElem);
425 static PToken pik_next_semantic_token(Pik *p, PToken *pThis);
426 static void pik_compute_layout_settings(Pik*);
427 static void pik_behind(Pik*,PElem*);
 
 
428
429
430 #line 456 "pikchr.c"
431 /**************** End of %include directives **********************************/
432 /* These constants specify the various numeric values for terminal symbols.
433 ***************** Begin token definitions *************************************/
434 #ifndef T_ID
435 #define T_ID 1
@@ -443,86 +445,89 @@
443 #define T_UMINUS 9
444 #define T_EOL 10
445 #define T_ASSIGN 11
446 #define T_PLACENAME 12
447 #define T_COLON 13
448 #define T_FILL 14
449 #define T_COLOR 15
450 #define T_THICKNESS 16
451 #define T_PRINT 17
452 #define T_STRING 18
453 #define T_COMMA 19
454 #define T_CLASSNAME 20
455 #define T_LB 21
456 #define T_RB 22
457 #define T_UP 23
458 #define T_DOWN 24
459 #define T_LEFT 25
460 #define T_RIGHT 26
461 #define T_CLOSE 27
462 #define T_CHOP 28
463 #define T_FROM 29
464 #define T_TO 30
465 #define T_THEN 31
466 #define T_HEADING 32
467 #define T_GO 33
468 #define T_AT 34
469 #define T_WITH 35
470 #define T_SAME 36
471 #define T_AS 37
472 #define T_FIT 38
473 #define T_BEHIND 39
474 #define T_UNTIL 40
475 #define T_EVEN 41
476 #define T_DOT_E 42
477 #define T_HEIGHT 43
478 #define T_WIDTH 44
479 #define T_RADIUS 45
480 #define T_DIAMETER 46
481 #define T_DOTTED 47
482 #define T_DASHED 48
483 #define T_CW 49
484 #define T_CCW 50
485 #define T_LARROW 51
486 #define T_RARROW 52
487 #define T_LRARROW 53
488 #define T_INVIS 54
489 #define T_THICK 55
490 #define T_THIN 56
491 #define T_CENTER 57
492 #define T_LJUST 58
493 #define T_RJUST 59
494 #define T_ABOVE 60
495 #define T_BELOW 61
496 #define T_ITALIC 62
497 #define T_BOLD 63
498 #define T_ALIGNED 64
499 #define T_BIG 65
500 #define T_SMALL 66
501 #define T_LP 67
502 #define T_RP 68
503 #define T_AND 69
504 #define T_LT 70
505 #define T_GT 71
506 #define T_WAY 72
507 #define T_BETWEEN 73
508 #define T_THE 74
509 #define T_DOT_L 75
510 #define T_START 76
511 #define T_END 77
512 #define T_NTH 78
513 #define T_VERTEX 79
514 #define T_IN 80
515 #define T_DOT_U 81
516 #define T_LAST 82
517 #define T_NUMBER 83
518 #define T_FUNC1 84
519 #define T_FUNC2 85
520 #define T_X 86
521 #define T_Y 87
522 #define T_TOP 88
523 #define T_BOTTOM 89
 
 
 
524 #endif
525 /**************** End token definitions ***************************************/
526
527 /* The next sections is a series of control #defines.
528 ** various aspects of the generated parser.
@@ -578,21 +583,21 @@
578 #ifndef INTERFACE
579 # define INTERFACE 1
580 #endif
581 /************* Begin control #defines *****************************************/
582 #define YYCODETYPE unsigned char
583 #define YYNOCODE 123
584 #define YYACTIONTYPE unsigned short int
585 #define pik_parserTOKENTYPE PToken
586 typedef union {
587 int yyinit;
588 pik_parserTOKENTYPE yy0;
589 int yy34;
590 PEList* yy80;
591 PNum yy147;
592 PElem* yy174;
593 PPoint yy211;
594 } YYMINORTYPE;
595 #ifndef YYSTACKDEPTH
596 #define YYSTACKDEPTH 100
597 #endif
598 #define pik_parserARG_SDECL
@@ -604,22 +609,22 @@
604 #define pik_parserCTX_PDECL ,Pik *p
605 #define pik_parserCTX_PARAM ,p
606 #define pik_parserCTX_FETCH Pik *p=yypParser->p;
607 #define pik_parserCTX_STORE yypParser->p=p;
608 #define YYFALLBACK 1
609 #define YYNSTATE 169
610 #define YYNRULE 158
611 #define YYNRULE_WITH_ACTION 122
612 #define YYNTOKEN 90
613 #define YY_MAX_SHIFT 168
614 #define YY_MIN_SHIFTREDUCE 290
615 #define YY_MAX_SHIFTREDUCE 447
616 #define YY_ERROR_ACTION 448
617 #define YY_ACCEPT_ACTION 449
618 #define YY_NO_ACTION 450
619 #define YY_MIN_REDUCE 451
620 #define YY_MAX_REDUCE 608
621 /************* End control #defines *******************************************/
622 #define YY_NLOOKAHEAD ((int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0])))
623
624 /* Define the yytestcase() macro to be a no-op if is not already defined
625 ** otherwise.
@@ -682,270 +687,312 @@
682 ** yy_reduce_ofst[] For each state, the offset into yy_action for
683 ** shifting non-terminals after a reduce.
684 ** yy_default[] Default action for each state.
685 **
686 *********** Begin parsing tables **********************************************/
687 #define YY_ACTTAB_COUNT (957)
688 static const YYACTIONTYPE yy_action[] = {
689 /* 0 */ 585, 502, 167, 124, 21, 125, 452, 459, 28, 451,
690 /* 10 */ 585, 70, 455, 128, 435, 436, 344, 49, 81, 27,
691 /* 20 */ 48, 30, 585, 168, 146, 449, 23, 323, 324, 10,
692 /* 30 */ 9, 34, 158, 33, 8, 71, 126, 29, 340, 59,
693 /* 40 */ 587, 77, 587, 344, 344, 344, 344, 433, 434, 345,
694 /* 50 */ 346, 347, 348, 349, 350, 351, 352, 397, 443, 562,
695 /* 60 */ 53, 54, 563, 564, 561, 457, 28, 73, 380, 143,
696 /* 70 */ 435, 436, 344, 27, 458, 116, 115, 167, 124, 306,
697 /* 80 */ 93, 446, 447, 397, 26, 310, 53, 54, 70, 118,
698 /* 90 */ 167, 124, 127, 380, 380, 22, 435, 436, 344, 344,
699 /* 100 */ 344, 344, 344, 433, 434, 72, 153, 143, 24, 155,
700 /* 110 */ 151, 157, 114, 116, 115, 167, 124, 589, 58, 57,
701 /* 120 */ 56, 55, 82, 1, 83, 344, 344, 344, 344, 433,
702 /* 130 */ 434, 60, 145, 144, 104, 12, 6, 110, 122, 396,
703 /* 140 */ 160, 159, 442, 442, 444, 445, 118, 167, 124, 5,
704 /* 150 */ 465, 397, 443, 541, 53, 54, 580, 46, 43, 112,
705 /* 160 */ 109, 7, 380, 122, 122, 396, 160, 159, 442, 442,
706 /* 170 */ 397, 443, 432, 53, 54, 446, 447, 431, 499, 167,
707 /* 180 */ 124, 380, 359, 360, 361, 130, 541, 80, 11, 308,
708 /* 190 */ 79, 412, 541, 440, 446, 447, 134, 420, 421, 422,
709 /* 200 */ 423, 438, 149, 135, 413, 414, 415, 417, 80, 75,
710 /* 210 */ 308, 79, 14, 420, 421, 422, 423, 1, 382, 164,
711 /* 220 */ 138, 136, 58, 57, 56, 55, 145, 144, 104, 141,
712 /* 230 */ 167, 124, 122, 396, 160, 159, 1, 47, 444, 445,
713 /* 240 */ 404, 405, 32, 140, 139, 145, 144, 104, 76, 15,
714 /* 250 */ 40, 122, 396, 160, 159, 110, 397, 444, 445, 53,
715 /* 260 */ 54, 16, 56, 55, 118, 167, 124, 111, 479, 301,
716 /* 270 */ 302, 303, 121, 305, 61, 435, 436, 344, 18, 17,
717 /* 280 */ 123, 35, 113, 452, 459, 28, 395, 62, 20, 455,
718 /* 290 */ 137, 439, 63, 138, 136, 58, 57, 56, 55, 64,
719 /* 300 */ 168, 410, 411, 23, 344, 344, 344, 344, 433, 434,
720 /* 310 */ 47, 117, 435, 436, 344, 397, 140, 139, 53, 54,
721 /* 320 */ 363, 110, 5, 40, 397, 19, 380, 53, 54, 2,
722 /* 330 */ 118, 167, 124, 109, 456, 380, 409, 122, 396, 160,
723 /* 340 */ 159, 344, 344, 344, 344, 433, 434, 442, 442, 384,
724 /* 350 */ 163, 18, 17, 65, 131, 129, 397, 335, 408, 53,
725 /* 360 */ 54, 20, 66, 137, 439, 383, 165, 380, 95, 397,
726 /* 370 */ 331, 407, 53, 54, 372, 373, 67, 118, 167, 124,
727 /* 380 */ 380, 5, 68, 406, 442, 442, 51, 36, 52, 468,
728 /* 390 */ 5, 25, 109, 84, 443, 381, 122, 396, 160, 159,
729 /* 400 */ 38, 109, 118, 167, 124, 122, 396, 160, 159, 397,
730 /* 410 */ 382, 164, 53, 54, 85, 69, 388, 446, 447, 73,
731 /* 420 */ 111, 143, 5, 118, 167, 124, 504, 116, 115, 167,
732 /* 430 */ 124, 386, 387, 109, 73, 5, 143, 122, 396, 160,
733 /* 440 */ 159, 503, 116, 115, 167, 124, 109, 382, 164, 450,
734 /* 450 */ 122, 396, 160, 159, 397, 166, 31, 53, 54, 537,
735 /* 460 */ 167, 124, 453, 459, 28, 380, 450, 397, 455, 142,
736 /* 470 */ 53, 54, 123, 450, 100, 5, 450, 450, 380, 168,
737 /* 480 */ 444, 445, 23, 118, 167, 124, 109, 450, 450, 450,
738 /* 490 */ 122, 396, 160, 159, 450, 354, 354, 354, 354, 354,
739 /* 500 */ 354, 354, 354, 354, 354, 450, 162, 86, 153, 123,
740 /* 510 */ 450, 155, 151, 157, 450, 450, 118, 167, 124, 450,
741 /* 520 */ 3, 450, 58, 57, 56, 55, 450, 58, 57, 56,
742 /* 530 */ 55, 109, 450, 4, 450, 122, 396, 160, 159, 536,
743 /* 540 */ 167, 124, 42, 450, 109, 450, 450, 13, 122, 396,
744 /* 550 */ 160, 159, 87, 153, 450, 450, 155, 151, 157, 450,
745 /* 560 */ 450, 118, 167, 124, 450, 99, 153, 450, 450, 155,
746 /* 570 */ 151, 157, 450, 450, 118, 167, 124, 450, 535, 167,
747 /* 580 */ 124, 73, 450, 143, 150, 167, 124, 101, 497, 116,
748 /* 590 */ 115, 167, 124, 73, 450, 143, 118, 167, 124, 450,
749 /* 600 */ 487, 116, 115, 167, 124, 450, 73, 450, 143, 450,
750 /* 610 */ 450, 110, 450, 486, 116, 115, 167, 124, 450, 450,
751 /* 620 */ 118, 167, 124, 450, 465, 450, 73, 450, 143, 78,
752 /* 630 */ 78, 450, 450, 523, 116, 115, 167, 124, 450, 73,
753 /* 640 */ 334, 143, 58, 57, 56, 55, 133, 116, 115, 167,
754 /* 650 */ 124, 73, 330, 143, 58, 57, 56, 55, 530, 116,
755 /* 660 */ 115, 167, 124, 450, 73, 450, 143, 152, 167, 124,
756 /* 670 */ 37, 529, 116, 115, 167, 124, 73, 450, 143, 154,
757 /* 680 */ 167, 124, 39, 528, 116, 115, 167, 124, 73, 450,
758 /* 690 */ 143, 58, 57, 56, 55, 527, 116, 115, 167, 124,
759 /* 700 */ 450, 73, 450, 143, 450, 450, 45, 450, 526, 116,
760 /* 710 */ 115, 167, 124, 58, 57, 56, 55, 319, 156, 167,
761 /* 720 */ 124, 73, 450, 143, 161, 167, 124, 450, 525, 116,
762 /* 730 */ 115, 167, 124, 450, 73, 450, 143, 58, 57, 56,
763 /* 740 */ 55, 147, 116, 115, 167, 124, 73, 450, 143, 450,
764 /* 750 */ 450, 443, 41, 148, 116, 115, 167, 124, 450, 73,
765 /* 760 */ 450, 143, 58, 57, 56, 55, 132, 116, 115, 167,
766 /* 770 */ 124, 73, 450, 143, 446, 447, 450, 44, 483, 116,
767 /* 780 */ 115, 167, 124, 58, 57, 56, 55, 58, 57, 56,
768 /* 790 */ 55, 74, 58, 57, 56, 55, 58, 57, 56, 55,
769 /* 800 */ 314, 395, 58, 57, 56, 55, 313, 50, 58, 57,
770 /* 810 */ 56, 55, 58, 57, 56, 55, 450, 450, 102, 58,
771 /* 820 */ 57, 56, 55, 103, 450, 450, 395, 118, 167, 124,
772 /* 830 */ 450, 88, 118, 167, 124, 89, 450, 444, 445, 105,
773 /* 840 */ 118, 167, 124, 450, 118, 167, 124, 358, 118, 167,
774 /* 850 */ 124, 399, 450, 450, 90, 450, 450, 91, 450, 450,
775 /* 860 */ 106, 450, 450, 118, 167, 124, 118, 167, 124, 118,
776 /* 870 */ 167, 124, 398, 450, 92, 450, 395, 450, 107, 450,
777 /* 880 */ 450, 108, 450, 118, 167, 124, 450, 118, 167, 124,
778 /* 890 */ 118, 167, 124, 94, 450, 450, 96, 450, 450, 97,
779 /* 900 */ 450, 450, 118, 167, 124, 118, 167, 124, 118, 167,
780 /* 910 */ 124, 450, 450, 98, 540, 167, 124, 450, 555, 450,
781 /* 920 */ 450, 554, 118, 167, 124, 450, 553, 118, 167, 124,
782 /* 930 */ 118, 167, 124, 552, 450, 118, 167, 124, 450, 119,
783 /* 940 */ 450, 450, 118, 167, 124, 120, 450, 450, 118, 167,
784 /* 950 */ 124, 450, 450, 450, 118, 167, 124,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
785 };
786 static const YYCODETYPE yy_lookahead[] = {
787 /* 0 */ 0, 103, 104, 105, 122, 90, 91, 92, 93, 0,
788 /* 10 */ 10, 3, 97, 96, 14, 15, 16, 95, 18, 10,
789 /* 20 */ 98, 99, 22, 108, 96, 110, 111, 27, 28, 29,
790 /* 30 */ 30, 31, 96, 33, 34, 35, 36, 97, 38, 39,
791 /* 40 */ 118, 119, 120, 43, 44, 45, 46, 47, 48, 49,
792 /* 50 */ 50, 51, 52, 53, 54, 55, 56, 1, 2, 95,
793 /* 60 */ 4, 5, 98, 99, 100, 92, 93, 94, 12, 96,
794 /* 70 */ 14, 15, 16, 10, 101, 102, 103, 104, 105, 19,
795 /* 80 */ 94, 25, 26, 1, 114, 22, 4, 5, 80, 103,
796 /* 90 */ 104, 105, 96, 12, 12, 109, 14, 15, 16, 43,
797 /* 100 */ 44, 45, 46, 47, 48, 94, 95, 96, 116, 98,
798 /* 110 */ 99, 100, 101, 102, 103, 104, 105, 121, 4, 5,
799 /* 120 */ 6, 7, 106, 67, 106, 43, 44, 45, 46, 47,
800 /* 130 */ 48, 37, 76, 77, 78, 19, 34, 94, 82, 83,
801 /* 140 */ 84, 85, 86, 87, 88, 89, 103, 104, 105, 67,
802 /* 150 */ 107, 1, 2, 42, 4, 5, 113, 4, 5, 78,
803 /* 160 */ 78, 34, 12, 82, 82, 83, 84, 85, 86, 87,
804 /* 170 */ 1, 2, 35, 4, 5, 25, 26, 35, 103, 104,
805 /* 180 */ 105, 12, 68, 68, 68, 41, 75, 18, 69, 20,
806 /* 190 */ 21, 1, 81, 73, 25, 26, 72, 23, 24, 25,
807 /* 200 */ 26, 73, 12, 74, 14, 15, 16, 17, 18, 42,
808 /* 210 */ 20, 21, 3, 23, 24, 25, 26, 67, 20, 21,
809 /* 220 */ 2, 3, 4, 5, 6, 7, 76, 77, 78, 103,
810 /* 230 */ 104, 105, 82, 83, 84, 85, 67, 19, 88, 89,
811 /* 240 */ 86, 87, 75, 25, 26, 76, 77, 78, 42, 3,
812 /* 250 */ 32, 82, 83, 84, 85, 94, 1, 88, 89, 4,
813 /* 260 */ 5, 3, 6, 7, 103, 104, 105, 12, 107, 14,
814 /* 270 */ 15, 16, 75, 18, 3, 14, 15, 16, 60, 61,
815 /* 280 */ 82, 75, 90, 91, 92, 93, 68, 3, 70, 97,
816 /* 290 */ 72, 73, 3, 2, 3, 4, 5, 6, 7, 3,
817 /* 300 */ 108, 86, 87, 111, 43, 44, 45, 46, 47, 48,
818 /* 310 */ 19, 75, 14, 15, 16, 1, 25, 26, 4, 5,
819 /* 320 */ 71, 94, 67, 32, 1, 19, 12, 4, 5, 13,
820 /* 330 */ 103, 104, 105, 78, 107, 12, 68, 82, 83, 84,
821 /* 340 */ 85, 43, 44, 45, 46, 47, 48, 86, 87, 20,
822 /* 350 */ 21, 60, 61, 3, 40, 41, 1, 2, 68, 4,
823 /* 360 */ 5, 70, 3, 72, 73, 20, 21, 12, 94, 1,
824 /* 370 */ 2, 68, 4, 5, 76, 77, 3, 103, 104, 105,
825 /* 380 */ 12, 67, 3, 68, 86, 87, 67, 32, 67, 115,
826 /* 390 */ 67, 117, 78, 94, 2, 12, 82, 83, 84, 85,
827 /* 400 */ 32, 78, 103, 104, 105, 82, 83, 84, 85, 1,
828 /* 410 */ 20, 21, 4, 5, 94, 3, 22, 25, 26, 94,
829 /* 420 */ 12, 96, 67, 103, 104, 105, 101, 102, 103, 104,
830 /* 430 */ 105, 22, 22, 78, 94, 67, 96, 82, 83, 84,
831 /* 440 */ 85, 101, 102, 103, 104, 105, 78, 20, 21, 123,
832 /* 450 */ 82, 83, 84, 85, 1, 81, 11, 4, 5, 103,
833 /* 460 */ 104, 105, 91, 92, 93, 12, 123, 1, 97, 79,
834 /* 470 */ 4, 5, 82, 123, 94, 67, 123, 123, 12, 108,
835 /* 480 */ 88, 89, 111, 103, 104, 105, 78, 123, 123, 123,
836 /* 490 */ 82, 83, 84, 85, 123, 57, 58, 59, 60, 61,
837 /* 500 */ 62, 63, 64, 65, 66, 123, 79, 94, 95, 82,
838 /* 510 */ 123, 98, 99, 100, 123, 123, 103, 104, 105, 123,
839 /* 520 */ 67, 123, 4, 5, 6, 7, 123, 4, 5, 6,
840 /* 530 */ 7, 78, 123, 67, 123, 82, 83, 84, 85, 103,
841 /* 540 */ 104, 105, 19, 123, 78, 123, 123, 29, 82, 83,
842 /* 550 */ 84, 85, 94, 95, 123, 123, 98, 99, 100, 123,
843 /* 560 */ 123, 103, 104, 105, 123, 94, 95, 123, 123, 98,
844 /* 570 */ 99, 100, 123, 123, 103, 104, 105, 123, 103, 104,
845 /* 580 */ 105, 94, 123, 96, 103, 104, 105, 94, 101, 102,
846 /* 590 */ 103, 104, 105, 94, 123, 96, 103, 104, 105, 123,
847 /* 600 */ 101, 102, 103, 104, 105, 123, 94, 123, 96, 123,
848 /* 610 */ 123, 94, 123, 101, 102, 103, 104, 105, 123, 123,
849 /* 620 */ 103, 104, 105, 123, 107, 123, 94, 123, 96, 112,
850 /* 630 */ 113, 123, 123, 101, 102, 103, 104, 105, 123, 94,
851 /* 640 */ 2, 96, 4, 5, 6, 7, 101, 102, 103, 104,
852 /* 650 */ 105, 94, 2, 96, 4, 5, 6, 7, 101, 102,
853 /* 660 */ 103, 104, 105, 123, 94, 123, 96, 103, 104, 105,
854 /* 670 */ 32, 101, 102, 103, 104, 105, 94, 123, 96, 103,
855 /* 680 */ 104, 105, 32, 101, 102, 103, 104, 105, 94, 123,
856 /* 690 */ 96, 4, 5, 6, 7, 101, 102, 103, 104, 105,
857 /* 700 */ 123, 94, 123, 96, 123, 123, 19, 123, 101, 102,
858 /* 710 */ 103, 104, 105, 4, 5, 6, 7, 8, 103, 104,
859 /* 720 */ 105, 94, 123, 96, 103, 104, 105, 123, 101, 102,
860 /* 730 */ 103, 104, 105, 123, 94, 123, 96, 4, 5, 6,
861 /* 740 */ 7, 101, 102, 103, 104, 105, 94, 123, 96, 123,
862 /* 750 */ 123, 2, 19, 101, 102, 103, 104, 105, 123, 94,
863 /* 760 */ 123, 96, 4, 5, 6, 7, 101, 102, 103, 104,
864 /* 770 */ 105, 94, 123, 96, 25, 26, 123, 19, 101, 102,
865 /* 780 */ 103, 104, 105, 4, 5, 6, 7, 4, 5, 6,
866 /* 790 */ 7, 42, 4, 5, 6, 7, 4, 5, 6, 7,
867 /* 800 */ 8, 68, 4, 5, 6, 7, 8, 19, 4, 5,
868 /* 810 */ 6, 7, 4, 5, 6, 7, 123, 123, 94, 4,
869 /* 820 */ 5, 6, 7, 94, 123, 123, 68, 103, 104, 105,
870 /* 830 */ 123, 94, 103, 104, 105, 94, 123, 88, 89, 94,
871 /* 840 */ 103, 104, 105, 123, 103, 104, 105, 68, 103, 104,
872 /* 850 */ 105, 68, 123, 123, 94, 123, 123, 94, 123, 123,
873 /* 860 */ 94, 123, 123, 103, 104, 105, 103, 104, 105, 103,
874 /* 870 */ 104, 105, 68, 123, 94, 123, 68, 123, 94, 123,
875 /* 880 */ 123, 94, 123, 103, 104, 105, 123, 103, 104, 105,
876 /* 890 */ 103, 104, 105, 94, 123, 123, 94, 123, 123, 94,
877 /* 900 */ 123, 123, 103, 104, 105, 103, 104, 105, 103, 104,
878 /* 910 */ 105, 123, 123, 94, 103, 104, 105, 123, 94, 123,
879 /* 920 */ 123, 94, 103, 104, 105, 123, 94, 103, 104, 105,
880 /* 930 */ 103, 104, 105, 94, 123, 103, 104, 105, 123, 94,
881 /* 940 */ 123, 123, 103, 104, 105, 94, 123, 123, 103, 104,
882 /* 950 */ 105, 123, 123, 123, 103, 104, 105, 90, 90, 90,
883 /* 960 */ 90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
884 /* 970 */ 90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
885 /* 980 */ 90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
886 /* 990 */ 90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
887 /* 1000 */ 90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
888 /* 1010 */ 90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
889 /* 1020 */ 90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
890 /* 1030 */ 90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
891 /* 1040 */ 90, 90, 90, 90, 90, 90, 90,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
892 };
893 #define YY_SHIFT_COUNT (168)
894 #define YY_SHIFT_MIN (0)
895 #define YY_SHIFT_MAX (815)
896 static const unsigned short int yy_shift_ofst[] = {
897 /* 0 */ 190, 56, 169, 82, 82, 82, 150, 150, 150, 150,
898 /* 10 */ 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
899 /* 20 */ 150, 150, 150, 255, 190, 0, 255, 190, 323, 314,
900 /* 30 */ 408, 408, 298, 355, 368, 261, 323, 323, 323, 323,
901 /* 40 */ 323, 323, 323, 453, 323, 323, 466, 323, 323, 323,
902 /* 50 */ 323, 323, 323, 323, 323, 323, 323, 323, 323, 81,
903 /* 60 */ 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
904 /* 70 */ 81, 749, 218, 291, 392, 392, 392, 174, 60, 957,
905 /* 80 */ 957, 957, 438, 438, 638, 650, 733, 758, 518, 114,
906 /* 90 */ 523, 779, 687, 709, 792, 798, 783, 788, 804, 808,
907 /* 100 */ 815, 815, 815, 815, 390, 815, 815, 815, 815, 427,
908 /* 110 */ 815, 111, 198, 63, 116, 167, 153, 154, 206, 256,
909 /* 120 */ 256, 215, 329, 345, 8, 9, 94, 102, 127, 137,
910 /* 130 */ 142, 144, 119, 115, 120, 124, 129, 128, 209, 246,
911 /* 140 */ 258, 197, 271, 284, 289, 296, 236, 249, 306, 316,
912 /* 150 */ 268, 350, 290, 359, 303, 373, 315, 379, 236, 319,
913 /* 160 */ 321, 197, 412, 394, 409, 410, 383, 374, 445,
914 };
915 #define YY_REDUCE_COUNT (81)
916 #define YY_REDUCE_MIN (-118)
917 #define YY_REDUCE_MAX (851)
918 static const short yy_reduce_ofst[] = {
919 /* 0 */ -85, 11, -27, 413, 458, 471, 325, 340, 487, 499,
920 /* 10 */ 512, 532, 545, 557, 570, 582, 594, 607, 627, 640,
921 /* 20 */ 652, 665, 677, 517, 192, -78, 43, 371, 274, -14,
922 /* 30 */ 161, 227, -36, 299, 320, -36, 380, 493, 724, 729,
923 /* 40 */ 737, 741, 745, 760, 763, 766, 780, 784, 787, 799,
924 /* 50 */ 802, 805, 819, 824, 827, 832, 839, 845, 851, -102,
925 /* 60 */ 75, 126, 356, 436, 475, 481, 564, 576, 615, 621,
926 /* 70 */ 811, -4, -118, -118, -83, -72, -64, -60, -30, -8,
927 /* 80 */ 16, 18,
928 };
929 static const YYACTIONTYPE yy_default[] = {
930 /* 0 */ 454, 448, 448, 448, 448, 448, 448, 448, 448, 448,
931 /* 10 */ 448, 448, 448, 448, 448, 448, 448, 448, 448, 448,
932 /* 20 */ 448, 448, 448, 448, 454, 591, 448, 454, 586, 482,
933 /* 30 */ 448, 448, 448, 590, 488, 448, 448, 448, 448, 448,
934 /* 40 */ 448, 448, 448, 448, 448, 448, 448, 448, 478, 448,
935 /* 50 */ 448, 448, 448, 448, 448, 448, 448, 448, 448, 448,
936 /* 60 */ 448, 448, 448, 448, 448, 448, 448, 448, 448, 448,
937 /* 70 */ 448, 448, 448, 448, 448, 448, 448, 448, 460, 472,
938 /* 80 */ 514, 514, 470, 500, 448, 448, 448, 448, 448, 448,
939 /* 90 */ 448, 448, 448, 481, 476, 473, 448, 448, 448, 448,
940 /* 100 */ 494, 493, 490, 489, 448, 518, 517, 516, 477, 448,
941 /* 110 */ 577, 461, 448, 448, 448, 531, 598, 448, 448, 551,
942 /* 120 */ 550, 448, 546, 448, 539, 448, 498, 448, 448, 448,
943 /* 130 */ 448, 448, 448, 448, 448, 448, 448, 448, 448, 448,
944 /* 140 */ 448, 538, 448, 448, 448, 448, 532, 448, 448, 448,
945 /* 150 */ 448, 448, 448, 448, 448, 448, 448, 448, 448, 448,
946 /* 160 */ 448, 448, 448, 448, 448, 448, 448, 602, 448,
947 };
948 /********** End of lemon-generated parsing tables *****************************/
949
950 /* The next table maps tokens (terminal symbols) into fallback tokens.
951 ** If a construct like the following:
@@ -975,10 +1022,14 @@
975 0, /* UMINUS => nothing */
976 0, /* EOL => nothing */
977 0, /* ASSIGN => nothing */
978 0, /* PLACENAME => nothing */
979 0, /* COLON => nothing */
 
 
 
 
980 0, /* FILL => nothing */
981 0, /* COLOR => nothing */
982 0, /* THICKNESS => nothing */
983 0, /* PRINT => nothing */
984 0, /* STRING => nothing */
@@ -1028,33 +1079,32 @@
1028 0, /* ITALIC => nothing */
1029 0, /* BOLD => nothing */
1030 0, /* ALIGNED => nothing */
1031 0, /* BIG => nothing */
1032 0, /* SMALL => nothing */
1033 0, /* LP => nothing */
1034 0, /* RP => nothing */
1035 0, /* AND => nothing */
1036 0, /* LT => nothing */
1037 0, /* GT => nothing */
1038 0, /* WAY => nothing */
1039 0, /* BETWEEN => nothing */
1040 0, /* THE => nothing */
1041 0, /* DOT_L => nothing */
 
 
 
1042 0, /* START => nothing */
1043 0, /* END => nothing */
1044 0, /* NTH => nothing */
1045 0, /* VERTEX => nothing */
1046 0, /* IN => nothing */
1047 0, /* DOT_U => nothing */
1048 0, /* LAST => nothing */
1049 0, /* NUMBER => nothing */
1050 0, /* FUNC1 => nothing */
1051 0, /* FUNC2 => nothing */
 
1052 0, /* X => nothing */
1053 0, /* Y => nothing */
1054 0, /* TOP => nothing */
1055 0, /* BOTTOM => nothing */
1056 };
1057 #endif /* YYFALLBACK */
1058
1059 /* The following structure represents a single element of the
1060 ** parser's stack. Information stored includes:
@@ -1153,119 +1203,123 @@
1153 /* 9 */ "UMINUS",
1154 /* 10 */ "EOL",
1155 /* 11 */ "ASSIGN",
1156 /* 12 */ "PLACENAME",
1157 /* 13 */ "COLON",
1158 /* 14 */ "FILL",
1159 /* 15 */ "COLOR",
1160 /* 16 */ "THICKNESS",
1161 /* 17 */ "PRINT",
1162 /* 18 */ "STRING",
1163 /* 19 */ "COMMA",
1164 /* 20 */ "CLASSNAME",
1165 /* 21 */ "LB",
1166 /* 22 */ "RB",
1167 /* 23 */ "UP",
1168 /* 24 */ "DOWN",
1169 /* 25 */ "LEFT",
1170 /* 26 */ "RIGHT",
1171 /* 27 */ "CLOSE",
1172 /* 28 */ "CHOP",
1173 /* 29 */ "FROM",
1174 /* 30 */ "TO",
1175 /* 31 */ "THEN",
1176 /* 32 */ "HEADING",
1177 /* 33 */ "GO",
1178 /* 34 */ "AT",
1179 /* 35 */ "WITH",
1180 /* 36 */ "SAME",
1181 /* 37 */ "AS",
1182 /* 38 */ "FIT",
1183 /* 39 */ "BEHIND",
1184 /* 40 */ "UNTIL",
1185 /* 41 */ "EVEN",
1186 /* 42 */ "DOT_E",
1187 /* 43 */ "HEIGHT",
1188 /* 44 */ "WIDTH",
1189 /* 45 */ "RADIUS",
1190 /* 46 */ "DIAMETER",
1191 /* 47 */ "DOTTED",
1192 /* 48 */ "DASHED",
1193 /* 49 */ "CW",
1194 /* 50 */ "CCW",
1195 /* 51 */ "LARROW",
1196 /* 52 */ "RARROW",
1197 /* 53 */ "LRARROW",
1198 /* 54 */ "INVIS",
1199 /* 55 */ "THICK",
1200 /* 56 */ "THIN",
1201 /* 57 */ "CENTER",
1202 /* 58 */ "LJUST",
1203 /* 59 */ "RJUST",
1204 /* 60 */ "ABOVE",
1205 /* 61 */ "BELOW",
1206 /* 62 */ "ITALIC",
1207 /* 63 */ "BOLD",
1208 /* 64 */ "ALIGNED",
1209 /* 65 */ "BIG",
1210 /* 66 */ "SMALL",
1211 /* 67 */ "LP",
1212 /* 68 */ "RP",
1213 /* 69 */ "AND",
1214 /* 70 */ "LT",
1215 /* 71 */ "GT",
1216 /* 72 */ "WAY",
1217 /* 73 */ "BETWEEN",
1218 /* 74 */ "THE",
1219 /* 75 */ "DOT_L",
1220 /* 76 */ "START",
1221 /* 77 */ "END",
1222 /* 78 */ "NTH",
1223 /* 79 */ "VERTEX",
1224 /* 80 */ "IN",
1225 /* 81 */ "DOT_U",
1226 /* 82 */ "LAST",
1227 /* 83 */ "NUMBER",
1228 /* 84 */ "FUNC1",
1229 /* 85 */ "FUNC2",
1230 /* 86 */ "X",
1231 /* 87 */ "Y",
1232 /* 88 */ "TOP",
1233 /* 89 */ "BOTTOM",
1234 /* 90 */ "element_list",
1235 /* 91 */ "element",
1236 /* 92 */ "unnamed_element",
1237 /* 93 */ "basetype",
1238 /* 94 */ "expr",
1239 /* 95 */ "numproperty",
1240 /* 96 */ "edge",
1241 /* 97 */ "direction",
1242 /* 98 */ "dashproperty",
1243 /* 99 */ "colorproperty",
1244 /* 100 */ "locproperty",
1245 /* 101 */ "position",
1246 /* 102 */ "place",
1247 /* 103 */ "object",
1248 /* 104 */ "objectname",
1249 /* 105 */ "nth",
1250 /* 106 */ "textposition",
1251 /* 107 */ "rvalue",
1252 /* 108 */ "lvalue",
1253 /* 109 */ "even",
1254 /* 110 */ "document",
1255 /* 111 */ "print",
1256 /* 112 */ "prlist",
1257 /* 113 */ "pritem",
1258 /* 114 */ "prsep",
1259 /* 115 */ "attribute_list",
1260 /* 116 */ "savelist",
1261 /* 117 */ "alist",
1262 /* 118 */ "attribute",
1263 /* 119 */ "go",
1264 /* 120 */ "boolproperty",
1265 /* 121 */ "withclause",
1266 /* 122 */ "between",
 
 
 
 
1267 };
1268 #endif /* defined(YYCOVERAGE) || !defined(NDEBUG) */
1269
1270 #ifndef NDEBUG
1271 /* For tracing reduce actions, the names of all rules are required.
@@ -1279,158 +1333,151 @@
1279 /* 5 */ "element ::= lvalue ASSIGN rvalue",
1280 /* 6 */ "element ::= PLACENAME COLON unnamed_element",
1281 /* 7 */ "element ::= PLACENAME COLON position",
1282 /* 8 */ "element ::= unnamed_element",
1283 /* 9 */ "element ::= print prlist",
1284 /* 10 */ "rvalue ::= PLACENAME",
1285 /* 11 */ "pritem ::= FILL",
1286 /* 12 */ "pritem ::= COLOR",
1287 /* 13 */ "pritem ::= THICKNESS",
1288 /* 14 */ "pritem ::= rvalue",
1289 /* 15 */ "pritem ::= STRING",
1290 /* 16 */ "prsep ::= COMMA",
1291 /* 17 */ "unnamed_element ::= basetype attribute_list",
1292 /* 18 */ "basetype ::= CLASSNAME",
1293 /* 19 */ "basetype ::= STRING textposition",
1294 /* 20 */ "basetype ::= LB savelist element_list RB",
1295 /* 21 */ "savelist ::=",
1296 /* 22 */ "attribute_list ::= expr",
1297 /* 23 */ "attribute_list ::= expr PERCENT",
1298 /* 24 */ "attribute ::= numproperty expr PERCENT",
1299 /* 25 */ "attribute ::= numproperty expr",
1300 /* 26 */ "attribute ::= dashproperty expr",
1301 /* 27 */ "attribute ::= dashproperty",
1302 /* 28 */ "attribute ::= colorproperty rvalue",
1303 /* 29 */ "attribute ::= go direction expr PERCENT",
1304 /* 30 */ "attribute ::= go direction expr",
1305 /* 31 */ "attribute ::= go direction",
1306 /* 32 */ "attribute ::= go direction even position",
1307 /* 33 */ "attribute ::= CLOSE",
1308 /* 34 */ "attribute ::= CHOP",
1309 /* 35 */ "attribute ::= FROM position",
1310 /* 36 */ "attribute ::= TO position",
1311 /* 37 */ "attribute ::= THEN",
1312 /* 38 */ "attribute ::= THEN expr HEADING expr",
1313 /* 39 */ "attribute ::= THEN HEADING expr",
1314 /* 40 */ "attribute ::= THEN expr EDGEPT",
1315 /* 41 */ "attribute ::= THEN EDGEPT",
1316 /* 42 */ "attribute ::= GO expr HEADING expr",
1317 /* 43 */ "attribute ::= GO HEADING expr",
1318 /* 44 */ "attribute ::= GO expr EDGEPT",
1319 /* 45 */ "attribute ::= GO EDGEPT",
1320 /* 46 */ "attribute ::= AT position",
1321 /* 47 */ "attribute ::= SAME",
1322 /* 48 */ "attribute ::= SAME AS object",
1323 /* 49 */ "attribute ::= STRING textposition",
1324 /* 50 */ "attribute ::= FIT",
1325 /* 51 */ "attribute ::= BEHIND object",
1326 /* 52 */ "withclause ::= DOT_E edge AT position",
1327 /* 53 */ "withclause ::= edge AT position",
1328 /* 54 */ "numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS",
1329 /* 55 */ "boolproperty ::= CW",
1330 /* 56 */ "boolproperty ::= CCW",
1331 /* 57 */ "boolproperty ::= LARROW",
1332 /* 58 */ "boolproperty ::= RARROW",
1333 /* 59 */ "boolproperty ::= LRARROW",
1334 /* 60 */ "boolproperty ::= INVIS",
1335 /* 61 */ "boolproperty ::= THICK",
1336 /* 62 */ "boolproperty ::= THIN",
1337 /* 63 */ "textposition ::=",
1338 /* 64 */ "textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL",
1339 /* 65 */ "position ::= expr COMMA expr",
1340 /* 66 */ "position ::= place PLUS expr COMMA expr",
1341 /* 67 */ "position ::= place MINUS expr COMMA expr",
1342 /* 68 */ "position ::= place PLUS LP expr COMMA expr RP",
1343 /* 69 */ "position ::= place MINUS LP expr COMMA expr RP",
1344 /* 70 */ "position ::= LP position COMMA position RP",
1345 /* 71 */ "position ::= LP position RP",
1346 /* 72 */ "position ::= expr between position AND position",
1347 /* 73 */ "position ::= expr LT position COMMA position GT",
1348 /* 74 */ "position ::= expr ABOVE position",
1349 /* 75 */ "position ::= expr BELOW position",
1350 /* 76 */ "position ::= expr LEFT OF position",
1351 /* 77 */ "position ::= expr RIGHT OF position",
1352 /* 78 */ "position ::= expr EDGEPT OF position",
1353 /* 79 */ "position ::= expr HEADING expr FROM position",
1354 /* 80 */ "place ::= object",
1355 /* 81 */ "place ::= object DOT_E edge",
1356 /* 82 */ "place ::= object DOT_L START",
1357 /* 83 */ "place ::= object DOT_L END",
1358 /* 84 */ "place ::= START OF object",
1359 /* 85 */ "place ::= END OF object",
1360 /* 86 */ "place ::= edge OF object",
1361 /* 87 */ "place ::= NTH VERTEX OF object",
1362 /* 88 */ "object ::= nth",
1363 /* 89 */ "object ::= nth OF|IN object",
1364 /* 90 */ "objectname ::= PLACENAME",
1365 /* 91 */ "objectname ::= objectname DOT_U PLACENAME",
1366 /* 92 */ "nth ::= NTH CLASSNAME",
1367 /* 93 */ "nth ::= NTH LAST CLASSNAME",
1368 /* 94 */ "nth ::= LAST CLASSNAME",
1369 /* 95 */ "nth ::= LAST",
1370 /* 96 */ "nth ::= NTH LB RB",
1371 /* 97 */ "nth ::= NTH LAST LB RB",
1372 /* 98 */ "nth ::= LAST LB RB",
1373 /* 99 */ "expr ::= expr PLUS expr",
1374 /* 100 */ "expr ::= expr MINUS expr",
1375 /* 101 */ "expr ::= expr STAR expr",
1376 /* 102 */ "expr ::= expr SLASH expr",
1377 /* 103 */ "expr ::= MINUS expr",
1378 /* 104 */ "expr ::= PLUS expr",
1379 /* 105 */ "expr ::= LP expr RP",
1380 /* 106 */ "expr ::= NUMBER",
1381 /* 107 */ "expr ::= ID",
1382 /* 108 */ "expr ::= FUNC1 LP expr RP",
1383 /* 109 */ "expr ::= FUNC2 LP expr COMMA expr RP",
1384 /* 110 */ "expr ::= object DOT_L locproperty",
1385 /* 111 */ "expr ::= object DOT_L numproperty",
1386 /* 112 */ "expr ::= object DOT_L dashproperty",
1387 /* 113 */ "expr ::= object DOT_L colorproperty",
1388 /* 114 */ "expr ::= object DOT_E edge DOT_L X",
1389 /* 115 */ "expr ::= object DOT_E edge DOT_L Y",
1390 /* 116 */ "expr ::= LP locproperty OF object RP",
1391 /* 117 */ "expr ::= LP dashproperty OF object RP",
1392 /* 118 */ "expr ::= LP numproperty OF object RP",
1393 /* 119 */ "expr ::= LP colorproperty OF object RP",
1394 /* 120 */ "expr ::= NTH VERTEX OF object DOT_L X",
1395 /* 121 */ "expr ::= NTH VERTEX OF object DOT_L Y",
1396 /* 122 */ "lvalue ::= ID",
1397 /* 123 */ "lvalue ::= FILL",
1398 /* 124 */ "lvalue ::= COLOR",
1399 /* 125 */ "lvalue ::= THICKNESS",
1400 /* 126 */ "rvalue ::= expr",
1401 /* 127 */ "print ::= PRINT",
1402 /* 128 */ "prlist ::= pritem",
1403 /* 129 */ "prlist ::= prlist prsep pritem",
1404 /* 130 */ "direction ::= UP",
1405 /* 131 */ "direction ::= DOWN",
1406 /* 132 */ "direction ::= LEFT",
1407 /* 133 */ "direction ::= RIGHT",
1408 /* 134 */ "attribute_list ::= alist",
1409 /* 135 */ "alist ::=",
1410 /* 136 */ "alist ::= alist attribute",
1411 /* 137 */ "attribute ::= boolproperty",
1412 /* 138 */ "attribute ::= WITH withclause",
1413 /* 139 */ "go ::= GO",
1414 /* 140 */ "go ::=",
1415 /* 141 */ "even ::= UNTIL EVEN WITH",
1416 /* 142 */ "even ::= EVEN WITH",
1417 /* 143 */ "dashproperty ::= DOTTED",
1418 /* 144 */ "dashproperty ::= DASHED",
1419 /* 145 */ "colorproperty ::= FILL",
1420 /* 146 */ "colorproperty ::= COLOR",
1421 /* 147 */ "position ::= place",
1422 /* 148 */ "between ::= WAY BETWEEN",
1423 /* 149 */ "between ::= BETWEEN",
1424 /* 150 */ "between ::= OF THE WAY BETWEEN",
1425 /* 151 */ "object ::= objectname",
1426 /* 152 */ "locproperty ::= X|Y",
1427 /* 153 */ "edge ::= EDGEPT",
1428 /* 154 */ "edge ::= TOP",
1429 /* 155 */ "edge ::= BOTTOM",
1430 /* 156 */ "edge ::= LEFT",
1431 /* 157 */ "edge ::= RIGHT",
1432 };
1433 #endif /* NDEBUG */
1434
1435
1436 #if YYSTACKDEPTH<=0
@@ -1552,24 +1599,24 @@
1552 ** Note: during a reduce, the only symbols destroyed are those
1553 ** which appear on the RHS of the rule, but which are *not* used
1554 ** inside the C code.
1555 */
1556 /********* Begin destructor definitions ***************************************/
1557 case 90: /* element_list */
1558 {
1559 #line 445 "pikchr.y"
1560 pik_elist_free(p,(yypminor->yy80));
1561 #line 1586 "pikchr.c"
1562 }
1563 break;
1564 case 91: /* element */
1565 case 92: /* unnamed_element */
1566 case 93: /* basetype */
1567 {
1568 #line 447 "pikchr.y"
1569 pik_elem_free(p,(yypminor->yy174));
1570 #line 1595 "pikchr.c"
 
 
 
 
 
 
 
 
 
1571 }
1572 break;
1573 /********* End destructor definitions *****************************************/
1574 default: break; /* If no destructor action specified: do nothing */
1575 }
@@ -1783,14 +1830,14 @@
1783 #endif
1784 while( yypParser->yytos>yypParser->yystack ) yy_pop_parser_stack(yypParser);
1785 /* Here code is inserted which will execute if the parser
1786 ** stack every overflows */
1787 /******** Begin %stack_overflow code ******************************************/
1788 #line 476 "pikchr.y"
1789
1790 pik_error(p, 0, "parser stack overflow");
1791 #line 1816 "pikchr.c"
1792 /******** End %stack_overflow code ********************************************/
1793 pik_parserARG_STORE /* Suppress warning about unused %extra_argument var */
1794 pik_parserCTX_STORE
1795 }
1796
@@ -1858,168 +1905,161 @@
1858 }
1859
1860 /* For rule J, yyRuleInfoLhs[J] contains the symbol on the left-hand side
1861 ** of that rule */
1862 static const YYCODETYPE yyRuleInfoLhs[] = {
1863 110, /* (0) document ::= element_list */
1864 90, /* (1) element_list ::= element */
1865 90, /* (2) element_list ::= element_list EOL element */
1866 91, /* (3) element ::= */
1867 91, /* (4) element ::= direction */
1868 91, /* (5) element ::= lvalue ASSIGN rvalue */
1869 91, /* (6) element ::= PLACENAME COLON unnamed_element */
1870 91, /* (7) element ::= PLACENAME COLON position */
1871 91, /* (8) element ::= unnamed_element */
1872 91, /* (9) element ::= print prlist */
1873 107, /* (10) rvalue ::= PLACENAME */
1874 113, /* (11) pritem ::= FILL */
1875 113, /* (12) pritem ::= COLOR */
1876 113, /* (13) pritem ::= THICKNESS */
1877 113, /* (14) pritem ::= rvalue */
1878 113, /* (15) pritem ::= STRING */
1879 114, /* (16) prsep ::= COMMA */
1880 92, /* (17) unnamed_element ::= basetype attribute_list */
1881 93, /* (18) basetype ::= CLASSNAME */
1882 93, /* (19) basetype ::= STRING textposition */
1883 93, /* (20) basetype ::= LB savelist element_list RB */
1884 116, /* (21) savelist ::= */
1885 115, /* (22) attribute_list ::= expr */
1886 115, /* (23) attribute_list ::= expr PERCENT */
1887 118, /* (24) attribute ::= numproperty expr PERCENT */
1888 118, /* (25) attribute ::= numproperty expr */
1889 118, /* (26) attribute ::= dashproperty expr */
1890 118, /* (27) attribute ::= dashproperty */
1891 118, /* (28) attribute ::= colorproperty rvalue */
1892 118, /* (29) attribute ::= go direction expr PERCENT */
1893 118, /* (30) attribute ::= go direction expr */
1894 118, /* (31) attribute ::= go direction */
1895 118, /* (32) attribute ::= go direction even position */
1896 118, /* (33) attribute ::= CLOSE */
1897 118, /* (34) attribute ::= CHOP */
1898 118, /* (35) attribute ::= FROM position */
1899 118, /* (36) attribute ::= TO position */
1900 118, /* (37) attribute ::= THEN */
1901 118, /* (38) attribute ::= THEN expr HEADING expr */
1902 118, /* (39) attribute ::= THEN HEADING expr */
1903 118, /* (40) attribute ::= THEN expr EDGEPT */
1904 118, /* (41) attribute ::= THEN EDGEPT */
1905 118, /* (42) attribute ::= GO expr HEADING expr */
1906 118, /* (43) attribute ::= GO HEADING expr */
1907 118, /* (44) attribute ::= GO expr EDGEPT */
1908 118, /* (45) attribute ::= GO EDGEPT */
1909 118, /* (46) attribute ::= AT position */
1910 118, /* (47) attribute ::= SAME */
1911 118, /* (48) attribute ::= SAME AS object */
1912 118, /* (49) attribute ::= STRING textposition */
1913 118, /* (50) attribute ::= FIT */
1914 118, /* (51) attribute ::= BEHIND object */
1915 121, /* (52) withclause ::= DOT_E edge AT position */
1916 121, /* (53) withclause ::= edge AT position */
1917 95, /* (54) numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
1918 120, /* (55) boolproperty ::= CW */
1919 120, /* (56) boolproperty ::= CCW */
1920 120, /* (57) boolproperty ::= LARROW */
1921 120, /* (58) boolproperty ::= RARROW */
1922 120, /* (59) boolproperty ::= LRARROW */
1923 120, /* (60) boolproperty ::= INVIS */
1924 120, /* (61) boolproperty ::= THICK */
1925 120, /* (62) boolproperty ::= THIN */
1926 106, /* (63) textposition ::= */
1927 106, /* (64) textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */
1928 101, /* (65) position ::= expr COMMA expr */
1929 101, /* (66) position ::= place PLUS expr COMMA expr */
1930 101, /* (67) position ::= place MINUS expr COMMA expr */
1931 101, /* (68) position ::= place PLUS LP expr COMMA expr RP */
1932 101, /* (69) position ::= place MINUS LP expr COMMA expr RP */
1933 101, /* (70) position ::= LP position COMMA position RP */
1934 101, /* (71) position ::= LP position RP */
1935 101, /* (72) position ::= expr between position AND position */
1936 101, /* (73) position ::= expr LT position COMMA position GT */
1937 101, /* (74) position ::= expr ABOVE position */
1938 101, /* (75) position ::= expr BELOW position */
1939 101, /* (76) position ::= expr LEFT OF position */
1940 101, /* (77) position ::= expr RIGHT OF position */
1941 101, /* (78) position ::= expr EDGEPT OF position */
1942 101, /* (79) position ::= expr HEADING expr FROM position */
1943 102, /* (80) place ::= object */
1944 102, /* (81) place ::= object DOT_E edge */
1945 102, /* (82) place ::= object DOT_L START */
1946 102, /* (83) place ::= object DOT_L END */
1947 102, /* (84) place ::= START OF object */
1948 102, /* (85) place ::= END OF object */
1949 102, /* (86) place ::= edge OF object */
1950 102, /* (87) place ::= NTH VERTEX OF object */
1951 103, /* (88) object ::= nth */
1952 103, /* (89) object ::= nth OF|IN object */
1953 104, /* (90) objectname ::= PLACENAME */
1954 104, /* (91) objectname ::= objectname DOT_U PLACENAME */
1955 105, /* (92) nth ::= NTH CLASSNAME */
1956 105, /* (93) nth ::= NTH LAST CLASSNAME */
1957 105, /* (94) nth ::= LAST CLASSNAME */
1958 105, /* (95) nth ::= LAST */
1959 105, /* (96) nth ::= NTH LB RB */
1960 105, /* (97) nth ::= NTH LAST LB RB */
1961 105, /* (98) nth ::= LAST LB RB */
1962 94, /* (99) expr ::= expr PLUS expr */
1963 94, /* (100) expr ::= expr MINUS expr */
1964 94, /* (101) expr ::= expr STAR expr */
1965 94, /* (102) expr ::= expr SLASH expr */
1966 94, /* (103) expr ::= MINUS expr */
1967 94, /* (104) expr ::= PLUS expr */
1968 94, /* (105) expr ::= LP expr RP */
1969 94, /* (106) expr ::= NUMBER */
1970 94, /* (107) expr ::= ID */
1971 94, /* (108) expr ::= FUNC1 LP expr RP */
1972 94, /* (109) expr ::= FUNC2 LP expr COMMA expr RP */
1973 94, /* (110) expr ::= object DOT_L locproperty */
1974 94, /* (111) expr ::= object DOT_L numproperty */
1975 94, /* (112) expr ::= object DOT_L dashproperty */
1976 94, /* (113) expr ::= object DOT_L colorproperty */
1977 94, /* (114) expr ::= object DOT_E edge DOT_L X */
1978 94, /* (115) expr ::= object DOT_E edge DOT_L Y */
1979 94, /* (116) expr ::= LP locproperty OF object RP */
1980 94, /* (117) expr ::= LP dashproperty OF object RP */
1981 94, /* (118) expr ::= LP numproperty OF object RP */
1982 94, /* (119) expr ::= LP colorproperty OF object RP */
1983 94, /* (120) expr ::= NTH VERTEX OF object DOT_L X */
1984 94, /* (121) expr ::= NTH VERTEX OF object DOT_L Y */
1985 108, /* (122) lvalue ::= ID */
1986 108, /* (123) lvalue ::= FILL */
1987 108, /* (124) lvalue ::= COLOR */
1988 108, /* (125) lvalue ::= THICKNESS */
1989 107, /* (126) rvalue ::= expr */
1990 111, /* (127) print ::= PRINT */
1991 112, /* (128) prlist ::= pritem */
1992 112, /* (129) prlist ::= prlist prsep pritem */
1993 97, /* (130) direction ::= UP */
1994 97, /* (131) direction ::= DOWN */
1995 97, /* (132) direction ::= LEFT */
1996 97, /* (133) direction ::= RIGHT */
1997 115, /* (134) attribute_list ::= alist */
1998 117, /* (135) alist ::= */
1999 117, /* (136) alist ::= alist attribute */
2000 118, /* (137) attribute ::= boolproperty */
2001 118, /* (138) attribute ::= WITH withclause */
2002 119, /* (139) go ::= GO */
2003 119, /* (140) go ::= */
2004 109, /* (141) even ::= UNTIL EVEN WITH */
2005 109, /* (142) even ::= EVEN WITH */
2006 98, /* (143) dashproperty ::= DOTTED */
2007 98, /* (144) dashproperty ::= DASHED */
2008 99, /* (145) colorproperty ::= FILL */
2009 99, /* (146) colorproperty ::= COLOR */
2010 101, /* (147) position ::= place */
2011 122, /* (148) between ::= WAY BETWEEN */
2012 122, /* (149) between ::= BETWEEN */
2013 122, /* (150) between ::= OF THE WAY BETWEEN */
2014 103, /* (151) object ::= objectname */
2015 100, /* (152) locproperty ::= X|Y */
2016 96, /* (153) edge ::= EDGEPT */
2017 96, /* (154) edge ::= TOP */
2018 96, /* (155) edge ::= BOTTOM */
2019 96, /* (156) edge ::= LEFT */
2020 96, /* (157) edge ::= RIGHT */
2021 };
2022
2023 /* For rule J, yyRuleInfoNRhs[J] contains the negative of the number
2024 ** of symbols on the right-hand side of that rule. */
2025 static const signed char yyRuleInfoNRhs[] = {
@@ -2031,158 +2071,151 @@
2031 -3, /* (5) element ::= lvalue ASSIGN rvalue */
2032 -3, /* (6) element ::= PLACENAME COLON unnamed_element */
2033 -3, /* (7) element ::= PLACENAME COLON position */
2034 -1, /* (8) element ::= unnamed_element */
2035 -2, /* (9) element ::= print prlist */
2036 -1, /* (10) rvalue ::= PLACENAME */
2037 -1, /* (11) pritem ::= FILL */
2038 -1, /* (12) pritem ::= COLOR */
2039 -1, /* (13) pritem ::= THICKNESS */
2040 -1, /* (14) pritem ::= rvalue */
2041 -1, /* (15) pritem ::= STRING */
2042 -1, /* (16) prsep ::= COMMA */
2043 -2, /* (17) unnamed_element ::= basetype attribute_list */
2044 -1, /* (18) basetype ::= CLASSNAME */
2045 -2, /* (19) basetype ::= STRING textposition */
2046 -4, /* (20) basetype ::= LB savelist element_list RB */
2047 0, /* (21) savelist ::= */
2048 -1, /* (22) attribute_list ::= expr */
2049 -2, /* (23) attribute_list ::= expr PERCENT */
2050 -3, /* (24) attribute ::= numproperty expr PERCENT */
2051 -2, /* (25) attribute ::= numproperty expr */
2052 -2, /* (26) attribute ::= dashproperty expr */
2053 -1, /* (27) attribute ::= dashproperty */
2054 -2, /* (28) attribute ::= colorproperty rvalue */
2055 -4, /* (29) attribute ::= go direction expr PERCENT */
2056 -3, /* (30) attribute ::= go direction expr */
2057 -2, /* (31) attribute ::= go direction */
2058 -4, /* (32) attribute ::= go direction even position */
2059 -1, /* (33) attribute ::= CLOSE */
2060 -1, /* (34) attribute ::= CHOP */
2061 -2, /* (35) attribute ::= FROM position */
2062 -2, /* (36) attribute ::= TO position */
2063 -1, /* (37) attribute ::= THEN */
2064 -4, /* (38) attribute ::= THEN expr HEADING expr */
2065 -3, /* (39) attribute ::= THEN HEADING expr */
2066 -3, /* (40) attribute ::= THEN expr EDGEPT */
2067 -2, /* (41) attribute ::= THEN EDGEPT */
2068 -4, /* (42) attribute ::= GO expr HEADING expr */
2069 -3, /* (43) attribute ::= GO HEADING expr */
2070 -3, /* (44) attribute ::= GO expr EDGEPT */
2071 -2, /* (45) attribute ::= GO EDGEPT */
2072 -2, /* (46) attribute ::= AT position */
2073 -1, /* (47) attribute ::= SAME */
2074 -3, /* (48) attribute ::= SAME AS object */
2075 -2, /* (49) attribute ::= STRING textposition */
2076 -1, /* (50) attribute ::= FIT */
2077 -2, /* (51) attribute ::= BEHIND object */
2078 -4, /* (52) withclause ::= DOT_E edge AT position */
2079 -3, /* (53) withclause ::= edge AT position */
2080 -1, /* (54) numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
2081 -1, /* (55) boolproperty ::= CW */
2082 -1, /* (56) boolproperty ::= CCW */
2083 -1, /* (57) boolproperty ::= LARROW */
2084 -1, /* (58) boolproperty ::= RARROW */
2085 -1, /* (59) boolproperty ::= LRARROW */
2086 -1, /* (60) boolproperty ::= INVIS */
2087 -1, /* (61) boolproperty ::= THICK */
2088 -1, /* (62) boolproperty ::= THIN */
2089 0, /* (63) textposition ::= */
2090 -2, /* (64) textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */
2091 -3, /* (65) position ::= expr COMMA expr */
2092 -5, /* (66) position ::= place PLUS expr COMMA expr */
2093 -5, /* (67) position ::= place MINUS expr COMMA expr */
2094 -7, /* (68) position ::= place PLUS LP expr COMMA expr RP */
2095 -7, /* (69) position ::= place MINUS LP expr COMMA expr RP */
2096 -5, /* (70) position ::= LP position COMMA position RP */
2097 -3, /* (71) position ::= LP position RP */
2098 -5, /* (72) position ::= expr between position AND position */
2099 -6, /* (73) position ::= expr LT position COMMA position GT */
2100 -3, /* (74) position ::= expr ABOVE position */
2101 -3, /* (75) position ::= expr BELOW position */
2102 -4, /* (76) position ::= expr LEFT OF position */
2103 -4, /* (77) position ::= expr RIGHT OF position */
2104 -4, /* (78) position ::= expr EDGEPT OF position */
2105 -5, /* (79) position ::= expr HEADING expr FROM position */
2106 -1, /* (80) place ::= object */
2107 -3, /* (81) place ::= object DOT_E edge */
2108 -3, /* (82) place ::= object DOT_L START */
2109 -3, /* (83) place ::= object DOT_L END */
2110 -3, /* (84) place ::= START OF object */
2111 -3, /* (85) place ::= END OF object */
2112 -3, /* (86) place ::= edge OF object */
2113 -4, /* (87) place ::= NTH VERTEX OF object */
2114 -1, /* (88) object ::= nth */
2115 -3, /* (89) object ::= nth OF|IN object */
2116 -1, /* (90) objectname ::= PLACENAME */
2117 -3, /* (91) objectname ::= objectname DOT_U PLACENAME */
2118 -2, /* (92) nth ::= NTH CLASSNAME */
2119 -3, /* (93) nth ::= NTH LAST CLASSNAME */
2120 -2, /* (94) nth ::= LAST CLASSNAME */
2121 -1, /* (95) nth ::= LAST */
2122 -3, /* (96) nth ::= NTH LB RB */
2123 -4, /* (97) nth ::= NTH LAST LB RB */
2124 -3, /* (98) nth ::= LAST LB RB */
2125 -3, /* (99) expr ::= expr PLUS expr */
2126 -3, /* (100) expr ::= expr MINUS expr */
2127 -3, /* (101) expr ::= expr STAR expr */
2128 -3, /* (102) expr ::= expr SLASH expr */
2129 -2, /* (103) expr ::= MINUS expr */
2130 -2, /* (104) expr ::= PLUS expr */
2131 -3, /* (105) expr ::= LP expr RP */
2132 -1, /* (106) expr ::= NUMBER */
2133 -1, /* (107) expr ::= ID */
2134 -4, /* (108) expr ::= FUNC1 LP expr RP */
2135 -6, /* (109) expr ::= FUNC2 LP expr COMMA expr RP */
2136 -3, /* (110) expr ::= object DOT_L locproperty */
2137 -3, /* (111) expr ::= object DOT_L numproperty */
2138 -3, /* (112) expr ::= object DOT_L dashproperty */
2139 -3, /* (113) expr ::= object DOT_L colorproperty */
2140 -5, /* (114) expr ::= object DOT_E edge DOT_L X */
2141 -5, /* (115) expr ::= object DOT_E edge DOT_L Y */
2142 -5, /* (116) expr ::= LP locproperty OF object RP */
2143 -5, /* (117) expr ::= LP dashproperty OF object RP */
2144 -5, /* (118) expr ::= LP numproperty OF object RP */
2145 -5, /* (119) expr ::= LP colorproperty OF object RP */
2146 -6, /* (120) expr ::= NTH VERTEX OF object DOT_L X */
2147 -6, /* (121) expr ::= NTH VERTEX OF object DOT_L Y */
2148 -1, /* (122) lvalue ::= ID */
2149 -1, /* (123) lvalue ::= FILL */
2150 -1, /* (124) lvalue ::= COLOR */
2151 -1, /* (125) lvalue ::= THICKNESS */
2152 -1, /* (126) rvalue ::= expr */
2153 -1, /* (127) print ::= PRINT */
2154 -1, /* (128) prlist ::= pritem */
2155 -3, /* (129) prlist ::= prlist prsep pritem */
2156 -1, /* (130) direction ::= UP */
2157 -1, /* (131) direction ::= DOWN */
2158 -1, /* (132) direction ::= LEFT */
2159 -1, /* (133) direction ::= RIGHT */
2160 -1, /* (134) attribute_list ::= alist */
2161 0, /* (135) alist ::= */
2162 -2, /* (136) alist ::= alist attribute */
2163 -1, /* (137) attribute ::= boolproperty */
2164 -2, /* (138) attribute ::= WITH withclause */
2165 -1, /* (139) go ::= GO */
2166 0, /* (140) go ::= */
2167 -3, /* (141) even ::= UNTIL EVEN WITH */
2168 -2, /* (142) even ::= EVEN WITH */
2169 -1, /* (143) dashproperty ::= DOTTED */
2170 -1, /* (144) dashproperty ::= DASHED */
2171 -1, /* (145) colorproperty ::= FILL */
2172 -1, /* (146) colorproperty ::= COLOR */
2173 -1, /* (147) position ::= place */
2174 -2, /* (148) between ::= WAY BETWEEN */
2175 -1, /* (149) between ::= BETWEEN */
2176 -4, /* (150) between ::= OF THE WAY BETWEEN */
2177 -1, /* (151) object ::= objectname */
2178 -1, /* (152) locproperty ::= X|Y */
2179 -1, /* (153) edge ::= EDGEPT */
2180 -1, /* (154) edge ::= TOP */
2181 -1, /* (155) edge ::= BOTTOM */
2182 -1, /* (156) edge ::= LEFT */
2183 -1, /* (157) edge ::= RIGHT */
2184 };
2185
2186 static void yy_accept(yyParser*); /* Forward Declaration */
2187
2188 /*
@@ -2269,640 +2302,627 @@
2269 ** break;
2270 */
2271 /********** Begin reduce actions **********************************************/
2272 YYMINORTYPE yylhsminor;
2273 case 0: /* document ::= element_list */
2274 #line 480 "pikchr.y"
2275 {pik_render(p,yymsp[0].minor.yy80);}
2276 #line 2301 "pikchr.c"
2277 break;
2278 case 1: /* element_list ::= element */
2279 #line 483 "pikchr.y"
2280 { yylhsminor.yy80 = pik_elist_append(p,0,yymsp[0].minor.yy174); }
2281 #line 2306 "pikchr.c"
2282 yymsp[0].minor.yy80 = yylhsminor.yy80;
2283 break;
2284 case 2: /* element_list ::= element_list EOL element */
2285 #line 485 "pikchr.y"
2286 { yylhsminor.yy80 = pik_elist_append(p,yymsp[-2].minor.yy80,yymsp[0].minor.yy174); }
2287 #line 2312 "pikchr.c"
2288 yymsp[-2].minor.yy80 = yylhsminor.yy80;
2289 break;
2290 case 3: /* element ::= */
2291 #line 488 "pikchr.y"
2292 { yymsp[1].minor.yy174 = 0; }
2293 #line 2318 "pikchr.c"
2294 break;
2295 case 4: /* element ::= direction */
2296 #line 489 "pikchr.y"
2297 { pik_set_direction(p,yymsp[0].minor.yy0.eCode); yylhsminor.yy174=0; }
2298 #line 2323 "pikchr.c"
2299 yymsp[0].minor.yy174 = yylhsminor.yy174;
2300 break;
2301 case 5: /* element ::= lvalue ASSIGN rvalue */
2302 #line 490 "pikchr.y"
2303 {pik_set_var(p,&yymsp[-2].minor.yy0,yymsp[0].minor.yy147,&yymsp[-1].minor.yy0); yylhsminor.yy174=0;}
2304 #line 2329 "pikchr.c"
2305 yymsp[-2].minor.yy174 = yylhsminor.yy174;
2306 break;
2307 case 6: /* element ::= PLACENAME COLON unnamed_element */
2308 #line 492 "pikchr.y"
2309 { yylhsminor.yy174 = yymsp[0].minor.yy174; pik_elem_setname(p,yymsp[0].minor.yy174,&yymsp[-2].minor.yy0); }
2310 #line 2335 "pikchr.c"
2311 yymsp[-2].minor.yy174 = yylhsminor.yy174;
2312 break;
2313 case 7: /* element ::= PLACENAME COLON position */
2314 #line 494 "pikchr.y"
2315 { yylhsminor.yy174 = pik_elem_new(p,0,0,0);
2316 if(yylhsminor.yy174){ yylhsminor.yy174->ptAt = yymsp[0].minor.yy211; pik_elem_setname(p,yylhsminor.yy174,&yymsp[-2].minor.yy0); }}
2317 #line 2342 "pikchr.c"
2318 yymsp[-2].minor.yy174 = yylhsminor.yy174;
2319 break;
2320 case 8: /* element ::= unnamed_element */
2321 #line 496 "pikchr.y"
2322 {yylhsminor.yy174 = yymsp[0].minor.yy174;}
2323 #line 2348 "pikchr.c"
2324 yymsp[0].minor.yy174 = yylhsminor.yy174;
2325 break;
2326 case 9: /* element ::= print prlist */
2327 #line 497 "pikchr.y"
2328 {pik_append(p,"<br>\n",5); yymsp[-1].minor.yy174=0;}
2329 #line 2354 "pikchr.c"
2330 break;
2331 case 10: /* rvalue ::= PLACENAME */
2332 #line 508 "pikchr.y"
2333 {yylhsminor.yy147 = pik_lookup_color(p,&yymsp[0].minor.yy0);}
2334 #line 2359 "pikchr.c"
2335 yymsp[0].minor.yy147 = yylhsminor.yy147;
2336 break;
2337 case 11: /* pritem ::= FILL */
2338 case 12: /* pritem ::= COLOR */ yytestcase(yyruleno==12);
2339 case 13: /* pritem ::= THICKNESS */ yytestcase(yyruleno==13);
2340 #line 513 "pikchr.y"
2341 {pik_append_num(p,"",pik_value(p,yymsp[0].minor.yy0.z,yymsp[0].minor.yy0.n,0));}
2342 #line 2367 "pikchr.c"
2343 break;
2344 case 14: /* pritem ::= rvalue */
2345 #line 516 "pikchr.y"
2346 {pik_append_num(p,"",yymsp[0].minor.yy147);}
2347 #line 2372 "pikchr.c"
2348 break;
2349 case 15: /* pritem ::= STRING */
2350 #line 517 "pikchr.y"
2351 {pik_append_text(p,yymsp[0].minor.yy0.z+1,yymsp[0].minor.yy0.n-2,0);}
2352 #line 2377 "pikchr.c"
2353 break;
2354 case 16: /* prsep ::= COMMA */
2355 #line 518 "pikchr.y"
2356 {pik_append(p, " ", 1);}
2357 #line 2382 "pikchr.c"
2358 break;
2359 case 17: /* unnamed_element ::= basetype attribute_list */
2360 #line 521 "pikchr.y"
2361 {yylhsminor.yy174 = yymsp[-1].minor.yy174; pik_after_adding_attributes(p,yylhsminor.yy174);}
2362 #line 2387 "pikchr.c"
2363 yymsp[-1].minor.yy174 = yylhsminor.yy174;
2364 break;
2365 case 18: /* basetype ::= CLASSNAME */
2366 #line 523 "pikchr.y"
2367 {yylhsminor.yy174 = pik_elem_new(p,&yymsp[0].minor.yy0,0,0); }
2368 #line 2393 "pikchr.c"
2369 yymsp[0].minor.yy174 = yylhsminor.yy174;
2370 break;
2371 case 19: /* basetype ::= STRING textposition */
2372 #line 525 "pikchr.y"
2373 {yymsp[-1].minor.yy0.eCode = yymsp[0].minor.yy34; yylhsminor.yy174 = pik_elem_new(p,0,&yymsp[-1].minor.yy0,0); }
2374 #line 2399 "pikchr.c"
2375 yymsp[-1].minor.yy174 = yylhsminor.yy174;
2376 break;
2377 case 20: /* basetype ::= LB savelist element_list RB */
2378 #line 527 "pikchr.y"
2379 { p->list = yymsp[-2].minor.yy80; yymsp[-3].minor.yy174 = pik_elem_new(p,0,0,yymsp[-1].minor.yy80); if(yymsp[-3].minor.yy174) yymsp[-3].minor.yy174->errTok = yymsp[0].minor.yy0; }
2380 #line 2405 "pikchr.c"
2381 break;
2382 case 21: /* savelist ::= */
2383 #line 532 "pikchr.y"
2384 {yymsp[1].minor.yy80 = p->list; p->list = 0;}
2385 #line 2410 "pikchr.c"
2386 break;
2387 case 22: /* attribute_list ::= expr */
2388 #line 539 "pikchr.y"
2389 { pik_add_direction(p,0,&yymsp[0].minor.yy147,0);}
2390 #line 2415 "pikchr.c"
2391 break;
2392 case 23: /* attribute_list ::= expr PERCENT */
2393 #line 540 "pikchr.y"
2394 { pik_add_direction(p,0,&yymsp[-1].minor.yy147,1);}
2395 #line 2420 "pikchr.c"
2396 break;
2397 case 24: /* attribute ::= numproperty expr PERCENT */
2398 #line 545 "pikchr.y"
2399 { pik_set_numprop(p,&yymsp[-2].minor.yy0,0.0,yymsp[-1].minor.yy147/100.0); }
2400 #line 2425 "pikchr.c"
2401 break;
2402 case 25: /* attribute ::= numproperty expr */
2403 case 28: /* attribute ::= colorproperty rvalue */ yytestcase(yyruleno==28);
2404 #line 546 "pikchr.y"
2405 { pik_set_numprop(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy147,0.0); }
2406 #line 2431 "pikchr.c"
2407 break;
2408 case 26: /* attribute ::= dashproperty expr */
2409 #line 547 "pikchr.y"
2410 { pik_set_dashed(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy147); }
2411 #line 2436 "pikchr.c"
 
2412 break;
2413 case 27: /* attribute ::= dashproperty */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2414 #line 548 "pikchr.y"
2415 { pik_set_dashed(p,&yymsp[0].minor.yy0,0); }
2416 #line 2441 "pikchr.c"
2417 break;
2418 case 29: /* attribute ::= go direction expr PERCENT */
2419 #line 551 "pikchr.y"
2420 { pik_add_direction(p,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy147,1);}
2421 #line 2446 "pikchr.c"
2422 break;
2423 case 30: /* attribute ::= go direction expr */
2424 #line 552 "pikchr.y"
2425 { pik_add_direction(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy147,0);}
2426 #line 2451 "pikchr.c"
2427 break;
2428 case 31: /* attribute ::= go direction */
2429 #line 553 "pikchr.y"
2430 { pik_add_direction(p,&yymsp[0].minor.yy0,0,0); }
2431 #line 2456 "pikchr.c"
2432 break;
2433 case 32: /* attribute ::= go direction even position */
2434 #line 554 "pikchr.y"
2435 {pik_evenwith(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy211);}
2436 #line 2461 "pikchr.c"
2437 break;
2438 case 33: /* attribute ::= CLOSE */
 
2439 #line 555 "pikchr.y"
2440 { pik_close_path(p,&yymsp[0].minor.yy0); }
2441 #line 2466 "pikchr.c"
2442 break;
2443 case 34: /* attribute ::= CHOP */
2444 #line 556 "pikchr.y"
2445 { p->cur->bChop = 1; }
2446 #line 2471 "pikchr.c"
2447 break;
2448 case 35: /* attribute ::= FROM position */
2449 #line 557 "pikchr.y"
2450 { pik_set_from(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy211); }
2451 #line 2476 "pikchr.c"
2452 break;
2453 case 36: /* attribute ::= TO position */
2454 #line 558 "pikchr.y"
2455 { pik_add_to(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy211); }
2456 #line 2481 "pikchr.c"
2457 break;
2458 case 37: /* attribute ::= THEN */
2459 #line 559 "pikchr.y"
2460 { pik_then(p, &yymsp[0].minor.yy0, p->cur); }
2461 #line 2486 "pikchr.c"
2462 break;
2463 case 38: /* attribute ::= THEN expr HEADING expr */
2464 case 42: /* attribute ::= GO expr HEADING expr */ yytestcase(yyruleno==42);
2465 #line 561 "pikchr.y"
2466 {pik_move_hdg(p,&yymsp[-2].minor.yy147,&yymsp[-1].minor.yy0,yymsp[0].minor.yy147,0,&yymsp[-3].minor.yy0);}
2467 #line 2492 "pikchr.c"
2468 break;
2469 case 39: /* attribute ::= THEN HEADING expr */
2470 case 43: /* attribute ::= GO HEADING expr */ yytestcase(yyruleno==43);
2471 #line 562 "pikchr.y"
2472 {pik_move_hdg(p,0,&yymsp[-1].minor.yy0,yymsp[0].minor.yy147,0,&yymsp[-2].minor.yy0);}
2473 #line 2498 "pikchr.c"
2474 break;
2475 case 40: /* attribute ::= THEN expr EDGEPT */
2476 case 44: /* attribute ::= GO expr EDGEPT */ yytestcase(yyruleno==44);
2477 #line 563 "pikchr.y"
2478 {pik_move_hdg(p,&yymsp[-1].minor.yy147,0,0,&yymsp[0].minor.yy0,&yymsp[-2].minor.yy0);}
2479 #line 2504 "pikchr.c"
2480 break;
2481 case 41: /* attribute ::= THEN EDGEPT */
2482 case 45: /* attribute ::= GO EDGEPT */ yytestcase(yyruleno==45);
2483 #line 564 "pikchr.y"
2484 {pik_move_hdg(p,0,0,0,&yymsp[0].minor.yy0,&yymsp[-1].minor.yy0);}
2485 #line 2510 "pikchr.c"
2486 break;
2487 case 46: /* attribute ::= AT position */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2488 #line 570 "pikchr.y"
2489 { pik_set_at(p,0,&yymsp[0].minor.yy211,&yymsp[-1].minor.yy0); }
2490 #line 2515 "pikchr.c"
2491 break;
2492 case 47: /* attribute ::= SAME */
2493 #line 572 "pikchr.y"
2494 {pik_same(p,0,&yymsp[0].minor.yy0);}
2495 #line 2520 "pikchr.c"
2496 break;
2497 case 48: /* attribute ::= SAME AS object */
2498 #line 573 "pikchr.y"
2499 {pik_same(p,yymsp[0].minor.yy174,&yymsp[-2].minor.yy0);}
2500 #line 2525 "pikchr.c"
2501 break;
2502 case 49: /* attribute ::= STRING textposition */
2503 #line 574 "pikchr.y"
2504 {pik_add_txt(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy34);}
2505 #line 2530 "pikchr.c"
2506 break;
2507 case 50: /* attribute ::= FIT */
2508 #line 575 "pikchr.y"
2509 {pik_size_to_fit(p,&yymsp[0].minor.yy0); }
2510 #line 2535 "pikchr.c"
2511 break;
2512 case 51: /* attribute ::= BEHIND object */
2513 #line 576 "pikchr.y"
2514 {pik_behind(p,yymsp[0].minor.yy174);}
2515 #line 2540 "pikchr.c"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2516 break;
2517 case 52: /* withclause ::= DOT_E edge AT position */
2518 case 53: /* withclause ::= edge AT position */ yytestcase(yyruleno==53);
2519 #line 584 "pikchr.y"
2520 { pik_set_at(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy211,&yymsp[-1].minor.yy0); }
2521 #line 2546 "pikchr.c"
 
 
 
 
 
 
 
 
 
 
 
2522 break;
2523 case 54: /* numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
2524 #line 588 "pikchr.y"
2525 {yylhsminor.yy0 = yymsp[0].minor.yy0;}
2526 #line 2551 "pikchr.c"
2527 yymsp[0].minor.yy0 = yylhsminor.yy0;
2528 break;
2529 case 55: /* boolproperty ::= CW */
2530 #line 599 "pikchr.y"
2531 {p->cur->cw = 1;}
2532 #line 2557 "pikchr.c"
2533 break;
2534 case 56: /* boolproperty ::= CCW */
2535 #line 600 "pikchr.y"
2536 {p->cur->cw = 0;}
2537 #line 2562 "pikchr.c"
2538 break;
2539 case 57: /* boolproperty ::= LARROW */
2540 #line 601 "pikchr.y"
2541 {p->cur->larrow=1; p->cur->rarrow=0; }
2542 #line 2567 "pikchr.c"
2543 break;
2544 case 58: /* boolproperty ::= RARROW */
2545 #line 602 "pikchr.y"
2546 {p->cur->larrow=0; p->cur->rarrow=1; }
2547 #line 2572 "pikchr.c"
2548 break;
2549 case 59: /* boolproperty ::= LRARROW */
2550 #line 603 "pikchr.y"
2551 {p->cur->larrow=1; p->cur->rarrow=1; }
2552 #line 2577 "pikchr.c"
2553 break;
2554 case 60: /* boolproperty ::= INVIS */
2555 #line 604 "pikchr.y"
2556 {p->cur->sw = 0.0;}
2557 #line 2582 "pikchr.c"
2558 break;
2559 case 61: /* boolproperty ::= THICK */
2560 #line 605 "pikchr.y"
2561 {p->cur->sw *= 1.5;}
2562 #line 2587 "pikchr.c"
2563 break;
2564 case 62: /* boolproperty ::= THIN */
2565 #line 606 "pikchr.y"
2566 {p->cur->sw *= 0.67;}
2567 #line 2592 "pikchr.c"
2568 break;
2569 case 63: /* textposition ::= */
2570 #line 608 "pikchr.y"
2571 {yymsp[1].minor.yy34 = 0;}
2572 #line 2597 "pikchr.c"
2573 break;
2574 case 64: /* textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */
2575 #line 611 "pikchr.y"
2576 {yylhsminor.yy34 = pik_text_position(p,yymsp[-1].minor.yy34,&yymsp[0].minor.yy0);}
2577 #line 2602 "pikchr.c"
2578 yymsp[-1].minor.yy34 = yylhsminor.yy34;
2579 break;
2580 case 65: /* position ::= expr COMMA expr */
2581 #line 614 "pikchr.y"
2582 {yylhsminor.yy211.x=yymsp[-2].minor.yy147; yylhsminor.yy211.y=yymsp[0].minor.yy147;}
2583 #line 2608 "pikchr.c"
2584 yymsp[-2].minor.yy211 = yylhsminor.yy211;
2585 break;
2586 case 66: /* position ::= place PLUS expr COMMA expr */
2587 #line 616 "pikchr.y"
2588 {yylhsminor.yy211.x=yymsp[-4].minor.yy211.x+yymsp[-2].minor.yy147; yylhsminor.yy211.y=yymsp[-4].minor.yy211.y+yymsp[0].minor.yy147;}
2589 #line 2614 "pikchr.c"
2590 yymsp[-4].minor.yy211 = yylhsminor.yy211;
2591 break;
2592 case 67: /* position ::= place MINUS expr COMMA expr */
2593 #line 617 "pikchr.y"
2594 {yylhsminor.yy211.x=yymsp[-4].minor.yy211.x-yymsp[-2].minor.yy147; yylhsminor.yy211.y=yymsp[-4].minor.yy211.y-yymsp[0].minor.yy147;}
2595 #line 2620 "pikchr.c"
2596 yymsp[-4].minor.yy211 = yylhsminor.yy211;
2597 break;
2598 case 68: /* position ::= place PLUS LP expr COMMA expr RP */
2599 #line 619 "pikchr.y"
2600 {yylhsminor.yy211.x=yymsp[-6].minor.yy211.x+yymsp[-3].minor.yy147; yylhsminor.yy211.y=yymsp[-6].minor.yy211.y+yymsp[-1].minor.yy147;}
2601 #line 2626 "pikchr.c"
2602 yymsp[-6].minor.yy211 = yylhsminor.yy211;
2603 break;
2604 case 69: /* position ::= place MINUS LP expr COMMA expr RP */
2605 #line 621 "pikchr.y"
2606 {yylhsminor.yy211.x=yymsp[-6].minor.yy211.x-yymsp[-3].minor.yy147; yylhsminor.yy211.y=yymsp[-6].minor.yy211.y-yymsp[-1].minor.yy147;}
2607 #line 2632 "pikchr.c"
2608 yymsp[-6].minor.yy211 = yylhsminor.yy211;
2609 break;
2610 case 70: /* position ::= LP position COMMA position RP */
2611 #line 622 "pikchr.y"
2612 {yymsp[-4].minor.yy211.x=yymsp[-3].minor.yy211.x; yymsp[-4].minor.yy211.y=yymsp[-1].minor.yy211.y;}
2613 #line 2638 "pikchr.c"
2614 break;
2615 case 71: /* position ::= LP position RP */
2616 #line 623 "pikchr.y"
2617 {yymsp[-2].minor.yy211=yymsp[-1].minor.yy211;}
2618 #line 2643 "pikchr.c"
 
2619 break;
2620 case 72: /* position ::= expr between position AND position */
2621 #line 625 "pikchr.y"
2622 {yylhsminor.yy211 = pik_position_between(p,yymsp[-4].minor.yy147,yymsp[-2].minor.yy211,yymsp[0].minor.yy211);}
2623 #line 2648 "pikchr.c"
2624 yymsp[-4].minor.yy211 = yylhsminor.yy211;
2625 break;
2626 case 73: /* position ::= expr LT position COMMA position GT */
2627 #line 627 "pikchr.y"
2628 {yylhsminor.yy211 = pik_position_between(p,yymsp[-5].minor.yy147,yymsp[-3].minor.yy211,yymsp[-1].minor.yy211);}
2629 #line 2654 "pikchr.c"
2630 yymsp[-5].minor.yy211 = yylhsminor.yy211;
2631 break;
2632 case 74: /* position ::= expr ABOVE position */
2633 #line 628 "pikchr.y"
2634 {yylhsminor.yy211=yymsp[0].minor.yy211; yylhsminor.yy211.y += yymsp[-2].minor.yy147;}
2635 #line 2660 "pikchr.c"
2636 yymsp[-2].minor.yy211 = yylhsminor.yy211;
2637 break;
2638 case 75: /* position ::= expr BELOW position */
2639 #line 629 "pikchr.y"
2640 {yylhsminor.yy211=yymsp[0].minor.yy211; yylhsminor.yy211.y -= yymsp[-2].minor.yy147;}
2641 #line 2666 "pikchr.c"
2642 yymsp[-2].minor.yy211 = yylhsminor.yy211;
2643 break;
2644 case 76: /* position ::= expr LEFT OF position */
2645 #line 630 "pikchr.y"
2646 {yylhsminor.yy211=yymsp[0].minor.yy211; yylhsminor.yy211.x -= yymsp[-3].minor.yy147;}
2647 #line 2672 "pikchr.c"
2648 yymsp[-3].minor.yy211 = yylhsminor.yy211;
2649 break;
2650 case 77: /* position ::= expr RIGHT OF position */
2651 #line 631 "pikchr.y"
2652 {yylhsminor.yy211=yymsp[0].minor.yy211; yylhsminor.yy211.x += yymsp[-3].minor.yy147;}
2653 #line 2678 "pikchr.c"
2654 yymsp[-3].minor.yy211 = yylhsminor.yy211;
2655 break;
2656 case 78: /* position ::= expr EDGEPT OF position */
2657 #line 633 "pikchr.y"
2658 {yylhsminor.yy211 = pik_position_at_hdg(p,yymsp[-3].minor.yy147,&yymsp[-2].minor.yy0,yymsp[0].minor.yy211);}
2659 #line 2684 "pikchr.c"
2660 yymsp[-3].minor.yy211 = yylhsminor.yy211;
2661 break;
2662 case 79: /* position ::= expr HEADING expr FROM position */
2663 #line 635 "pikchr.y"
2664 {yylhsminor.yy211 = pik_position_at_angle(p,yymsp[-4].minor.yy147,yymsp[-2].minor.yy147,yymsp[0].minor.yy211);}
2665 #line 2690 "pikchr.c"
2666 yymsp[-4].minor.yy211 = yylhsminor.yy211;
2667 break;
2668 case 80: /* place ::= object */
2669 #line 641 "pikchr.y"
2670 {yylhsminor.yy211 = pik_place_of_elem(p,yymsp[0].minor.yy174,0);}
2671 #line 2696 "pikchr.c"
2672 yymsp[0].minor.yy211 = yylhsminor.yy211;
2673 break;
2674 case 81: /* place ::= object DOT_E edge */
2675 case 82: /* place ::= object DOT_L START */ yytestcase(yyruleno==82);
2676 case 83: /* place ::= object DOT_L END */ yytestcase(yyruleno==83);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2677 #line 642 "pikchr.y"
2678 {yylhsminor.yy211 = pik_place_of_elem(p,yymsp[-2].minor.yy174,&yymsp[0].minor.yy0);}
2679 #line 2704 "pikchr.c"
2680 yymsp[-2].minor.yy211 = yylhsminor.yy211;
2681 break;
2682 case 84: /* place ::= START OF object */
2683 case 85: /* place ::= END OF object */ yytestcase(yyruleno==85);
2684 case 86: /* place ::= edge OF object */ yytestcase(yyruleno==86);
2685 #line 645 "pikchr.y"
2686 {yylhsminor.yy211 = pik_place_of_elem(p,yymsp[0].minor.yy174,&yymsp[-2].minor.yy0);}
2687 #line 2712 "pikchr.c"
2688 yymsp[-2].minor.yy211 = yylhsminor.yy211;
2689 break;
2690 case 87: /* place ::= NTH VERTEX OF object */
2691 #line 648 "pikchr.y"
2692 {yylhsminor.yy211 = pik_nth_vertex(p,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,yymsp[0].minor.yy174);}
2693 #line 2718 "pikchr.c"
2694 yymsp[-3].minor.yy211 = yylhsminor.yy211;
2695 break;
2696 case 88: /* object ::= nth */
2697 #line 651 "pikchr.y"
2698 {yylhsminor.yy174 = pik_find_nth(p,0,&yymsp[0].minor.yy0);}
2699 #line 2724 "pikchr.c"
2700 yymsp[0].minor.yy174 = yylhsminor.yy174;
2701 break;
2702 case 89: /* object ::= nth OF|IN object */
2703 #line 652 "pikchr.y"
2704 {yylhsminor.yy174 = pik_find_nth(p,yymsp[0].minor.yy174,&yymsp[-2].minor.yy0);}
2705 #line 2730 "pikchr.c"
2706 yymsp[-2].minor.yy174 = yylhsminor.yy174;
2707 break;
2708 case 90: /* objectname ::= PLACENAME */
2709 #line 654 "pikchr.y"
2710 {yylhsminor.yy174 = pik_find_byname(p,0,&yymsp[0].minor.yy0);}
2711 #line 2736 "pikchr.c"
2712 yymsp[0].minor.yy174 = yylhsminor.yy174;
2713 break;
2714 case 91: /* objectname ::= objectname DOT_U PLACENAME */
2715 #line 656 "pikchr.y"
2716 {yylhsminor.yy174 = pik_find_byname(p,yymsp[-2].minor.yy174,&yymsp[0].minor.yy0);}
2717 #line 2742 "pikchr.c"
2718 yymsp[-2].minor.yy174 = yylhsminor.yy174;
 
 
 
 
 
 
2719 break;
2720 case 92: /* nth ::= NTH CLASSNAME */
2721 #line 658 "pikchr.y"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2722 {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-1].minor.yy0); }
2723 #line 2748 "pikchr.c"
2724 yymsp[-1].minor.yy0 = yylhsminor.yy0;
2725 break;
2726 case 93: /* nth ::= NTH LAST CLASSNAME */
2727 #line 659 "pikchr.y"
2728 {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-2].minor.yy0); }
2729 #line 2754 "pikchr.c"
2730 yymsp[-2].minor.yy0 = yylhsminor.yy0;
2731 break;
2732 case 94: /* nth ::= LAST CLASSNAME */
2733 #line 660 "pikchr.y"
2734 {yymsp[-1].minor.yy0=yymsp[0].minor.yy0; yymsp[-1].minor.yy0.eCode = -1;}
2735 #line 2760 "pikchr.c"
2736 break;
2737 case 95: /* nth ::= LAST */
2738 #line 661 "pikchr.y"
2739 {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -1;}
2740 #line 2765 "pikchr.c"
2741 yymsp[0].minor.yy0 = yylhsminor.yy0;
2742 break;
2743 case 96: /* nth ::= NTH LB RB */
2744 #line 662 "pikchr.y"
2745 {yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-2].minor.yy0);}
2746 #line 2771 "pikchr.c"
2747 yymsp[-2].minor.yy0 = yylhsminor.yy0;
2748 break;
2749 case 97: /* nth ::= NTH LAST LB RB */
2750 #line 663 "pikchr.y"
2751 {yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-3].minor.yy0);}
2752 #line 2777 "pikchr.c"
2753 yymsp[-3].minor.yy0 = yylhsminor.yy0;
2754 break;
2755 case 98: /* nth ::= LAST LB RB */
2756 #line 664 "pikchr.y"
2757 {yymsp[-2].minor.yy0=yymsp[-1].minor.yy0; yymsp[-2].minor.yy0.eCode = -1; }
2758 #line 2783 "pikchr.c"
2759 break;
2760 case 99: /* expr ::= expr PLUS expr */
2761 #line 666 "pikchr.y"
2762 {yylhsminor.yy147=yymsp[-2].minor.yy147+yymsp[0].minor.yy147;}
2763 #line 2788 "pikchr.c"
2764 yymsp[-2].minor.yy147 = yylhsminor.yy147;
2765 break;
2766 case 100: /* expr ::= expr MINUS expr */
2767 #line 667 "pikchr.y"
2768 {yylhsminor.yy147=yymsp[-2].minor.yy147-yymsp[0].minor.yy147;}
2769 #line 2794 "pikchr.c"
2770 yymsp[-2].minor.yy147 = yylhsminor.yy147;
2771 break;
2772 case 101: /* expr ::= expr STAR expr */
2773 #line 668 "pikchr.y"
2774 {yylhsminor.yy147=yymsp[-2].minor.yy147*yymsp[0].minor.yy147;}
2775 #line 2800 "pikchr.c"
2776 yymsp[-2].minor.yy147 = yylhsminor.yy147;
2777 break;
2778 case 102: /* expr ::= expr SLASH expr */
2779 #line 669 "pikchr.y"
2780 {
2781 if( yymsp[0].minor.yy147==0.0 ){ pik_error(p, &yymsp[-1].minor.yy0, "division by zero"); yylhsminor.yy147 = 0.0; }
2782 else{ yylhsminor.yy147 = yymsp[-2].minor.yy147/yymsp[0].minor.yy147; }
2783 }
2784 #line 2809 "pikchr.c"
2785 yymsp[-2].minor.yy147 = yylhsminor.yy147;
2786 break;
2787 case 103: /* expr ::= MINUS expr */
2788 #line 673 "pikchr.y"
2789 {yymsp[-1].minor.yy147=-yymsp[0].minor.yy147;}
2790 #line 2815 "pikchr.c"
2791 break;
2792 case 104: /* expr ::= PLUS expr */
2793 #line 674 "pikchr.y"
2794 {yymsp[-1].minor.yy147=yymsp[0].minor.yy147;}
2795 #line 2820 "pikchr.c"
2796 break;
2797 case 105: /* expr ::= LP expr RP */
2798 #line 675 "pikchr.y"
2799 {yymsp[-2].minor.yy147=yymsp[-1].minor.yy147;}
2800 #line 2825 "pikchr.c"
2801 break;
2802 case 106: /* expr ::= NUMBER */
2803 #line 676 "pikchr.y"
2804 {yylhsminor.yy147=pik_atof(p,&yymsp[0].minor.yy0);}
2805 #line 2830 "pikchr.c"
2806 yymsp[0].minor.yy147 = yylhsminor.yy147;
2807 break;
2808 case 107: /* expr ::= ID */
2809 #line 677 "pikchr.y"
2810 {yylhsminor.yy147=pik_get_var(p,&yymsp[0].minor.yy0);}
2811 #line 2836 "pikchr.c"
2812 yymsp[0].minor.yy147 = yylhsminor.yy147;
2813 break;
2814 case 108: /* expr ::= FUNC1 LP expr RP */
2815 #line 678 "pikchr.y"
2816 {yylhsminor.yy147 = pik_func(p,&yymsp[-3].minor.yy0,yymsp[-1].minor.yy147,0.0);}
2817 #line 2842 "pikchr.c"
2818 yymsp[-3].minor.yy147 = yylhsminor.yy147;
2819 break;
2820 case 109: /* expr ::= FUNC2 LP expr COMMA expr RP */
2821 #line 679 "pikchr.y"
2822 {yylhsminor.yy147 = pik_func(p,&yymsp[-5].minor.yy0,yymsp[-3].minor.yy147,yymsp[-1].minor.yy147);}
2823 #line 2848 "pikchr.c"
2824 yymsp[-5].minor.yy147 = yylhsminor.yy147;
2825 break;
2826 case 110: /* expr ::= object DOT_L locproperty */
2827 case 111: /* expr ::= object DOT_L numproperty */ yytestcase(yyruleno==111);
2828 case 112: /* expr ::= object DOT_L dashproperty */ yytestcase(yyruleno==112);
2829 case 113: /* expr ::= object DOT_L colorproperty */ yytestcase(yyruleno==113);
2830 #line 681 "pikchr.y"
2831 {yylhsminor.yy147=pik_property_of(p,yymsp[-2].minor.yy174,&yymsp[0].minor.yy0);}
2832 #line 2857 "pikchr.c"
2833 yymsp[-2].minor.yy147 = yylhsminor.yy147;
2834 break;
2835 case 114: /* expr ::= object DOT_E edge DOT_L X */
2836 #line 685 "pikchr.y"
2837 {yylhsminor.yy147=pik_place_of_elem(p,yymsp[-4].minor.yy174,&yymsp[-2].minor.yy0).x;}
2838 #line 2863 "pikchr.c"
2839 yymsp[-4].minor.yy147 = yylhsminor.yy147;
2840 break;
2841 case 115: /* expr ::= object DOT_E edge DOT_L Y */
2842 #line 686 "pikchr.y"
2843 {yylhsminor.yy147=pik_place_of_elem(p,yymsp[-4].minor.yy174,&yymsp[-2].minor.yy0).y;}
2844 #line 2869 "pikchr.c"
2845 yymsp[-4].minor.yy147 = yylhsminor.yy147;
2846 break;
2847 case 116: /* expr ::= LP locproperty OF object RP */
2848 case 117: /* expr ::= LP dashproperty OF object RP */ yytestcase(yyruleno==117);
2849 case 118: /* expr ::= LP numproperty OF object RP */ yytestcase(yyruleno==118);
2850 case 119: /* expr ::= LP colorproperty OF object RP */ yytestcase(yyruleno==119);
2851 #line 687 "pikchr.y"
2852 {yymsp[-4].minor.yy147=pik_property_of(p,yymsp[-1].minor.yy174,&yymsp[-3].minor.yy0);}
2853 #line 2878 "pikchr.c"
2854 break;
2855 case 120: /* expr ::= NTH VERTEX OF object DOT_L X */
2856 #line 693 "pikchr.y"
2857 {yylhsminor.yy147 = pik_nth_vertex(p,&yymsp[-5].minor.yy0,&yymsp[-4].minor.yy0,yymsp[-2].minor.yy174).x;}
2858 #line 2883 "pikchr.c"
2859 yymsp[-5].minor.yy147 = yylhsminor.yy147;
2860 break;
2861 case 121: /* expr ::= NTH VERTEX OF object DOT_L Y */
2862 #line 695 "pikchr.y"
2863 {yylhsminor.yy147 = pik_nth_vertex(p,&yymsp[-5].minor.yy0,&yymsp[-4].minor.yy0,yymsp[-2].minor.yy174).y;}
2864 #line 2889 "pikchr.c"
2865 yymsp[-5].minor.yy147 = yylhsminor.yy147;
2866 break;
2867 default:
2868 /* (122) lvalue ::= ID */ yytestcase(yyruleno==122);
2869 /* (123) lvalue ::= FILL */ yytestcase(yyruleno==123);
2870 /* (124) lvalue ::= COLOR */ yytestcase(yyruleno==124);
2871 /* (125) lvalue ::= THICKNESS */ yytestcase(yyruleno==125);
2872 /* (126) rvalue ::= expr */ yytestcase(yyruleno==126);
2873 /* (127) print ::= PRINT */ yytestcase(yyruleno==127);
2874 /* (128) prlist ::= pritem (OPTIMIZED OUT) */ assert(yyruleno!=128);
2875 /* (129) prlist ::= prlist prsep pritem */ yytestcase(yyruleno==129);
2876 /* (130) direction ::= UP */ yytestcase(yyruleno==130);
2877 /* (131) direction ::= DOWN */ yytestcase(yyruleno==131);
2878 /* (132) direction ::= LEFT */ yytestcase(yyruleno==132);
2879 /* (133) direction ::= RIGHT */ yytestcase(yyruleno==133);
2880 /* (134) attribute_list ::= alist */ yytestcase(yyruleno==134);
2881 /* (135) alist ::= */ yytestcase(yyruleno==135);
2882 /* (136) alist ::= alist attribute */ yytestcase(yyruleno==136);
2883 /* (137) attribute ::= boolproperty (OPTIMIZED OUT) */ assert(yyruleno!=137);
2884 /* (138) attribute ::= WITH withclause */ yytestcase(yyruleno==138);
2885 /* (139) go ::= GO */ yytestcase(yyruleno==139);
2886 /* (140) go ::= */ yytestcase(yyruleno==140);
2887 /* (141) even ::= UNTIL EVEN WITH */ yytestcase(yyruleno==141);
2888 /* (142) even ::= EVEN WITH */ yytestcase(yyruleno==142);
2889 /* (143) dashproperty ::= DOTTED */ yytestcase(yyruleno==143);
2890 /* (144) dashproperty ::= DASHED */ yytestcase(yyruleno==144);
2891 /* (145) colorproperty ::= FILL */ yytestcase(yyruleno==145);
2892 /* (146) colorproperty ::= COLOR */ yytestcase(yyruleno==146);
2893 /* (147) position ::= place */ yytestcase(yyruleno==147);
2894 /* (148) between ::= WAY BETWEEN */ yytestcase(yyruleno==148);
2895 /* (149) between ::= BETWEEN */ yytestcase(yyruleno==149);
2896 /* (150) between ::= OF THE WAY BETWEEN */ yytestcase(yyruleno==150);
2897 /* (151) object ::= objectname */ yytestcase(yyruleno==151);
2898 /* (152) locproperty ::= X|Y */ yytestcase(yyruleno==152);
2899 /* (153) edge ::= EDGEPT */ yytestcase(yyruleno==153);
2900 /* (154) edge ::= TOP */ yytestcase(yyruleno==154);
2901 /* (155) edge ::= BOTTOM */ yytestcase(yyruleno==155);
2902 /* (156) edge ::= LEFT */ yytestcase(yyruleno==156);
2903 /* (157) edge ::= RIGHT */ yytestcase(yyruleno==157);
 
 
2904 break;
2905 /********** End reduce actions ************************************************/
2906 };
2907 assert( yyruleno<sizeof(yyRuleInfoLhs)/sizeof(yyRuleInfoLhs[0]) );
2908 yygoto = yyRuleInfoLhs[yyruleno];
@@ -2958,18 +2978,18 @@
2958 ){
2959 pik_parserARG_FETCH
2960 pik_parserCTX_FETCH
2961 #define TOKEN yyminor
2962 /************ Begin %syntax_error code ****************************************/
2963 #line 469 "pikchr.y"
2964
2965 if( TOKEN.z && TOKEN.z[0] ){
2966 pik_error(p, &TOKEN, "syntax error");
2967 }else{
2968 pik_error(p, 0, "syntax error");
2969 }
2970 #line 2995 "pikchr.c"
2971 /************ End %syntax_error code ******************************************/
2972 pik_parserARG_STORE /* Suppress warning about unused %extra_argument variable */
2973 pik_parserCTX_STORE
2974 }
2975
@@ -3198,11 +3218,11 @@
3198 #else
3199 (void)iToken;
3200 return 0;
3201 #endif
3202 }
3203 #line 705 "pikchr.y"
3204
3205
3206
3207 /* Chart of the 140 official HTML color names with their
3208 ** corresponding RGB value.
@@ -4634,10 +4654,44 @@
4634 pik_append(p, "\nERROR: ", -1);
4635 pik_append_text(p, zMsg, -1, 0);
4636 pik_append(p, "\n", 1);
4637 pik_append(p, "\n</pre></div>\n", -1);
4638 }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4639
4640 /* Free a complete list of elements */
4641 static void pik_elist_free(Pik *p, PEList *pEList){
4642 int i;
4643 if( pEList==0 ) return;
@@ -6279,10 +6333,11 @@
6279 { "above", 5, T_ABOVE, 0, 0 },
6280 { "abs", 3, T_FUNC1, FN_ABS, 0 },
6281 { "aligned", 7, T_ALIGNED, 0, 0 },
6282 { "and", 3, T_AND, 0, 0 },
6283 { "as", 2, T_AS, 0, 0 },
 
6284 { "at", 2, T_AT, 0, 0 },
6285 { "behind", 6, T_BEHIND, 0, 0 },
6286 { "below", 5, T_BELOW, 0, 0 },
6287 { "between", 7, T_BETWEEN, 0, 0 },
6288 { "big", 3, T_BIG, 0, 0 },
@@ -6488,12 +6543,19 @@
6488 case '[': { pToken->eType = T_LB; return 1; }
6489 case ']': { pToken->eType = T_RB; return 1; }
6490 case ',': { pToken->eType = T_COMMA; return 1; }
6491 case ':': { pToken->eType = T_COLON; return 1; }
6492 case '>': { pToken->eType = T_GT; return 1; }
6493 case '=': { pToken->eType = T_ASSIGN;
6494 pToken->eCode = T_ASSIGN; return 1; }
 
 
 
 
 
 
 
6495 case '-': {
6496 if( z[1]=='>' ){
6497 pToken->eType = T_RARROW;
6498 return 2;
6499 }else if( z[1]=='=' ){
@@ -6526,13 +6588,22 @@
6526 if( islower(c1) ){
6527 const PikWord *pFound;
6528 for(i=2; (c = z[i])>='a' && c<='z'; i++){}
6529 pFound = pik_find_word((const char*)z+1, i-1,
6530 pik_keywords, count(pik_keywords));
6531 if( pFound && (pFound->eType==T_EDGEPT || pFound->eEdge>0) ){
 
 
 
 
 
6532 pToken->eType = T_DOT_E;
 
 
 
6533 }else{
 
6534 pToken->eType = T_DOT_L;
6535 }
6536 return 1;
6537 }else if( isdigit(c1) ){
6538 i = 0;
@@ -6764,10 +6835,11 @@
6764 ** input text and the rendered SVG for all files named on the command
6765 ** line.
6766 */
6767 int main(int argc, char **argv){
6768 int i;
 
6769 printf(
6770 "<!DOCTYPE html>\n"
6771 "<html lang=\"en-US\">\n"
6772 "<head>\n<title>PIKCHR Test</title>\n"
6773 "<meta charset=\"utf-8\">\n"
@@ -6781,10 +6853,23 @@
6781 char *zOut;
6782 char *z, c;
6783 int j;
6784 int w, h;
6785
 
 
 
 
 
 
 
 
 
 
 
 
 
6786 printf("<h1>File %s</h1>\n", argv[i]);
6787 in = fopen(argv[i], "rb");
6788 if( in==0 ){
6789 fprintf(stderr, "cannot open \"%s\" for reading\n", argv[i]);
6790 continue;
@@ -6799,42 +6884,45 @@
6799 continue;
6800 }
6801 sz = fread(zIn, 1, sz, in);
6802 fclose(in);
6803 zIn[sz] = 0;
6804 printf("<p>Source text:</p>\n<blockquote><pre>\n");
6805 z = zIn;
6806 while( z[0]!=0 ){
6807 for(j=0; (c = z[j])!=0 && c!='<' && c!='>' && c!='&'; j++){}
6808 if( j ) printf("%.*s", j, z);
6809 z += j+1;
6810 j = -1;
6811 if( c=='<' ){
6812 printf("&lt;");
6813 }else if( c=='>' ){
6814 printf("&gt;");
6815 }else if( c=='&' ){
6816 printf("&amp;");
6817 }else if( c==0 ){
6818 break;
6819 }
6820 }
6821 printf("</pre></blockquote>\n");
 
 
6822 zOut = pikchr(zIn, "pikchr", 0, &w, &h);
6823 free(zIn);
6824 if( zOut ){
6825 if( w<0 ){
6826 printf("<p>ERROR:</p>\n");
6827 }else{
6828 printf("<p>Output size: %d by %d</p>\n", w, h);
6829 }
6830 printf("<div style='border:2px solid gray;max-width:%dpx'>\n%s</div>\n",
 
6831 w, zOut);
6832 free(zOut);
6833 }
6834 }
6835 printf("</body></html>\n");
6836 return 0;
6837 }
6838 #endif /* PIKCHR_SHELL */
6839
6840 #line 6865 "pikchr.c"
6841
--- src/pikchr.c
+++ src/pikchr.c
@@ -423,13 +423,15 @@
423 static void pik_same(Pik *p, PElem*, PToken*);
424 static PPoint pik_nth_vertex(Pik *p, PToken *pNth, PToken *pErr, PElem *pElem);
425 static PToken pik_next_semantic_token(Pik *p, PToken *pThis);
426 static void pik_compute_layout_settings(Pik*);
427 static void pik_behind(Pik*,PElem*);
428 static PElem *pik_assert(Pik*,PNum,PToken*,PNum);
429 static PElem *pik_place_assert(Pik*,PPoint*,PToken*,PPoint*);
430
431
432 #line 458 "pikchr.c"
433 /**************** End of %include directives **********************************/
434 /* These constants specify the various numeric values for terminal symbols.
435 ***************** Begin token definitions *************************************/
436 #ifndef T_ID
437 #define T_ID 1
@@ -443,86 +445,89 @@
445 #define T_UMINUS 9
446 #define T_EOL 10
447 #define T_ASSIGN 11
448 #define T_PLACENAME 12
449 #define T_COLON 13
450 #define T_ASSERT 14
451 #define T_LP 15
452 #define T_EQ 16
453 #define T_RP 17
454 #define T_FILL 18
455 #define T_COLOR 19
456 #define T_THICKNESS 20
457 #define T_PRINT 21
458 #define T_STRING 22
459 #define T_COMMA 23
460 #define T_CLASSNAME 24
461 #define T_LB 25
462 #define T_RB 26
463 #define T_UP 27
464 #define T_DOWN 28
465 #define T_LEFT 29
466 #define T_RIGHT 30
467 #define T_CLOSE 31
468 #define T_CHOP 32
469 #define T_FROM 33
470 #define T_TO 34
471 #define T_THEN 35
472 #define T_HEADING 36
473 #define T_GO 37
474 #define T_AT 38
475 #define T_WITH 39
476 #define T_SAME 40
477 #define T_AS 41
478 #define T_FIT 42
479 #define T_BEHIND 43
480 #define T_UNTIL 44
481 #define T_EVEN 45
482 #define T_DOT_E 46
483 #define T_HEIGHT 47
484 #define T_WIDTH 48
485 #define T_RADIUS 49
486 #define T_DIAMETER 50
487 #define T_DOTTED 51
488 #define T_DASHED 52
489 #define T_CW 53
490 #define T_CCW 54
491 #define T_LARROW 55
492 #define T_RARROW 56
493 #define T_LRARROW 57
494 #define T_INVIS 58
495 #define T_THICK 59
496 #define T_THIN 60
497 #define T_CENTER 61
498 #define T_LJUST 62
499 #define T_RJUST 63
500 #define T_ABOVE 64
501 #define T_BELOW 65
502 #define T_ITALIC 66
503 #define T_BOLD 67
504 #define T_ALIGNED 68
505 #define T_BIG 69
506 #define T_SMALL 70
507 #define T_AND 71
508 #define T_LT 72
509 #define T_GT 73
510 #define T_WAY 74
511 #define T_BETWEEN 75
512 #define T_THE 76
513 #define T_NTH 77
514 #define T_VERTEX 78
515 #define T_TOP 79
516 #define T_BOTTOM 80
517 #define T_START 81
518 #define T_END 82
519 #define T_IN 83
520 #define T_DOT_U 84
521 #define T_LAST 85
522 #define T_NUMBER 86
523 #define T_FUNC1 87
524 #define T_FUNC2 88
525 #define T_DOT_XY 89
526 #define T_X 90
527 #define T_Y 91
528 #define T_DOT_L 92
529 #endif
530 /**************** End token definitions ***************************************/
531
532 /* The next sections is a series of control #defines.
533 ** various aspects of the generated parser.
@@ -578,21 +583,21 @@
583 #ifndef INTERFACE
584 # define INTERFACE 1
585 #endif
586 /************* Begin control #defines *****************************************/
587 #define YYCODETYPE unsigned char
588 #define YYNOCODE 127
589 #define YYACTIONTYPE unsigned short int
590 #define pik_parserTOKENTYPE PToken
591 typedef union {
592 int yyinit;
593 pik_parserTOKENTYPE yy0;
594 PEList* yy42;
595 PPoint yy85;
596 PElem* yy118;
597 int yy156;
598 PNum yy215;
599 } YYMINORTYPE;
600 #ifndef YYSTACKDEPTH
601 #define YYSTACKDEPTH 100
602 #endif
603 #define pik_parserARG_SDECL
@@ -604,22 +609,22 @@
609 #define pik_parserCTX_PDECL ,Pik *p
610 #define pik_parserCTX_PARAM ,p
611 #define pik_parserCTX_FETCH Pik *p=yypParser->p;
612 #define pik_parserCTX_STORE yypParser->p=p;
613 #define YYFALLBACK 1
614 #define YYNSTATE 156
615 #define YYNRULE 151
616 #define YYNRULE_WITH_ACTION 113
617 #define YYNTOKEN 93
618 #define YY_MAX_SHIFT 155
619 #define YY_MIN_SHIFTREDUCE 271
620 #define YY_MAX_SHIFTREDUCE 421
621 #define YY_ERROR_ACTION 422
622 #define YY_ACCEPT_ACTION 423
623 #define YY_NO_ACTION 424
624 #define YY_MIN_REDUCE 425
625 #define YY_MAX_REDUCE 575
626 /************* End control #defines *******************************************/
627 #define YY_NLOOKAHEAD ((int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0])))
628
629 /* Define the yytestcase() macro to be a no-op if is not already defined
630 ** otherwise.
@@ -682,270 +687,312 @@
687 ** yy_reduce_ofst[] For each state, the offset into yy_action for
688 ** shifting non-terminals after a reduce.
689 ** yy_default[] Default action for each state.
690 **
691 *********** Begin parsing tables **********************************************/
692 #define YY_ACTTAB_COUNT (1178)
693 static const YYACTIONTYPE yy_action[] = {
694 /* 0 */ 550, 535, 425, 18, 536, 537, 111, 426, 433, 24,
695 /* 10 */ 550, 127, 28, 429, 61, 60, 59, 58, 407, 408,
696 /* 20 */ 327, 27, 79, 128, 155, 509, 550, 20, 478, 153,
697 /* 30 */ 119, 306, 307, 6, 5, 34, 554, 33, 4, 68,
698 /* 40 */ 126, 51, 323, 63, 50, 31, 414, 327, 327, 327,
699 /* 50 */ 327, 405, 406, 328, 329, 330, 331, 332, 333, 334,
700 /* 60 */ 335, 450, 28, 359, 552, 74, 552, 392, 393, 394,
701 /* 70 */ 395, 450, 29, 420, 419, 475, 153, 119, 293, 407,
702 /* 80 */ 408, 327, 344, 79, 361, 150, 289, 450, 8, 23,
703 /* 90 */ 71, 22, 306, 307, 6, 5, 34, 80, 33, 4,
704 /* 100 */ 68, 126, 26, 323, 63, 507, 153, 119, 327, 327,
705 /* 110 */ 327, 327, 405, 406, 328, 329, 330, 331, 332, 333,
706 /* 120 */ 334, 335, 449, 415, 416, 417, 418, 81, 110, 427,
707 /* 130 */ 433, 24, 449, 48, 44, 429, 117, 66, 154, 72,
708 /* 140 */ 407, 408, 327, 72, 79, 118, 155, 282, 449, 20,
709 /* 150 */ 21, 59, 58, 306, 307, 6, 5, 34, 30, 33,
710 /* 160 */ 4, 68, 126, 2, 323, 63, 379, 380, 414, 327,
711 /* 170 */ 327, 327, 327, 405, 406, 328, 329, 330, 331, 332,
712 /* 180 */ 333, 334, 335, 376, 414, 62, 56, 57, 512, 153,
713 /* 190 */ 119, 407, 408, 327, 359, 420, 419, 17, 64, 376,
714 /* 200 */ 414, 3, 56, 57, 77, 343, 291, 76, 363, 149,
715 /* 210 */ 359, 420, 419, 17, 404, 376, 414, 66, 56, 57,
716 /* 220 */ 327, 327, 327, 327, 405, 406, 359, 420, 419, 55,
717 /* 230 */ 403, 337, 337, 337, 337, 337, 337, 337, 337, 337,
718 /* 240 */ 337, 362, 151, 420, 419, 415, 416, 417, 418, 510,
719 /* 250 */ 153, 119, 130, 121, 426, 433, 24, 7, 412, 108,
720 /* 260 */ 429, 415, 416, 417, 418, 361, 150, 117, 375, 148,
721 /* 270 */ 147, 155, 135, 423, 20, 108, 134, 415, 416, 417,
722 /* 280 */ 418, 410, 10, 117, 375, 148, 147, 11, 12, 65,
723 /* 290 */ 114, 108, 346, 415, 416, 417, 418, 15, 53, 117,
724 /* 300 */ 375, 148, 147, 138, 136, 61, 60, 59, 58, 1,
725 /* 310 */ 109, 61, 60, 59, 58, 78, 367, 54, 374, 120,
726 /* 320 */ 153, 119, 360, 441, 49, 70, 118, 141, 75, 75,
727 /* 330 */ 140, 139, 480, 113, 120, 153, 119, 40, 365, 146,
728 /* 340 */ 138, 136, 61, 60, 59, 58, 366, 317, 152, 61,
729 /* 350 */ 60, 59, 58, 67, 142, 32, 424, 61, 60, 59,
730 /* 360 */ 58, 49, 424, 424, 424, 14, 13, 140, 139, 384,
731 /* 370 */ 281, 513, 424, 16, 40, 137, 411, 424, 424, 424,
732 /* 380 */ 145, 37, 125, 424, 424, 424, 385, 386, 387, 389,
733 /* 390 */ 77, 424, 291, 76, 424, 392, 393, 394, 395, 424,
734 /* 400 */ 424, 424, 14, 13, 376, 424, 424, 56, 57, 513,
735 /* 410 */ 16, 424, 137, 411, 513, 107, 424, 513, 55, 424,
736 /* 420 */ 424, 284, 285, 286, 376, 288, 424, 56, 57, 376,
737 /* 430 */ 318, 424, 56, 57, 424, 359, 424, 424, 55, 424,
738 /* 440 */ 359, 424, 376, 55, 424, 56, 57, 424, 424, 82,
739 /* 450 */ 424, 424, 424, 359, 424, 424, 55, 424, 120, 153,
740 /* 460 */ 119, 431, 24, 70, 36, 141, 93, 131, 129, 424,
741 /* 470 */ 432, 113, 120, 153, 119, 120, 153, 119, 146, 424,
742 /* 480 */ 108, 19, 376, 314, 424, 56, 57, 424, 117, 375,
743 /* 490 */ 148, 147, 142, 359, 424, 146, 55, 424, 424, 424,
744 /* 500 */ 108, 61, 60, 59, 58, 108, 424, 424, 117, 375,
745 /* 510 */ 148, 147, 414, 117, 375, 148, 147, 38, 108, 424,
746 /* 520 */ 376, 424, 359, 56, 57, 424, 117, 375, 148, 147,
747 /* 530 */ 9, 107, 424, 376, 55, 424, 56, 57, 376, 420,
748 /* 540 */ 419, 56, 57, 424, 359, 424, 424, 42, 424, 359,
749 /* 550 */ 424, 424, 46, 424, 70, 424, 141, 424, 108, 424,
750 /* 560 */ 424, 479, 113, 120, 153, 119, 117, 375, 148, 147,
751 /* 570 */ 70, 424, 141, 61, 60, 59, 58, 473, 113, 120,
752 /* 580 */ 153, 119, 424, 142, 424, 35, 424, 108, 424, 415,
753 /* 590 */ 416, 417, 418, 424, 424, 117, 108, 424, 313, 142,
754 /* 600 */ 61, 60, 59, 58, 117, 375, 148, 147, 424, 108,
755 /* 610 */ 424, 424, 424, 424, 108, 424, 424, 117, 375, 148,
756 /* 620 */ 147, 424, 117, 375, 148, 147, 70, 424, 141, 424,
757 /* 630 */ 424, 424, 39, 463, 113, 120, 153, 119, 70, 424,
758 /* 640 */ 141, 61, 60, 59, 58, 462, 113, 120, 153, 119,
759 /* 650 */ 70, 424, 141, 424, 342, 142, 424, 499, 113, 120,
760 /* 660 */ 153, 119, 70, 424, 141, 424, 424, 142, 424, 133,
761 /* 670 */ 113, 120, 153, 119, 424, 70, 424, 141, 424, 142,
762 /* 680 */ 424, 424, 506, 113, 120, 153, 119, 70, 424, 141,
763 /* 690 */ 83, 142, 424, 424, 505, 113, 120, 153, 119, 120,
764 /* 700 */ 153, 119, 424, 70, 142, 141, 424, 424, 424, 424,
765 /* 710 */ 504, 113, 120, 153, 119, 70, 142, 141, 86, 146,
766 /* 720 */ 424, 424, 503, 113, 120, 153, 119, 120, 153, 119,
767 /* 730 */ 424, 70, 142, 141, 424, 424, 424, 424, 502, 113,
768 /* 740 */ 120, 153, 119, 70, 142, 141, 424, 146, 424, 424,
769 /* 750 */ 501, 113, 120, 153, 119, 70, 424, 141, 424, 424,
770 /* 760 */ 142, 424, 143, 113, 120, 153, 119, 70, 424, 141,
771 /* 770 */ 424, 424, 142, 424, 144, 113, 120, 153, 119, 424,
772 /* 780 */ 69, 424, 141, 424, 142, 424, 424, 112, 113, 120,
773 /* 790 */ 153, 119, 70, 424, 141, 424, 142, 424, 424, 132,
774 /* 800 */ 113, 120, 153, 119, 424, 424, 424, 424, 70, 142,
775 /* 810 */ 141, 424, 424, 424, 109, 459, 113, 120, 153, 119,
776 /* 820 */ 87, 142, 141, 120, 153, 119, 424, 441, 124, 120,
777 /* 830 */ 153, 119, 424, 545, 424, 424, 73, 142, 61, 60,
778 /* 840 */ 59, 58, 302, 146, 141, 120, 153, 119, 424, 142,
779 /* 850 */ 123, 122, 153, 119, 424, 424, 424, 444, 424, 25,
780 /* 860 */ 424, 424, 424, 109, 424, 146, 424, 424, 424, 424,
781 /* 870 */ 109, 123, 120, 153, 119, 424, 455, 424, 424, 120,
782 /* 880 */ 153, 119, 424, 430, 61, 60, 59, 58, 61, 60,
783 /* 890 */ 59, 58, 146, 424, 424, 424, 424, 374, 424, 146,
784 /* 900 */ 99, 374, 424, 41, 424, 424, 100, 45, 424, 120,
785 /* 910 */ 153, 119, 101, 424, 424, 120, 153, 119, 424, 424,
786 /* 920 */ 424, 120, 153, 119, 424, 424, 424, 102, 424, 146,
787 /* 930 */ 424, 424, 424, 424, 88, 146, 120, 153, 119, 424,
788 /* 940 */ 424, 146, 89, 120, 153, 119, 424, 424, 84, 424,
789 /* 950 */ 424, 120, 153, 119, 424, 103, 146, 120, 153, 119,
790 /* 960 */ 424, 424, 424, 146, 120, 153, 119, 424, 424, 90,
791 /* 970 */ 424, 146, 91, 424, 424, 424, 424, 146, 120, 153,
792 /* 980 */ 119, 120, 153, 119, 146, 85, 61, 60, 59, 58,
793 /* 990 */ 424, 424, 424, 424, 120, 153, 119, 104, 146, 424,
794 /* 1000 */ 424, 146, 424, 424, 424, 43, 120, 153, 119, 92,
795 /* 1010 */ 424, 424, 424, 105, 146, 424, 424, 424, 120, 153,
796 /* 1020 */ 119, 106, 120, 153, 119, 94, 146, 424, 424, 424,
797 /* 1030 */ 120, 153, 119, 424, 120, 153, 119, 424, 146, 424,
798 /* 1040 */ 424, 424, 146, 424, 424, 424, 95, 424, 424, 96,
799 /* 1050 */ 146, 424, 424, 97, 146, 120, 153, 119, 120, 153,
800 /* 1060 */ 119, 98, 120, 153, 119, 424, 61, 60, 59, 58,
801 /* 1070 */ 120, 153, 119, 424, 424, 146, 527, 424, 146, 341,
802 /* 1080 */ 424, 424, 146, 526, 424, 120, 153, 119, 424, 424,
803 /* 1090 */ 146, 424, 120, 153, 119, 424, 424, 424, 424, 525,
804 /* 1100 */ 424, 424, 424, 424, 524, 146, 424, 115, 120, 153,
805 /* 1110 */ 119, 116, 146, 120, 153, 119, 120, 153, 119, 424,
806 /* 1120 */ 120, 153, 119, 61, 60, 59, 58, 424, 146, 424,
807 /* 1130 */ 424, 424, 424, 146, 424, 424, 146, 424, 424, 424,
808 /* 1140 */ 146, 424, 47, 424, 424, 61, 60, 59, 58, 297,
809 /* 1150 */ 61, 60, 59, 58, 61, 60, 59, 58, 61, 60,
810 /* 1160 */ 59, 58, 424, 378, 61, 60, 59, 58, 424, 424,
811 /* 1170 */ 424, 377, 424, 52, 424, 424, 424, 374,
812 };
813 static const YYCODETYPE yy_lookahead[] = {
814 /* 0 */ 0, 98, 0, 125, 101, 102, 93, 94, 95, 96,
815 /* 10 */ 10, 99, 10, 100, 4, 5, 6, 7, 18, 19,
816 /* 20 */ 20, 120, 22, 99, 111, 99, 26, 114, 106, 107,
817 /* 30 */ 108, 31, 32, 33, 34, 35, 124, 37, 38, 39,
818 /* 40 */ 40, 98, 42, 43, 101, 102, 2, 47, 48, 49,
819 /* 50 */ 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
820 /* 60 */ 60, 0, 10, 12, 121, 122, 123, 27, 28, 29,
821 /* 70 */ 30, 10, 100, 29, 30, 106, 107, 108, 26, 18,
822 /* 80 */ 19, 20, 17, 22, 24, 25, 23, 26, 23, 119,
823 /* 90 */ 46, 117, 31, 32, 33, 34, 35, 109, 37, 38,
824 /* 100 */ 39, 40, 120, 42, 43, 106, 107, 108, 47, 48,
825 /* 110 */ 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
826 /* 120 */ 59, 60, 0, 79, 80, 81, 82, 109, 77, 94,
827 /* 130 */ 95, 96, 10, 4, 5, 100, 85, 3, 78, 46,
828 /* 140 */ 18, 19, 20, 46, 22, 85, 111, 17, 26, 114,
829 /* 150 */ 15, 6, 7, 31, 32, 33, 34, 35, 16, 37,
830 /* 160 */ 38, 39, 40, 38, 42, 43, 90, 91, 2, 47,
831 /* 170 */ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
832 /* 180 */ 58, 59, 60, 1, 2, 92, 4, 5, 106, 107,
833 /* 190 */ 108, 18, 19, 20, 12, 29, 30, 15, 41, 1,
834 /* 200 */ 2, 38, 4, 5, 22, 17, 24, 25, 24, 25,
835 /* 210 */ 12, 29, 30, 15, 39, 1, 2, 83, 4, 5,
836 /* 220 */ 47, 48, 49, 50, 51, 52, 12, 29, 30, 15,
837 /* 230 */ 39, 61, 62, 63, 64, 65, 66, 67, 68, 69,
838 /* 240 */ 70, 24, 25, 29, 30, 79, 80, 81, 82, 106,
839 /* 250 */ 107, 108, 45, 93, 94, 95, 96, 71, 75, 77,
840 /* 260 */ 100, 79, 80, 81, 82, 24, 25, 85, 86, 87,
841 /* 270 */ 88, 111, 76, 113, 114, 77, 74, 79, 80, 81,
842 /* 280 */ 82, 75, 3, 85, 86, 87, 88, 3, 3, 3,
843 /* 290 */ 89, 77, 73, 79, 80, 81, 82, 23, 15, 85,
844 /* 300 */ 86, 87, 88, 2, 3, 4, 5, 6, 7, 13,
845 /* 310 */ 97, 4, 5, 6, 7, 8, 26, 15, 17, 106,
846 /* 320 */ 107, 108, 12, 110, 23, 97, 85, 99, 115, 116,
847 /* 330 */ 29, 30, 104, 105, 106, 107, 108, 36, 26, 126,
848 /* 340 */ 2, 3, 4, 5, 6, 7, 26, 2, 84, 4,
849 /* 350 */ 5, 6, 7, 3, 126, 11, 127, 4, 5, 6,
850 /* 360 */ 7, 23, 127, 127, 127, 64, 65, 29, 30, 1,
851 /* 370 */ 17, 46, 127, 72, 36, 74, 75, 127, 127, 127,
852 /* 380 */ 12, 36, 14, 127, 127, 127, 18, 19, 20, 21,
853 /* 390 */ 22, 127, 24, 25, 127, 27, 28, 29, 30, 127,
854 /* 400 */ 127, 127, 64, 65, 1, 127, 127, 4, 5, 84,
855 /* 410 */ 72, 127, 74, 75, 89, 12, 127, 92, 15, 127,
856 /* 420 */ 127, 18, 19, 20, 1, 22, 127, 4, 5, 1,
857 /* 430 */ 2, 127, 4, 5, 127, 12, 127, 127, 15, 127,
858 /* 440 */ 12, 127, 1, 15, 127, 4, 5, 127, 127, 97,
859 /* 450 */ 127, 127, 127, 12, 127, 127, 15, 127, 106, 107,
860 /* 460 */ 108, 95, 96, 97, 36, 99, 97, 44, 45, 127,
861 /* 470 */ 104, 105, 106, 107, 108, 106, 107, 108, 126, 127,
862 /* 480 */ 77, 112, 1, 2, 127, 4, 5, 127, 85, 86,
863 /* 490 */ 87, 88, 126, 12, 127, 126, 15, 127, 127, 127,
864 /* 500 */ 77, 4, 5, 6, 7, 77, 127, 127, 85, 86,
865 /* 510 */ 87, 88, 2, 85, 86, 87, 88, 36, 77, 127,
866 /* 520 */ 1, 127, 12, 4, 5, 127, 85, 86, 87, 88,
867 /* 530 */ 33, 12, 127, 1, 15, 127, 4, 5, 1, 29,
868 /* 540 */ 30, 4, 5, 127, 12, 127, 127, 15, 127, 12,
869 /* 550 */ 127, 127, 15, 127, 97, 127, 99, 127, 77, 127,
870 /* 560 */ 127, 104, 105, 106, 107, 108, 85, 86, 87, 88,
871 /* 570 */ 97, 127, 99, 4, 5, 6, 7, 104, 105, 106,
872 /* 580 */ 107, 108, 127, 126, 127, 16, 127, 77, 127, 79,
873 /* 590 */ 80, 81, 82, 127, 127, 85, 77, 127, 2, 126,
874 /* 600 */ 4, 5, 6, 7, 85, 86, 87, 88, 127, 77,
875 /* 610 */ 127, 127, 127, 127, 77, 127, 127, 85, 86, 87,
876 /* 620 */ 88, 127, 85, 86, 87, 88, 97, 127, 99, 127,
877 /* 630 */ 127, 127, 36, 104, 105, 106, 107, 108, 97, 127,
878 /* 640 */ 99, 4, 5, 6, 7, 104, 105, 106, 107, 108,
879 /* 650 */ 97, 127, 99, 127, 17, 126, 127, 104, 105, 106,
880 /* 660 */ 107, 108, 97, 127, 99, 127, 127, 126, 127, 104,
881 /* 670 */ 105, 106, 107, 108, 127, 97, 127, 99, 127, 126,
882 /* 680 */ 127, 127, 104, 105, 106, 107, 108, 97, 127, 99,
883 /* 690 */ 97, 126, 127, 127, 104, 105, 106, 107, 108, 106,
884 /* 700 */ 107, 108, 127, 97, 126, 99, 127, 127, 127, 127,
885 /* 710 */ 104, 105, 106, 107, 108, 97, 126, 99, 97, 126,
886 /* 720 */ 127, 127, 104, 105, 106, 107, 108, 106, 107, 108,
887 /* 730 */ 127, 97, 126, 99, 127, 127, 127, 127, 104, 105,
888 /* 740 */ 106, 107, 108, 97, 126, 99, 127, 126, 127, 127,
889 /* 750 */ 104, 105, 106, 107, 108, 97, 127, 99, 127, 127,
890 /* 760 */ 126, 127, 104, 105, 106, 107, 108, 97, 127, 99,
891 /* 770 */ 127, 127, 126, 127, 104, 105, 106, 107, 108, 127,
892 /* 780 */ 97, 127, 99, 127, 126, 127, 127, 104, 105, 106,
893 /* 790 */ 107, 108, 97, 127, 99, 127, 126, 127, 127, 104,
894 /* 800 */ 105, 106, 107, 108, 127, 127, 127, 127, 97, 126,
895 /* 810 */ 99, 127, 127, 127, 97, 104, 105, 106, 107, 108,
896 /* 820 */ 97, 126, 99, 106, 107, 108, 127, 110, 105, 106,
897 /* 830 */ 107, 108, 127, 116, 127, 127, 97, 126, 4, 5,
898 /* 840 */ 6, 7, 8, 126, 99, 106, 107, 108, 127, 126,
899 /* 850 */ 105, 106, 107, 108, 127, 127, 127, 118, 127, 120,
900 /* 860 */ 127, 127, 127, 97, 127, 126, 127, 127, 127, 127,
901 /* 870 */ 97, 126, 106, 107, 108, 127, 110, 127, 127, 106,
902 /* 880 */ 107, 108, 127, 110, 4, 5, 6, 7, 4, 5,
903 /* 890 */ 6, 7, 126, 127, 127, 127, 127, 17, 127, 126,
904 /* 900 */ 97, 17, 127, 23, 127, 127, 97, 23, 127, 106,
905 /* 910 */ 107, 108, 97, 127, 127, 106, 107, 108, 127, 127,
906 /* 920 */ 127, 106, 107, 108, 127, 127, 127, 97, 127, 126,
907 /* 930 */ 127, 127, 127, 127, 97, 126, 106, 107, 108, 127,
908 /* 940 */ 127, 126, 97, 106, 107, 108, 127, 127, 97, 127,
909 /* 950 */ 127, 106, 107, 108, 127, 97, 126, 106, 107, 108,
910 /* 960 */ 127, 127, 127, 126, 106, 107, 108, 127, 127, 97,
911 /* 970 */ 127, 126, 97, 127, 127, 127, 127, 126, 106, 107,
912 /* 980 */ 108, 106, 107, 108, 126, 97, 4, 5, 6, 7,
913 /* 990 */ 127, 127, 127, 127, 106, 107, 108, 97, 126, 127,
914 /* 1000 */ 127, 126, 127, 127, 127, 23, 106, 107, 108, 97,
915 /* 1010 */ 127, 127, 127, 97, 126, 127, 127, 127, 106, 107,
916 /* 1020 */ 108, 97, 106, 107, 108, 97, 126, 127, 127, 127,
917 /* 1030 */ 106, 107, 108, 127, 106, 107, 108, 127, 126, 127,
918 /* 1040 */ 127, 127, 126, 127, 127, 127, 97, 127, 127, 97,
919 /* 1050 */ 126, 127, 127, 97, 126, 106, 107, 108, 106, 107,
920 /* 1060 */ 108, 97, 106, 107, 108, 127, 4, 5, 6, 7,
921 /* 1070 */ 106, 107, 108, 127, 127, 126, 97, 127, 126, 17,
922 /* 1080 */ 127, 127, 126, 97, 127, 106, 107, 108, 127, 127,
923 /* 1090 */ 126, 127, 106, 107, 108, 127, 127, 127, 127, 97,
924 /* 1100 */ 127, 127, 127, 127, 97, 126, 127, 97, 106, 107,
925 /* 1110 */ 108, 97, 126, 106, 107, 108, 106, 107, 108, 127,
926 /* 1120 */ 106, 107, 108, 4, 5, 6, 7, 127, 126, 127,
927 /* 1130 */ 127, 127, 127, 126, 127, 127, 126, 127, 127, 127,
928 /* 1140 */ 126, 127, 23, 127, 127, 4, 5, 6, 7, 8,
929 /* 1150 */ 4, 5, 6, 7, 4, 5, 6, 7, 4, 5,
930 /* 1160 */ 6, 7, 127, 17, 4, 5, 6, 7, 127, 127,
931 /* 1170 */ 127, 17, 127, 23, 127, 127, 127, 17, 127, 127,
932 /* 1180 */ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
933 /* 1190 */ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
934 /* 1200 */ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
935 /* 1210 */ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
936 /* 1220 */ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
937 /* 1230 */ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
938 /* 1240 */ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
939 /* 1250 */ 127, 127, 127, 127, 127, 127, 127, 127, 93, 93,
940 /* 1260 */ 93, 93, 93, 93, 93, 93, 93, 93, 93, 93,
941 /* 1270 */ 93,
942 };
943 #define YY_SHIFT_COUNT (155)
944 #define YY_SHIFT_MIN (0)
945 #define YY_SHIFT_MAX (1160)
946 static const unsigned short int yy_shift_ofst[] = {
947 /* 0 */ 368, 182, 198, 198, 198, 198, 198, 198, 198, 198,
948 /* 10 */ 198, 198, 198, 198, 198, 198, 198, 198, 198, 198,
949 /* 20 */ 403, 214, 403, 368, 441, 0, 61, 122, 368, 423,
950 /* 30 */ 510, 519, 519, 428, 481, 441, 441, 441, 441, 441,
951 /* 40 */ 441, 441, 441, 441, 532, 441, 441, 441, 537, 441,
952 /* 50 */ 441, 441, 441, 441, 441, 441, 441, 441, 441, 441,
953 /* 60 */ 441, 441, 173, 51, 51, 51, 51, 51, 44, 301,
954 /* 70 */ 338, 166, 166, 307, 40, 63, 1178, 1178, 1178, 1178,
955 /* 80 */ 170, 170, 345, 596, 880, 884, 353, 569, 497, 637,
956 /* 90 */ 982, 1062, 1119, 834, 1141, 1146, 1150, 1154, 1160, 10,
957 /* 100 */ 10, 10, 10, 10, 10, 10, 10, 325, 60, 10,
958 /* 110 */ 241, 52, 65, 129, 76, 145, 145, 184, 217, 134,
959 /* 120 */ 93, 2, 97, 130, 142, 135, 157, 125, 163, 175,
960 /* 130 */ 191, 207, 186, 188, 183, 202, 196, 206, 279, 284,
961 /* 140 */ 285, 286, 201, 219, 274, 296, 201, 283, 302, 290,
962 /* 150 */ 312, 320, 310, 264, 350, 344,
 
963 };
964 #define YY_REDUCE_COUNT (79)
965 #define YY_REDUCE_MIN (-122)
966 #define YY_REDUCE_MAX (1014)
967 static const short yy_reduce_ofst[] = {
968 /* 0 */ 160, 366, 228, 457, 473, 529, 541, 553, 565, 578,
969 /* 10 */ 590, 606, 618, 634, 646, 658, 670, 683, 695, 711,
970 /* 20 */ 213, 723, 717, -87, 739, -57, -57, -57, 35, 369,
971 /* 30 */ 745, 766, 773, 352, 593, 621, 803, 809, 815, 830,
972 /* 40 */ 837, 845, 851, 858, 872, 875, 888, 900, 912, 916,
973 /* 50 */ 924, 928, 949, 952, 956, 964, 979, 986, 1002, 1007,
974 /* 60 */ 1010, 1014, -97, -78, -31, -1, 82, 143, -88, -122,
975 /* 70 */ -122, -76, -74, -99, -28, -26, -30, -12, -18, 18,
 
976 };
977 static const YYACTIONTYPE yy_default[] = {
978 /* 0 */ 428, 422, 422, 422, 422, 422, 422, 422, 422, 422,
979 /* 10 */ 422, 422, 422, 422, 422, 422, 422, 422, 422, 422,
980 /* 20 */ 422, 422, 422, 428, 551, 556, 556, 556, 428, 458,
981 /* 30 */ 422, 422, 422, 555, 464, 422, 422, 422, 422, 422,
982 /* 40 */ 422, 422, 422, 422, 422, 422, 422, 422, 422, 422,
983 /* 50 */ 454, 422, 422, 422, 422, 422, 422, 422, 422, 422,
984 /* 60 */ 422, 422, 422, 422, 422, 422, 422, 422, 422, 422,
985 /* 70 */ 422, 422, 422, 551, 422, 434, 448, 490, 551, 490,
986 /* 80 */ 446, 476, 422, 422, 422, 422, 422, 422, 422, 422,
987 /* 90 */ 422, 422, 422, 457, 452, 422, 422, 422, 422, 470,
988 /* 100 */ 469, 466, 465, 494, 493, 492, 453, 437, 422, 542,
989 /* 110 */ 422, 422, 422, 563, 422, 523, 522, 518, 422, 511,
990 /* 120 */ 508, 422, 508, 422, 422, 422, 474, 422, 422, 422,
991 /* 130 */ 422, 422, 422, 422, 422, 422, 422, 422, 422, 422,
992 /* 140 */ 422, 422, 567, 422, 422, 422, 422, 422, 422, 422,
993 /* 150 */ 422, 422, 422, 575, 422, 422,
 
994 };
995 /********** End of lemon-generated parsing tables *****************************/
996
997 /* The next table maps tokens (terminal symbols) into fallback tokens.
998 ** If a construct like the following:
@@ -975,10 +1022,14 @@
1022 0, /* UMINUS => nothing */
1023 0, /* EOL => nothing */
1024 0, /* ASSIGN => nothing */
1025 0, /* PLACENAME => nothing */
1026 0, /* COLON => nothing */
1027 0, /* ASSERT => nothing */
1028 0, /* LP => nothing */
1029 0, /* EQ => nothing */
1030 0, /* RP => nothing */
1031 0, /* FILL => nothing */
1032 0, /* COLOR => nothing */
1033 0, /* THICKNESS => nothing */
1034 0, /* PRINT => nothing */
1035 0, /* STRING => nothing */
@@ -1028,33 +1079,32 @@
1079 0, /* ITALIC => nothing */
1080 0, /* BOLD => nothing */
1081 0, /* ALIGNED => nothing */
1082 0, /* BIG => nothing */
1083 0, /* SMALL => nothing */
 
 
1084 0, /* AND => nothing */
1085 0, /* LT => nothing */
1086 0, /* GT => nothing */
1087 0, /* WAY => nothing */
1088 0, /* BETWEEN => nothing */
1089 0, /* THE => nothing */
1090 0, /* NTH => nothing */
1091 0, /* VERTEX => nothing */
1092 0, /* TOP => nothing */
1093 0, /* BOTTOM => nothing */
1094 0, /* START => nothing */
1095 0, /* END => nothing */
 
 
1096 0, /* IN => nothing */
1097 0, /* DOT_U => nothing */
1098 0, /* LAST => nothing */
1099 0, /* NUMBER => nothing */
1100 0, /* FUNC1 => nothing */
1101 0, /* FUNC2 => nothing */
1102 0, /* DOT_XY => nothing */
1103 0, /* X => nothing */
1104 0, /* Y => nothing */
1105 0, /* DOT_L => nothing */
 
1106 };
1107 #endif /* YYFALLBACK */
1108
1109 /* The following structure represents a single element of the
1110 ** parser's stack. Information stored includes:
@@ -1153,119 +1203,123 @@
1203 /* 9 */ "UMINUS",
1204 /* 10 */ "EOL",
1205 /* 11 */ "ASSIGN",
1206 /* 12 */ "PLACENAME",
1207 /* 13 */ "COLON",
1208 /* 14 */ "ASSERT",
1209 /* 15 */ "LP",
1210 /* 16 */ "EQ",
1211 /* 17 */ "RP",
1212 /* 18 */ "FILL",
1213 /* 19 */ "COLOR",
1214 /* 20 */ "THICKNESS",
1215 /* 21 */ "PRINT",
1216 /* 22 */ "STRING",
1217 /* 23 */ "COMMA",
1218 /* 24 */ "CLASSNAME",
1219 /* 25 */ "LB",
1220 /* 26 */ "RB",
1221 /* 27 */ "UP",
1222 /* 28 */ "DOWN",
1223 /* 29 */ "LEFT",
1224 /* 30 */ "RIGHT",
1225 /* 31 */ "CLOSE",
1226 /* 32 */ "CHOP",
1227 /* 33 */ "FROM",
1228 /* 34 */ "TO",
1229 /* 35 */ "THEN",
1230 /* 36 */ "HEADING",
1231 /* 37 */ "GO",
1232 /* 38 */ "AT",
1233 /* 39 */ "WITH",
1234 /* 40 */ "SAME",
1235 /* 41 */ "AS",
1236 /* 42 */ "FIT",
1237 /* 43 */ "BEHIND",
1238 /* 44 */ "UNTIL",
1239 /* 45 */ "EVEN",
1240 /* 46 */ "DOT_E",
1241 /* 47 */ "HEIGHT",
1242 /* 48 */ "WIDTH",
1243 /* 49 */ "RADIUS",
1244 /* 50 */ "DIAMETER",
1245 /* 51 */ "DOTTED",
1246 /* 52 */ "DASHED",
1247 /* 53 */ "CW",
1248 /* 54 */ "CCW",
1249 /* 55 */ "LARROW",
1250 /* 56 */ "RARROW",
1251 /* 57 */ "LRARROW",
1252 /* 58 */ "INVIS",
1253 /* 59 */ "THICK",
1254 /* 60 */ "THIN",
1255 /* 61 */ "CENTER",
1256 /* 62 */ "LJUST",
1257 /* 63 */ "RJUST",
1258 /* 64 */ "ABOVE",
1259 /* 65 */ "BELOW",
1260 /* 66 */ "ITALIC",
1261 /* 67 */ "BOLD",
1262 /* 68 */ "ALIGNED",
1263 /* 69 */ "BIG",
1264 /* 70 */ "SMALL",
1265 /* 71 */ "AND",
1266 /* 72 */ "LT",
1267 /* 73 */ "GT",
1268 /* 74 */ "WAY",
1269 /* 75 */ "BETWEEN",
1270 /* 76 */ "THE",
1271 /* 77 */ "NTH",
1272 /* 78 */ "VERTEX",
1273 /* 79 */ "TOP",
1274 /* 80 */ "BOTTOM",
1275 /* 81 */ "START",
1276 /* 82 */ "END",
1277 /* 83 */ "IN",
1278 /* 84 */ "DOT_U",
1279 /* 85 */ "LAST",
1280 /* 86 */ "NUMBER",
1281 /* 87 */ "FUNC1",
1282 /* 88 */ "FUNC2",
1283 /* 89 */ "DOT_XY",
1284 /* 90 */ "X",
1285 /* 91 */ "Y",
1286 /* 92 */ "DOT_L",
1287 /* 93 */ "element_list",
1288 /* 94 */ "element",
1289 /* 95 */ "unnamed_element",
1290 /* 96 */ "basetype",
1291 /* 97 */ "expr",
1292 /* 98 */ "numproperty",
1293 /* 99 */ "edge",
1294 /* 100 */ "direction",
1295 /* 101 */ "dashproperty",
1296 /* 102 */ "colorproperty",
1297 /* 103 */ "locproperty",
1298 /* 104 */ "position",
1299 /* 105 */ "place",
1300 /* 106 */ "object",
1301 /* 107 */ "objectname",
1302 /* 108 */ "nth",
1303 /* 109 */ "textposition",
1304 /* 110 */ "rvalue",
1305 /* 111 */ "lvalue",
1306 /* 112 */ "even",
1307 /* 113 */ "document",
1308 /* 114 */ "print",
1309 /* 115 */ "prlist",
1310 /* 116 */ "pritem",
1311 /* 117 */ "prsep",
1312 /* 118 */ "attribute_list",
1313 /* 119 */ "savelist",
1314 /* 120 */ "alist",
1315 /* 121 */ "attribute",
1316 /* 122 */ "go",
1317 /* 123 */ "boolproperty",
1318 /* 124 */ "withclause",
1319 /* 125 */ "between",
1320 /* 126 */ "place2",
1321 };
1322 #endif /* defined(YYCOVERAGE) || !defined(NDEBUG) */
1323
1324 #ifndef NDEBUG
1325 /* For tracing reduce actions, the names of all rules are required.
@@ -1279,158 +1333,151 @@
1333 /* 5 */ "element ::= lvalue ASSIGN rvalue",
1334 /* 6 */ "element ::= PLACENAME COLON unnamed_element",
1335 /* 7 */ "element ::= PLACENAME COLON position",
1336 /* 8 */ "element ::= unnamed_element",
1337 /* 9 */ "element ::= print prlist",
1338 /* 10 */ "element ::= ASSERT LP expr EQ expr RP",
1339 /* 11 */ "element ::= ASSERT LP place EQ place RP",
1340 /* 12 */ "rvalue ::= PLACENAME",
1341 /* 13 */ "pritem ::= FILL",
1342 /* 14 */ "pritem ::= COLOR",
1343 /* 15 */ "pritem ::= THICKNESS",
1344 /* 16 */ "pritem ::= rvalue",
1345 /* 17 */ "pritem ::= STRING",
1346 /* 18 */ "prsep ::= COMMA",
1347 /* 19 */ "unnamed_element ::= basetype attribute_list",
1348 /* 20 */ "basetype ::= CLASSNAME",
1349 /* 21 */ "basetype ::= STRING textposition",
1350 /* 22 */ "basetype ::= LB savelist element_list RB",
1351 /* 23 */ "savelist ::=",
1352 /* 24 */ "attribute_list ::= expr alist",
1353 /* 25 */ "attribute_list ::= expr PERCENT alist",
1354 /* 26 */ "attribute ::= numproperty expr PERCENT",
1355 /* 27 */ "attribute ::= numproperty expr",
1356 /* 28 */ "attribute ::= dashproperty expr",
1357 /* 29 */ "attribute ::= dashproperty",
1358 /* 30 */ "attribute ::= colorproperty rvalue",
1359 /* 31 */ "attribute ::= go direction expr PERCENT",
1360 /* 32 */ "attribute ::= go direction expr",
1361 /* 33 */ "attribute ::= go direction",
1362 /* 34 */ "attribute ::= go direction even position",
1363 /* 35 */ "attribute ::= CLOSE",
1364 /* 36 */ "attribute ::= CHOP",
1365 /* 37 */ "attribute ::= FROM position",
1366 /* 38 */ "attribute ::= TO position",
1367 /* 39 */ "attribute ::= THEN",
1368 /* 40 */ "attribute ::= THEN expr HEADING expr",
1369 /* 41 */ "attribute ::= THEN HEADING expr",
1370 /* 42 */ "attribute ::= THEN expr EDGEPT",
1371 /* 43 */ "attribute ::= THEN EDGEPT",
1372 /* 44 */ "attribute ::= GO expr HEADING expr",
1373 /* 45 */ "attribute ::= GO HEADING expr",
1374 /* 46 */ "attribute ::= GO expr EDGEPT",
1375 /* 47 */ "attribute ::= GO EDGEPT",
1376 /* 48 */ "attribute ::= AT position",
1377 /* 49 */ "attribute ::= SAME",
1378 /* 50 */ "attribute ::= SAME AS object",
1379 /* 51 */ "attribute ::= STRING textposition",
1380 /* 52 */ "attribute ::= FIT",
1381 /* 53 */ "attribute ::= BEHIND object",
1382 /* 54 */ "withclause ::= DOT_E edge AT position",
1383 /* 55 */ "withclause ::= edge AT position",
1384 /* 56 */ "numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS",
1385 /* 57 */ "boolproperty ::= CW",
1386 /* 58 */ "boolproperty ::= CCW",
1387 /* 59 */ "boolproperty ::= LARROW",
1388 /* 60 */ "boolproperty ::= RARROW",
1389 /* 61 */ "boolproperty ::= LRARROW",
1390 /* 62 */ "boolproperty ::= INVIS",
1391 /* 63 */ "boolproperty ::= THICK",
1392 /* 64 */ "boolproperty ::= THIN",
1393 /* 65 */ "textposition ::=",
1394 /* 66 */ "textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL",
1395 /* 67 */ "position ::= expr COMMA expr",
1396 /* 68 */ "position ::= place PLUS expr COMMA expr",
1397 /* 69 */ "position ::= place MINUS expr COMMA expr",
1398 /* 70 */ "position ::= place PLUS LP expr COMMA expr RP",
1399 /* 71 */ "position ::= place MINUS LP expr COMMA expr RP",
1400 /* 72 */ "position ::= LP position COMMA position RP",
1401 /* 73 */ "position ::= LP position RP",
1402 /* 74 */ "position ::= expr between position AND position",
1403 /* 75 */ "position ::= expr LT position COMMA position GT",
1404 /* 76 */ "position ::= expr ABOVE position",
1405 /* 77 */ "position ::= expr BELOW position",
1406 /* 78 */ "position ::= expr LEFT OF position",
1407 /* 79 */ "position ::= expr RIGHT OF position",
1408 /* 80 */ "position ::= expr EDGEPT OF position",
1409 /* 81 */ "position ::= expr HEADING expr FROM position",
1410 /* 82 */ "place ::= edge OF object",
1411 /* 83 */ "place2 ::= object",
1412 /* 84 */ "place2 ::= object DOT_E edge",
1413 /* 85 */ "place2 ::= NTH VERTEX OF object",
1414 /* 86 */ "object ::= nth",
1415 /* 87 */ "object ::= nth OF|IN object",
1416 /* 88 */ "objectname ::= PLACENAME",
1417 /* 89 */ "objectname ::= objectname DOT_U PLACENAME",
1418 /* 90 */ "nth ::= NTH CLASSNAME",
1419 /* 91 */ "nth ::= NTH LAST CLASSNAME",
1420 /* 92 */ "nth ::= LAST CLASSNAME",
1421 /* 93 */ "nth ::= LAST",
1422 /* 94 */ "nth ::= NTH LB RB",
1423 /* 95 */ "nth ::= NTH LAST LB RB",
1424 /* 96 */ "nth ::= LAST LB RB",
1425 /* 97 */ "expr ::= expr PLUS expr",
1426 /* 98 */ "expr ::= expr MINUS expr",
1427 /* 99 */ "expr ::= expr STAR expr",
1428 /* 100 */ "expr ::= expr SLASH expr",
1429 /* 101 */ "expr ::= MINUS expr",
1430 /* 102 */ "expr ::= PLUS expr",
1431 /* 103 */ "expr ::= LP expr RP",
1432 /* 104 */ "expr ::= NUMBER",
1433 /* 105 */ "expr ::= ID",
1434 /* 106 */ "expr ::= FUNC1 LP expr RP",
1435 /* 107 */ "expr ::= FUNC2 LP expr COMMA expr RP",
1436 /* 108 */ "expr ::= place2 DOT_XY X",
1437 /* 109 */ "expr ::= place2 DOT_XY Y",
1438 /* 110 */ "expr ::= object DOT_L numproperty",
1439 /* 111 */ "expr ::= object DOT_L dashproperty",
1440 /* 112 */ "expr ::= object DOT_L colorproperty",
1441 /* 113 */ "lvalue ::= ID",
1442 /* 114 */ "lvalue ::= FILL",
1443 /* 115 */ "lvalue ::= COLOR",
1444 /* 116 */ "lvalue ::= THICKNESS",
1445 /* 117 */ "rvalue ::= expr",
1446 /* 118 */ "print ::= PRINT",
1447 /* 119 */ "prlist ::= pritem",
1448 /* 120 */ "prlist ::= prlist prsep pritem",
1449 /* 121 */ "direction ::= UP",
1450 /* 122 */ "direction ::= DOWN",
1451 /* 123 */ "direction ::= LEFT",
1452 /* 124 */ "direction ::= RIGHT",
1453 /* 125 */ "attribute_list ::= alist",
1454 /* 126 */ "alist ::=",
1455 /* 127 */ "alist ::= alist attribute",
1456 /* 128 */ "attribute ::= boolproperty",
1457 /* 129 */ "attribute ::= WITH withclause",
1458 /* 130 */ "go ::= GO",
1459 /* 131 */ "go ::=",
1460 /* 132 */ "even ::= UNTIL EVEN WITH",
1461 /* 133 */ "even ::= EVEN WITH",
1462 /* 134 */ "dashproperty ::= DOTTED",
1463 /* 135 */ "dashproperty ::= DASHED",
1464 /* 136 */ "colorproperty ::= FILL",
1465 /* 137 */ "colorproperty ::= COLOR",
1466 /* 138 */ "position ::= place",
1467 /* 139 */ "between ::= WAY BETWEEN",
1468 /* 140 */ "between ::= BETWEEN",
1469 /* 141 */ "between ::= OF THE WAY BETWEEN",
1470 /* 142 */ "place ::= place2",
1471 /* 143 */ "edge ::= EDGEPT",
1472 /* 144 */ "edge ::= TOP",
1473 /* 145 */ "edge ::= BOTTOM",
1474 /* 146 */ "edge ::= START",
1475 /* 147 */ "edge ::= END",
1476 /* 148 */ "edge ::= RIGHT",
1477 /* 149 */ "edge ::= LEFT",
1478 /* 150 */ "object ::= objectname",
 
 
 
 
 
 
 
1479 };
1480 #endif /* NDEBUG */
1481
1482
1483 #if YYSTACKDEPTH<=0
@@ -1552,24 +1599,24 @@
1599 ** Note: during a reduce, the only symbols destroyed are those
1600 ** which appear on the RHS of the rule, but which are *not* used
1601 ** inside the C code.
1602 */
1603 /********* Begin destructor definitions ***************************************/
1604 case 93: /* element_list */
 
 
 
 
 
 
 
 
 
1605 {
1606 #line 447 "pikchr.y"
1607 pik_elist_free(p,(yypminor->yy42));
1608 #line 1633 "pikchr.c"
1609 }
1610 break;
1611 case 94: /* element */
1612 case 95: /* unnamed_element */
1613 case 96: /* basetype */
1614 {
1615 #line 449 "pikchr.y"
1616 pik_elem_free(p,(yypminor->yy118));
1617 #line 1642 "pikchr.c"
1618 }
1619 break;
1620 /********* End destructor definitions *****************************************/
1621 default: break; /* If no destructor action specified: do nothing */
1622 }
@@ -1783,14 +1830,14 @@
1830 #endif
1831 while( yypParser->yytos>yypParser->yystack ) yy_pop_parser_stack(yypParser);
1832 /* Here code is inserted which will execute if the parser
1833 ** stack every overflows */
1834 /******** Begin %stack_overflow code ******************************************/
1835 #line 478 "pikchr.y"
1836
1837 pik_error(p, 0, "parser stack overflow");
1838 #line 1863 "pikchr.c"
1839 /******** End %stack_overflow code ********************************************/
1840 pik_parserARG_STORE /* Suppress warning about unused %extra_argument var */
1841 pik_parserCTX_STORE
1842 }
1843
@@ -1858,168 +1905,161 @@
1905 }
1906
1907 /* For rule J, yyRuleInfoLhs[J] contains the symbol on the left-hand side
1908 ** of that rule */
1909 static const YYCODETYPE yyRuleInfoLhs[] = {
1910 113, /* (0) document ::= element_list */
1911 93, /* (1) element_list ::= element */
1912 93, /* (2) element_list ::= element_list EOL element */
1913 94, /* (3) element ::= */
1914 94, /* (4) element ::= direction */
1915 94, /* (5) element ::= lvalue ASSIGN rvalue */
1916 94, /* (6) element ::= PLACENAME COLON unnamed_element */
1917 94, /* (7) element ::= PLACENAME COLON position */
1918 94, /* (8) element ::= unnamed_element */
1919 94, /* (9) element ::= print prlist */
1920 94, /* (10) element ::= ASSERT LP expr EQ expr RP */
1921 94, /* (11) element ::= ASSERT LP place EQ place RP */
1922 110, /* (12) rvalue ::= PLACENAME */
1923 116, /* (13) pritem ::= FILL */
1924 116, /* (14) pritem ::= COLOR */
1925 116, /* (15) pritem ::= THICKNESS */
1926 116, /* (16) pritem ::= rvalue */
1927 116, /* (17) pritem ::= STRING */
1928 117, /* (18) prsep ::= COMMA */
1929 95, /* (19) unnamed_element ::= basetype attribute_list */
1930 96, /* (20) basetype ::= CLASSNAME */
1931 96, /* (21) basetype ::= STRING textposition */
1932 96, /* (22) basetype ::= LB savelist element_list RB */
1933 119, /* (23) savelist ::= */
1934 118, /* (24) attribute_list ::= expr alist */
1935 118, /* (25) attribute_list ::= expr PERCENT alist */
1936 121, /* (26) attribute ::= numproperty expr PERCENT */
1937 121, /* (27) attribute ::= numproperty expr */
1938 121, /* (28) attribute ::= dashproperty expr */
1939 121, /* (29) attribute ::= dashproperty */
1940 121, /* (30) attribute ::= colorproperty rvalue */
1941 121, /* (31) attribute ::= go direction expr PERCENT */
1942 121, /* (32) attribute ::= go direction expr */
1943 121, /* (33) attribute ::= go direction */
1944 121, /* (34) attribute ::= go direction even position */
1945 121, /* (35) attribute ::= CLOSE */
1946 121, /* (36) attribute ::= CHOP */
1947 121, /* (37) attribute ::= FROM position */
1948 121, /* (38) attribute ::= TO position */
1949 121, /* (39) attribute ::= THEN */
1950 121, /* (40) attribute ::= THEN expr HEADING expr */
1951 121, /* (41) attribute ::= THEN HEADING expr */
1952 121, /* (42) attribute ::= THEN expr EDGEPT */
1953 121, /* (43) attribute ::= THEN EDGEPT */
1954 121, /* (44) attribute ::= GO expr HEADING expr */
1955 121, /* (45) attribute ::= GO HEADING expr */
1956 121, /* (46) attribute ::= GO expr EDGEPT */
1957 121, /* (47) attribute ::= GO EDGEPT */
1958 121, /* (48) attribute ::= AT position */
1959 121, /* (49) attribute ::= SAME */
1960 121, /* (50) attribute ::= SAME AS object */
1961 121, /* (51) attribute ::= STRING textposition */
1962 121, /* (52) attribute ::= FIT */
1963 121, /* (53) attribute ::= BEHIND object */
1964 124, /* (54) withclause ::= DOT_E edge AT position */
1965 124, /* (55) withclause ::= edge AT position */
1966 98, /* (56) numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
1967 123, /* (57) boolproperty ::= CW */
1968 123, /* (58) boolproperty ::= CCW */
1969 123, /* (59) boolproperty ::= LARROW */
1970 123, /* (60) boolproperty ::= RARROW */
1971 123, /* (61) boolproperty ::= LRARROW */
1972 123, /* (62) boolproperty ::= INVIS */
1973 123, /* (63) boolproperty ::= THICK */
1974 123, /* (64) boolproperty ::= THIN */
1975 109, /* (65) textposition ::= */
1976 109, /* (66) textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */
1977 104, /* (67) position ::= expr COMMA expr */
1978 104, /* (68) position ::= place PLUS expr COMMA expr */
1979 104, /* (69) position ::= place MINUS expr COMMA expr */
1980 104, /* (70) position ::= place PLUS LP expr COMMA expr RP */
1981 104, /* (71) position ::= place MINUS LP expr COMMA expr RP */
1982 104, /* (72) position ::= LP position COMMA position RP */
1983 104, /* (73) position ::= LP position RP */
1984 104, /* (74) position ::= expr between position AND position */
1985 104, /* (75) position ::= expr LT position COMMA position GT */
1986 104, /* (76) position ::= expr ABOVE position */
1987 104, /* (77) position ::= expr BELOW position */
1988 104, /* (78) position ::= expr LEFT OF position */
1989 104, /* (79) position ::= expr RIGHT OF position */
1990 104, /* (80) position ::= expr EDGEPT OF position */
1991 104, /* (81) position ::= expr HEADING expr FROM position */
1992 105, /* (82) place ::= edge OF object */
1993 126, /* (83) place2 ::= object */
1994 126, /* (84) place2 ::= object DOT_E edge */
1995 126, /* (85) place2 ::= NTH VERTEX OF object */
1996 106, /* (86) object ::= nth */
1997 106, /* (87) object ::= nth OF|IN object */
1998 107, /* (88) objectname ::= PLACENAME */
1999 107, /* (89) objectname ::= objectname DOT_U PLACENAME */
2000 108, /* (90) nth ::= NTH CLASSNAME */
2001 108, /* (91) nth ::= NTH LAST CLASSNAME */
2002 108, /* (92) nth ::= LAST CLASSNAME */
2003 108, /* (93) nth ::= LAST */
2004 108, /* (94) nth ::= NTH LB RB */
2005 108, /* (95) nth ::= NTH LAST LB RB */
2006 108, /* (96) nth ::= LAST LB RB */
2007 97, /* (97) expr ::= expr PLUS expr */
2008 97, /* (98) expr ::= expr MINUS expr */
2009 97, /* (99) expr ::= expr STAR expr */
2010 97, /* (100) expr ::= expr SLASH expr */
2011 97, /* (101) expr ::= MINUS expr */
2012 97, /* (102) expr ::= PLUS expr */
2013 97, /* (103) expr ::= LP expr RP */
2014 97, /* (104) expr ::= NUMBER */
2015 97, /* (105) expr ::= ID */
2016 97, /* (106) expr ::= FUNC1 LP expr RP */
2017 97, /* (107) expr ::= FUNC2 LP expr COMMA expr RP */
2018 97, /* (108) expr ::= place2 DOT_XY X */
2019 97, /* (109) expr ::= place2 DOT_XY Y */
2020 97, /* (110) expr ::= object DOT_L numproperty */
2021 97, /* (111) expr ::= object DOT_L dashproperty */
2022 97, /* (112) expr ::= object DOT_L colorproperty */
2023 111, /* (113) lvalue ::= ID */
2024 111, /* (114) lvalue ::= FILL */
2025 111, /* (115) lvalue ::= COLOR */
2026 111, /* (116) lvalue ::= THICKNESS */
2027 110, /* (117) rvalue ::= expr */
2028 114, /* (118) print ::= PRINT */
2029 115, /* (119) prlist ::= pritem */
2030 115, /* (120) prlist ::= prlist prsep pritem */
2031 100, /* (121) direction ::= UP */
2032 100, /* (122) direction ::= DOWN */
2033 100, /* (123) direction ::= LEFT */
2034 100, /* (124) direction ::= RIGHT */
2035 118, /* (125) attribute_list ::= alist */
2036 120, /* (126) alist ::= */
2037 120, /* (127) alist ::= alist attribute */
2038 121, /* (128) attribute ::= boolproperty */
2039 121, /* (129) attribute ::= WITH withclause */
2040 122, /* (130) go ::= GO */
2041 122, /* (131) go ::= */
2042 112, /* (132) even ::= UNTIL EVEN WITH */
2043 112, /* (133) even ::= EVEN WITH */
2044 101, /* (134) dashproperty ::= DOTTED */
2045 101, /* (135) dashproperty ::= DASHED */
2046 102, /* (136) colorproperty ::= FILL */
2047 102, /* (137) colorproperty ::= COLOR */
2048 104, /* (138) position ::= place */
2049 125, /* (139) between ::= WAY BETWEEN */
2050 125, /* (140) between ::= BETWEEN */
2051 125, /* (141) between ::= OF THE WAY BETWEEN */
2052 105, /* (142) place ::= place2 */
2053 99, /* (143) edge ::= EDGEPT */
2054 99, /* (144) edge ::= TOP */
2055 99, /* (145) edge ::= BOTTOM */
2056 99, /* (146) edge ::= START */
2057 99, /* (147) edge ::= END */
2058 99, /* (148) edge ::= RIGHT */
2059 99, /* (149) edge ::= LEFT */
2060 106, /* (150) object ::= objectname */
 
 
 
 
 
 
 
2061 };
2062
2063 /* For rule J, yyRuleInfoNRhs[J] contains the negative of the number
2064 ** of symbols on the right-hand side of that rule. */
2065 static const signed char yyRuleInfoNRhs[] = {
@@ -2031,158 +2071,151 @@
2071 -3, /* (5) element ::= lvalue ASSIGN rvalue */
2072 -3, /* (6) element ::= PLACENAME COLON unnamed_element */
2073 -3, /* (7) element ::= PLACENAME COLON position */
2074 -1, /* (8) element ::= unnamed_element */
2075 -2, /* (9) element ::= print prlist */
2076 -6, /* (10) element ::= ASSERT LP expr EQ expr RP */
2077 -6, /* (11) element ::= ASSERT LP place EQ place RP */
2078 -1, /* (12) rvalue ::= PLACENAME */
2079 -1, /* (13) pritem ::= FILL */
2080 -1, /* (14) pritem ::= COLOR */
2081 -1, /* (15) pritem ::= THICKNESS */
2082 -1, /* (16) pritem ::= rvalue */
2083 -1, /* (17) pritem ::= STRING */
2084 -1, /* (18) prsep ::= COMMA */
2085 -2, /* (19) unnamed_element ::= basetype attribute_list */
2086 -1, /* (20) basetype ::= CLASSNAME */
2087 -2, /* (21) basetype ::= STRING textposition */
2088 -4, /* (22) basetype ::= LB savelist element_list RB */
2089 0, /* (23) savelist ::= */
2090 -2, /* (24) attribute_list ::= expr alist */
2091 -3, /* (25) attribute_list ::= expr PERCENT alist */
2092 -3, /* (26) attribute ::= numproperty expr PERCENT */
2093 -2, /* (27) attribute ::= numproperty expr */
2094 -2, /* (28) attribute ::= dashproperty expr */
2095 -1, /* (29) attribute ::= dashproperty */
2096 -2, /* (30) attribute ::= colorproperty rvalue */
2097 -4, /* (31) attribute ::= go direction expr PERCENT */
2098 -3, /* (32) attribute ::= go direction expr */
2099 -2, /* (33) attribute ::= go direction */
2100 -4, /* (34) attribute ::= go direction even position */
2101 -1, /* (35) attribute ::= CLOSE */
2102 -1, /* (36) attribute ::= CHOP */
2103 -2, /* (37) attribute ::= FROM position */
2104 -2, /* (38) attribute ::= TO position */
2105 -1, /* (39) attribute ::= THEN */
2106 -4, /* (40) attribute ::= THEN expr HEADING expr */
2107 -3, /* (41) attribute ::= THEN HEADING expr */
2108 -3, /* (42) attribute ::= THEN expr EDGEPT */
2109 -2, /* (43) attribute ::= THEN EDGEPT */
2110 -4, /* (44) attribute ::= GO expr HEADING expr */
2111 -3, /* (45) attribute ::= GO HEADING expr */
2112 -3, /* (46) attribute ::= GO expr EDGEPT */
2113 -2, /* (47) attribute ::= GO EDGEPT */
2114 -2, /* (48) attribute ::= AT position */
2115 -1, /* (49) attribute ::= SAME */
2116 -3, /* (50) attribute ::= SAME AS object */
2117 -2, /* (51) attribute ::= STRING textposition */
2118 -1, /* (52) attribute ::= FIT */
2119 -2, /* (53) attribute ::= BEHIND object */
2120 -4, /* (54) withclause ::= DOT_E edge AT position */
2121 -3, /* (55) withclause ::= edge AT position */
2122 -1, /* (56) numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
2123 -1, /* (57) boolproperty ::= CW */
2124 -1, /* (58) boolproperty ::= CCW */
2125 -1, /* (59) boolproperty ::= LARROW */
2126 -1, /* (60) boolproperty ::= RARROW */
2127 -1, /* (61) boolproperty ::= LRARROW */
2128 -1, /* (62) boolproperty ::= INVIS */
2129 -1, /* (63) boolproperty ::= THICK */
2130 -1, /* (64) boolproperty ::= THIN */
2131 0, /* (65) textposition ::= */
2132 -2, /* (66) textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */
2133 -3, /* (67) position ::= expr COMMA expr */
2134 -5, /* (68) position ::= place PLUS expr COMMA expr */
2135 -5, /* (69) position ::= place MINUS expr COMMA expr */
2136 -7, /* (70) position ::= place PLUS LP expr COMMA expr RP */
2137 -7, /* (71) position ::= place MINUS LP expr COMMA expr RP */
2138 -5, /* (72) position ::= LP position COMMA position RP */
2139 -3, /* (73) position ::= LP position RP */
2140 -5, /* (74) position ::= expr between position AND position */
2141 -6, /* (75) position ::= expr LT position COMMA position GT */
2142 -3, /* (76) position ::= expr ABOVE position */
2143 -3, /* (77) position ::= expr BELOW position */
2144 -4, /* (78) position ::= expr LEFT OF position */
2145 -4, /* (79) position ::= expr RIGHT OF position */
2146 -4, /* (80) position ::= expr EDGEPT OF position */
2147 -5, /* (81) position ::= expr HEADING expr FROM position */
2148 -3, /* (82) place ::= edge OF object */
2149 -1, /* (83) place2 ::= object */
2150 -3, /* (84) place2 ::= object DOT_E edge */
2151 -4, /* (85) place2 ::= NTH VERTEX OF object */
2152 -1, /* (86) object ::= nth */
2153 -3, /* (87) object ::= nth OF|IN object */
2154 -1, /* (88) objectname ::= PLACENAME */
2155 -3, /* (89) objectname ::= objectname DOT_U PLACENAME */
2156 -2, /* (90) nth ::= NTH CLASSNAME */
2157 -3, /* (91) nth ::= NTH LAST CLASSNAME */
2158 -2, /* (92) nth ::= LAST CLASSNAME */
2159 -1, /* (93) nth ::= LAST */
2160 -3, /* (94) nth ::= NTH LB RB */
2161 -4, /* (95) nth ::= NTH LAST LB RB */
2162 -3, /* (96) nth ::= LAST LB RB */
2163 -3, /* (97) expr ::= expr PLUS expr */
2164 -3, /* (98) expr ::= expr MINUS expr */
2165 -3, /* (99) expr ::= expr STAR expr */
2166 -3, /* (100) expr ::= expr SLASH expr */
2167 -2, /* (101) expr ::= MINUS expr */
2168 -2, /* (102) expr ::= PLUS expr */
2169 -3, /* (103) expr ::= LP expr RP */
2170 -1, /* (104) expr ::= NUMBER */
2171 -1, /* (105) expr ::= ID */
2172 -4, /* (106) expr ::= FUNC1 LP expr RP */
2173 -6, /* (107) expr ::= FUNC2 LP expr COMMA expr RP */
2174 -3, /* (108) expr ::= place2 DOT_XY X */
2175 -3, /* (109) expr ::= place2 DOT_XY Y */
2176 -3, /* (110) expr ::= object DOT_L numproperty */
2177 -3, /* (111) expr ::= object DOT_L dashproperty */
2178 -3, /* (112) expr ::= object DOT_L colorproperty */
2179 -1, /* (113) lvalue ::= ID */
2180 -1, /* (114) lvalue ::= FILL */
2181 -1, /* (115) lvalue ::= COLOR */
2182 -1, /* (116) lvalue ::= THICKNESS */
2183 -1, /* (117) rvalue ::= expr */
2184 -1, /* (118) print ::= PRINT */
2185 -1, /* (119) prlist ::= pritem */
2186 -3, /* (120) prlist ::= prlist prsep pritem */
2187 -1, /* (121) direction ::= UP */
2188 -1, /* (122) direction ::= DOWN */
2189 -1, /* (123) direction ::= LEFT */
2190 -1, /* (124) direction ::= RIGHT */
2191 -1, /* (125) attribute_list ::= alist */
2192 0, /* (126) alist ::= */
2193 -2, /* (127) alist ::= alist attribute */
2194 -1, /* (128) attribute ::= boolproperty */
2195 -2, /* (129) attribute ::= WITH withclause */
2196 -1, /* (130) go ::= GO */
2197 0, /* (131) go ::= */
2198 -3, /* (132) even ::= UNTIL EVEN WITH */
2199 -2, /* (133) even ::= EVEN WITH */
2200 -1, /* (134) dashproperty ::= DOTTED */
2201 -1, /* (135) dashproperty ::= DASHED */
2202 -1, /* (136) colorproperty ::= FILL */
2203 -1, /* (137) colorproperty ::= COLOR */
2204 -1, /* (138) position ::= place */
2205 -2, /* (139) between ::= WAY BETWEEN */
2206 -1, /* (140) between ::= BETWEEN */
2207 -4, /* (141) between ::= OF THE WAY BETWEEN */
2208 -1, /* (142) place ::= place2 */
2209 -1, /* (143) edge ::= EDGEPT */
2210 -1, /* (144) edge ::= TOP */
2211 -1, /* (145) edge ::= BOTTOM */
2212 -1, /* (146) edge ::= START */
2213 -1, /* (147) edge ::= END */
2214 -1, /* (148) edge ::= RIGHT */
2215 -1, /* (149) edge ::= LEFT */
2216 -1, /* (150) object ::= objectname */
 
 
 
 
 
 
 
2217 };
2218
2219 static void yy_accept(yyParser*); /* Forward Declaration */
2220
2221 /*
@@ -2269,640 +2302,627 @@
2302 ** break;
2303 */
2304 /********** Begin reduce actions **********************************************/
2305 YYMINORTYPE yylhsminor;
2306 case 0: /* document ::= element_list */
2307 #line 482 "pikchr.y"
2308 {pik_render(p,yymsp[0].minor.yy42);}
2309 #line 2334 "pikchr.c"
2310 break;
2311 case 1: /* element_list ::= element */
2312 #line 485 "pikchr.y"
2313 { yylhsminor.yy42 = pik_elist_append(p,0,yymsp[0].minor.yy118); }
2314 #line 2339 "pikchr.c"
2315 yymsp[0].minor.yy42 = yylhsminor.yy42;
2316 break;
2317 case 2: /* element_list ::= element_list EOL element */
2318 #line 487 "pikchr.y"
2319 { yylhsminor.yy42 = pik_elist_append(p,yymsp[-2].minor.yy42,yymsp[0].minor.yy118); }
2320 #line 2345 "pikchr.c"
2321 yymsp[-2].minor.yy42 = yylhsminor.yy42;
2322 break;
2323 case 3: /* element ::= */
2324 #line 490 "pikchr.y"
2325 { yymsp[1].minor.yy118 = 0; }
2326 #line 2351 "pikchr.c"
2327 break;
2328 case 4: /* element ::= direction */
2329 #line 491 "pikchr.y"
2330 { pik_set_direction(p,yymsp[0].minor.yy0.eCode); yylhsminor.yy118=0; }
2331 #line 2356 "pikchr.c"
2332 yymsp[0].minor.yy118 = yylhsminor.yy118;
2333 break;
2334 case 5: /* element ::= lvalue ASSIGN rvalue */
2335 #line 492 "pikchr.y"
2336 {pik_set_var(p,&yymsp[-2].minor.yy0,yymsp[0].minor.yy215,&yymsp[-1].minor.yy0); yylhsminor.yy118=0;}
2337 #line 2362 "pikchr.c"
2338 yymsp[-2].minor.yy118 = yylhsminor.yy118;
2339 break;
2340 case 6: /* element ::= PLACENAME COLON unnamed_element */
2341 #line 494 "pikchr.y"
2342 { yylhsminor.yy118 = yymsp[0].minor.yy118; pik_elem_setname(p,yymsp[0].minor.yy118,&yymsp[-2].minor.yy0); }
2343 #line 2368 "pikchr.c"
2344 yymsp[-2].minor.yy118 = yylhsminor.yy118;
2345 break;
2346 case 7: /* element ::= PLACENAME COLON position */
2347 #line 496 "pikchr.y"
2348 { yylhsminor.yy118 = pik_elem_new(p,0,0,0);
2349 if(yylhsminor.yy118){ yylhsminor.yy118->ptAt = yymsp[0].minor.yy85; pik_elem_setname(p,yylhsminor.yy118,&yymsp[-2].minor.yy0); }}
2350 #line 2375 "pikchr.c"
2351 yymsp[-2].minor.yy118 = yylhsminor.yy118;
2352 break;
2353 case 8: /* element ::= unnamed_element */
2354 #line 498 "pikchr.y"
2355 {yylhsminor.yy118 = yymsp[0].minor.yy118;}
2356 #line 2381 "pikchr.c"
2357 yymsp[0].minor.yy118 = yylhsminor.yy118;
2358 break;
2359 case 9: /* element ::= print prlist */
2360 #line 499 "pikchr.y"
2361 {pik_append(p,"<br>\n",5); yymsp[-1].minor.yy118=0;}
2362 #line 2387 "pikchr.c"
2363 break;
2364 case 10: /* element ::= ASSERT LP expr EQ expr RP */
2365 #line 504 "pikchr.y"
2366 {yymsp[-5].minor.yy118=pik_assert(p,yymsp[-3].minor.yy215,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy215);}
2367 #line 2392 "pikchr.c"
2368 break;
2369 case 11: /* element ::= ASSERT LP place EQ place RP */
2370 #line 506 "pikchr.y"
2371 {yymsp[-5].minor.yy118=pik_place_assert(p,&yymsp[-3].minor.yy85,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy85);}
2372 #line 2397 "pikchr.c"
2373 break;
2374 case 12: /* rvalue ::= PLACENAME */
 
 
 
 
 
 
 
 
2375 #line 517 "pikchr.y"
2376 {yylhsminor.yy215 = pik_lookup_color(p,&yymsp[0].minor.yy0);}
2377 #line 2402 "pikchr.c"
2378 yymsp[0].minor.yy215 = yylhsminor.yy215;
2379 break;
2380 case 13: /* pritem ::= FILL */
2381 case 14: /* pritem ::= COLOR */ yytestcase(yyruleno==14);
2382 case 15: /* pritem ::= THICKNESS */ yytestcase(yyruleno==15);
2383 #line 522 "pikchr.y"
2384 {pik_append_num(p,"",pik_value(p,yymsp[0].minor.yy0.z,yymsp[0].minor.yy0.n,0));}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2385 #line 2410 "pikchr.c"
2386 break;
2387 case 16: /* pritem ::= rvalue */
2388 #line 525 "pikchr.y"
2389 {pik_append_num(p,"",yymsp[0].minor.yy215);}
2390 #line 2415 "pikchr.c"
2391 break;
2392 case 17: /* pritem ::= STRING */
2393 #line 526 "pikchr.y"
2394 {pik_append_text(p,yymsp[0].minor.yy0.z+1,yymsp[0].minor.yy0.n-2,0);}
2395 #line 2420 "pikchr.c"
2396 break;
2397 case 18: /* prsep ::= COMMA */
2398 #line 527 "pikchr.y"
2399 {pik_append(p, " ", 1);}
2400 #line 2425 "pikchr.c"
2401 break;
2402 case 19: /* unnamed_element ::= basetype attribute_list */
2403 #line 530 "pikchr.y"
2404 {yylhsminor.yy118 = yymsp[-1].minor.yy118; pik_after_adding_attributes(p,yylhsminor.yy118);}
2405 #line 2430 "pikchr.c"
2406 yymsp[-1].minor.yy118 = yylhsminor.yy118;
2407 break;
2408 case 20: /* basetype ::= CLASSNAME */
2409 #line 532 "pikchr.y"
2410 {yylhsminor.yy118 = pik_elem_new(p,&yymsp[0].minor.yy0,0,0); }
2411 #line 2436 "pikchr.c"
2412 yymsp[0].minor.yy118 = yylhsminor.yy118;
2413 break;
2414 case 21: /* basetype ::= STRING textposition */
2415 #line 534 "pikchr.y"
2416 {yymsp[-1].minor.yy0.eCode = yymsp[0].minor.yy156; yylhsminor.yy118 = pik_elem_new(p,0,&yymsp[-1].minor.yy0,0); }
2417 #line 2442 "pikchr.c"
2418 yymsp[-1].minor.yy118 = yylhsminor.yy118;
2419 break;
2420 case 22: /* basetype ::= LB savelist element_list RB */
2421 #line 536 "pikchr.y"
2422 { p->list = yymsp[-2].minor.yy42; yymsp[-3].minor.yy118 = pik_elem_new(p,0,0,yymsp[-1].minor.yy42); if(yymsp[-3].minor.yy118) yymsp[-3].minor.yy118->errTok = yymsp[0].minor.yy0; }
2423 #line 2448 "pikchr.c"
2424 break;
2425 case 23: /* savelist ::= */
2426 #line 541 "pikchr.y"
2427 {yymsp[1].minor.yy42 = p->list; p->list = 0;}
2428 #line 2453 "pikchr.c"
2429 break;
2430 case 24: /* attribute_list ::= expr alist */
2431 #line 548 "pikchr.y"
2432 { pik_add_direction(p,0,&yymsp[-1].minor.yy215,0);}
2433 #line 2458 "pikchr.c"
2434 break;
2435 case 25: /* attribute_list ::= expr PERCENT alist */
2436 #line 549 "pikchr.y"
2437 { pik_add_direction(p,0,&yymsp[-2].minor.yy215,1);}
2438 #line 2463 "pikchr.c"
2439 break;
2440 case 26: /* attribute ::= numproperty expr PERCENT */
 
 
 
 
 
 
 
 
 
 
2441 #line 554 "pikchr.y"
2442 { pik_set_numprop(p,&yymsp[-2].minor.yy0,0.0,yymsp[-1].minor.yy215/100.0); }
2443 #line 2468 "pikchr.c"
2444 break;
2445 case 27: /* attribute ::= numproperty expr */
2446 case 30: /* attribute ::= colorproperty rvalue */ yytestcase(yyruleno==30);
2447 #line 555 "pikchr.y"
2448 { pik_set_numprop(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy215,0.0); }
2449 #line 2474 "pikchr.c"
2450 break;
2451 case 28: /* attribute ::= dashproperty expr */
2452 #line 556 "pikchr.y"
2453 { pik_set_dashed(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy215); }
2454 #line 2479 "pikchr.c"
2455 break;
2456 case 29: /* attribute ::= dashproperty */
2457 #line 557 "pikchr.y"
2458 { pik_set_dashed(p,&yymsp[0].minor.yy0,0); }
2459 #line 2484 "pikchr.c"
2460 break;
2461 case 31: /* attribute ::= go direction expr PERCENT */
2462 #line 560 "pikchr.y"
2463 { pik_add_direction(p,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy215,1);}
2464 #line 2489 "pikchr.c"
2465 break;
2466 case 32: /* attribute ::= go direction expr */
 
 
 
 
 
 
2467 #line 561 "pikchr.y"
2468 { pik_add_direction(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy215,0);}
2469 #line 2494 "pikchr.c"
2470 break;
2471 case 33: /* attribute ::= go direction */
 
2472 #line 562 "pikchr.y"
2473 { pik_add_direction(p,&yymsp[0].minor.yy0,0,0); }
2474 #line 2499 "pikchr.c"
2475 break;
2476 case 34: /* attribute ::= go direction even position */
 
2477 #line 563 "pikchr.y"
2478 {pik_evenwith(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy85);}
2479 #line 2504 "pikchr.c"
2480 break;
2481 case 35: /* attribute ::= CLOSE */
 
2482 #line 564 "pikchr.y"
2483 { pik_close_path(p,&yymsp[0].minor.yy0); }
2484 #line 2509 "pikchr.c"
2485 break;
2486 case 36: /* attribute ::= CHOP */
2487 #line 565 "pikchr.y"
2488 { p->cur->bChop = 1; }
2489 #line 2514 "pikchr.c"
2490 break;
2491 case 37: /* attribute ::= FROM position */
2492 #line 566 "pikchr.y"
2493 { pik_set_from(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy85); }
2494 #line 2519 "pikchr.c"
2495 break;
2496 case 38: /* attribute ::= TO position */
2497 #line 567 "pikchr.y"
2498 { pik_add_to(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy85); }
2499 #line 2524 "pikchr.c"
2500 break;
2501 case 39: /* attribute ::= THEN */
2502 #line 568 "pikchr.y"
2503 { pik_then(p, &yymsp[0].minor.yy0, p->cur); }
2504 #line 2529 "pikchr.c"
2505 break;
2506 case 40: /* attribute ::= THEN expr HEADING expr */
2507 case 44: /* attribute ::= GO expr HEADING expr */ yytestcase(yyruleno==44);
2508 #line 570 "pikchr.y"
2509 {pik_move_hdg(p,&yymsp[-2].minor.yy215,&yymsp[-1].minor.yy0,yymsp[0].minor.yy215,0,&yymsp[-3].minor.yy0);}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2510 #line 2535 "pikchr.c"
2511 break;
2512 case 41: /* attribute ::= THEN HEADING expr */
2513 case 45: /* attribute ::= GO HEADING expr */ yytestcase(yyruleno==45);
2514 #line 571 "pikchr.y"
2515 {pik_move_hdg(p,0,&yymsp[-1].minor.yy0,yymsp[0].minor.yy215,0,&yymsp[-2].minor.yy0);}
2516 #line 2541 "pikchr.c"
2517 break;
2518 case 42: /* attribute ::= THEN expr EDGEPT */
2519 case 46: /* attribute ::= GO expr EDGEPT */ yytestcase(yyruleno==46);
2520 #line 572 "pikchr.y"
2521 {pik_move_hdg(p,&yymsp[-1].minor.yy215,0,0,&yymsp[0].minor.yy0,&yymsp[-2].minor.yy0);}
2522 #line 2547 "pikchr.c"
2523 break;
2524 case 43: /* attribute ::= THEN EDGEPT */
2525 case 47: /* attribute ::= GO EDGEPT */ yytestcase(yyruleno==47);
2526 #line 573 "pikchr.y"
2527 {pik_move_hdg(p,0,0,0,&yymsp[0].minor.yy0,&yymsp[-1].minor.yy0);}
2528 #line 2553 "pikchr.c"
2529 break;
2530 case 48: /* attribute ::= AT position */
2531 #line 579 "pikchr.y"
2532 { pik_set_at(p,0,&yymsp[0].minor.yy85,&yymsp[-1].minor.yy0); }
2533 #line 2558 "pikchr.c"
2534 break;
2535 case 49: /* attribute ::= SAME */
2536 #line 581 "pikchr.y"
2537 {pik_same(p,0,&yymsp[0].minor.yy0);}
2538 #line 2563 "pikchr.c"
2539 break;
2540 case 50: /* attribute ::= SAME AS object */
2541 #line 582 "pikchr.y"
2542 {pik_same(p,yymsp[0].minor.yy118,&yymsp[-2].minor.yy0);}
2543 #line 2568 "pikchr.c"
2544 break;
2545 case 51: /* attribute ::= STRING textposition */
2546 #line 583 "pikchr.y"
2547 {pik_add_txt(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy156);}
2548 #line 2573 "pikchr.c"
2549 break;
2550 case 52: /* attribute ::= FIT */
 
2551 #line 584 "pikchr.y"
2552 {pik_size_to_fit(p,&yymsp[0].minor.yy0); }
2553 #line 2578 "pikchr.c"
2554 break;
2555 case 53: /* attribute ::= BEHIND object */
2556 #line 585 "pikchr.y"
2557 {pik_behind(p,yymsp[0].minor.yy118);}
2558 #line 2583 "pikchr.c"
2559 break;
2560 case 54: /* withclause ::= DOT_E edge AT position */
2561 case 55: /* withclause ::= edge AT position */ yytestcase(yyruleno==55);
2562 #line 593 "pikchr.y"
2563 { pik_set_at(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy85,&yymsp[-1].minor.yy0); }
2564 #line 2589 "pikchr.c"
2565 break;
2566 case 56: /* numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
2567 #line 597 "pikchr.y"
2568 {yylhsminor.yy0 = yymsp[0].minor.yy0;}
2569 #line 2594 "pikchr.c"
2570 yymsp[0].minor.yy0 = yylhsminor.yy0;
2571 break;
2572 case 57: /* boolproperty ::= CW */
2573 #line 608 "pikchr.y"
2574 {p->cur->cw = 1;}
2575 #line 2600 "pikchr.c"
2576 break;
2577 case 58: /* boolproperty ::= CCW */
2578 #line 609 "pikchr.y"
2579 {p->cur->cw = 0;}
2580 #line 2605 "pikchr.c"
2581 break;
2582 case 59: /* boolproperty ::= LARROW */
2583 #line 610 "pikchr.y"
2584 {p->cur->larrow=1; p->cur->rarrow=0; }
2585 #line 2610 "pikchr.c"
2586 break;
2587 case 60: /* boolproperty ::= RARROW */
2588 #line 611 "pikchr.y"
2589 {p->cur->larrow=0; p->cur->rarrow=1; }
2590 #line 2615 "pikchr.c"
2591 break;
2592 case 61: /* boolproperty ::= LRARROW */
2593 #line 612 "pikchr.y"
2594 {p->cur->larrow=1; p->cur->rarrow=1; }
2595 #line 2620 "pikchr.c"
2596 break;
2597 case 62: /* boolproperty ::= INVIS */
2598 #line 613 "pikchr.y"
2599 {p->cur->sw = 0.0;}
2600 #line 2625 "pikchr.c"
2601 break;
2602 case 63: /* boolproperty ::= THICK */
2603 #line 614 "pikchr.y"
2604 {p->cur->sw *= 1.5;}
2605 #line 2630 "pikchr.c"
2606 break;
2607 case 64: /* boolproperty ::= THIN */
2608 #line 615 "pikchr.y"
2609 {p->cur->sw *= 0.67;}
2610 #line 2635 "pikchr.c"
2611 break;
2612 case 65: /* textposition ::= */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2613 #line 617 "pikchr.y"
2614 {yymsp[1].minor.yy156 = 0;}
2615 #line 2640 "pikchr.c"
2616 break;
2617 case 66: /* textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */
2618 #line 620 "pikchr.y"
2619 {yylhsminor.yy156 = pik_text_position(p,yymsp[-1].minor.yy156,&yymsp[0].minor.yy0);}
2620 #line 2645 "pikchr.c"
2621 yymsp[-1].minor.yy156 = yylhsminor.yy156;
2622 break;
2623 case 67: /* position ::= expr COMMA expr */
 
 
 
 
 
 
 
 
 
 
 
 
2624 #line 623 "pikchr.y"
2625 {yylhsminor.yy85.x=yymsp[-2].minor.yy215; yylhsminor.yy85.y=yymsp[0].minor.yy215;}
2626 #line 2651 "pikchr.c"
2627 yymsp[-2].minor.yy85 = yylhsminor.yy85;
2628 break;
2629 case 68: /* position ::= place PLUS expr COMMA expr */
2630 #line 625 "pikchr.y"
2631 {yylhsminor.yy85.x=yymsp[-4].minor.yy85.x+yymsp[-2].minor.yy215; yylhsminor.yy85.y=yymsp[-4].minor.yy85.y+yymsp[0].minor.yy215;}
2632 #line 2657 "pikchr.c"
2633 yymsp[-4].minor.yy85 = yylhsminor.yy85;
2634 break;
2635 case 69: /* position ::= place MINUS expr COMMA expr */
2636 #line 626 "pikchr.y"
2637 {yylhsminor.yy85.x=yymsp[-4].minor.yy85.x-yymsp[-2].minor.yy215; yylhsminor.yy85.y=yymsp[-4].minor.yy85.y-yymsp[0].minor.yy215;}
2638 #line 2663 "pikchr.c"
2639 yymsp[-4].minor.yy85 = yylhsminor.yy85;
2640 break;
2641 case 70: /* position ::= place PLUS LP expr COMMA expr RP */
2642 #line 628 "pikchr.y"
2643 {yylhsminor.yy85.x=yymsp[-6].minor.yy85.x+yymsp[-3].minor.yy215; yylhsminor.yy85.y=yymsp[-6].minor.yy85.y+yymsp[-1].minor.yy215;}
2644 #line 2669 "pikchr.c"
2645 yymsp[-6].minor.yy85 = yylhsminor.yy85;
2646 break;
2647 case 71: /* position ::= place MINUS LP expr COMMA expr RP */
 
 
 
 
 
 
2648 #line 630 "pikchr.y"
2649 {yylhsminor.yy85.x=yymsp[-6].minor.yy85.x-yymsp[-3].minor.yy215; yylhsminor.yy85.y=yymsp[-6].minor.yy85.y-yymsp[-1].minor.yy215;}
2650 #line 2675 "pikchr.c"
2651 yymsp[-6].minor.yy85 = yylhsminor.yy85;
2652 break;
2653 case 72: /* position ::= LP position COMMA position RP */
2654 #line 631 "pikchr.y"
2655 {yymsp[-4].minor.yy85.x=yymsp[-3].minor.yy85.x; yymsp[-4].minor.yy85.y=yymsp[-1].minor.yy85.y;}
2656 #line 2681 "pikchr.c"
2657 break;
2658 case 73: /* position ::= LP position RP */
2659 #line 632 "pikchr.y"
2660 {yymsp[-2].minor.yy85=yymsp[-1].minor.yy85;}
2661 #line 2686 "pikchr.c"
2662 break;
2663 case 74: /* position ::= expr between position AND position */
2664 #line 634 "pikchr.y"
2665 {yylhsminor.yy85 = pik_position_between(p,yymsp[-4].minor.yy215,yymsp[-2].minor.yy85,yymsp[0].minor.yy85);}
2666 #line 2691 "pikchr.c"
2667 yymsp[-4].minor.yy85 = yylhsminor.yy85;
2668 break;
2669 case 75: /* position ::= expr LT position COMMA position GT */
2670 #line 636 "pikchr.y"
2671 {yylhsminor.yy85 = pik_position_between(p,yymsp[-5].minor.yy215,yymsp[-3].minor.yy85,yymsp[-1].minor.yy85);}
2672 #line 2697 "pikchr.c"
2673 yymsp[-5].minor.yy85 = yylhsminor.yy85;
2674 break;
2675 case 76: /* position ::= expr ABOVE position */
2676 #line 637 "pikchr.y"
2677 {yylhsminor.yy85=yymsp[0].minor.yy85; yylhsminor.yy85.y += yymsp[-2].minor.yy215;}
2678 #line 2703 "pikchr.c"
2679 yymsp[-2].minor.yy85 = yylhsminor.yy85;
2680 break;
2681 case 77: /* position ::= expr BELOW position */
2682 #line 638 "pikchr.y"
2683 {yylhsminor.yy85=yymsp[0].minor.yy85; yylhsminor.yy85.y -= yymsp[-2].minor.yy215;}
2684 #line 2709 "pikchr.c"
2685 yymsp[-2].minor.yy85 = yylhsminor.yy85;
2686 break;
2687 case 78: /* position ::= expr LEFT OF position */
2688 #line 639 "pikchr.y"
2689 {yylhsminor.yy85=yymsp[0].minor.yy85; yylhsminor.yy85.x -= yymsp[-3].minor.yy215;}
2690 #line 2715 "pikchr.c"
2691 yymsp[-3].minor.yy85 = yylhsminor.yy85;
2692 break;
2693 case 79: /* position ::= expr RIGHT OF position */
2694 #line 640 "pikchr.y"
2695 {yylhsminor.yy85=yymsp[0].minor.yy85; yylhsminor.yy85.x += yymsp[-3].minor.yy215;}
2696 #line 2721 "pikchr.c"
2697 yymsp[-3].minor.yy85 = yylhsminor.yy85;
2698 break;
2699 case 80: /* position ::= expr EDGEPT OF position */
2700 #line 642 "pikchr.y"
2701 {yylhsminor.yy85 = pik_position_at_hdg(p,yymsp[-3].minor.yy215,&yymsp[-2].minor.yy0,yymsp[0].minor.yy85);}
2702 #line 2727 "pikchr.c"
2703 yymsp[-3].minor.yy85 = yylhsminor.yy85;
2704 break;
2705 case 81: /* position ::= expr HEADING expr FROM position */
2706 #line 644 "pikchr.y"
2707 {yylhsminor.yy85 = pik_position_at_angle(p,yymsp[-4].minor.yy215,yymsp[-2].minor.yy215,yymsp[0].minor.yy85);}
2708 #line 2733 "pikchr.c"
2709 yymsp[-4].minor.yy85 = yylhsminor.yy85;
2710 break;
2711 case 82: /* place ::= edge OF object */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2712 #line 656 "pikchr.y"
2713 {yylhsminor.yy85 = pik_place_of_elem(p,yymsp[0].minor.yy118,&yymsp[-2].minor.yy0);}
2714 #line 2739 "pikchr.c"
2715 yymsp[-2].minor.yy85 = yylhsminor.yy85;
2716 break;
2717 case 83: /* place2 ::= object */
2718 #line 657 "pikchr.y"
2719 {yylhsminor.yy85 = pik_place_of_elem(p,yymsp[0].minor.yy118,0);}
2720 #line 2745 "pikchr.c"
2721 yymsp[0].minor.yy85 = yylhsminor.yy85;
2722 break;
2723 case 84: /* place2 ::= object DOT_E edge */
2724 #line 658 "pikchr.y"
2725 {yylhsminor.yy85 = pik_place_of_elem(p,yymsp[-2].minor.yy118,&yymsp[0].minor.yy0);}
2726 #line 2751 "pikchr.c"
2727 yymsp[-2].minor.yy85 = yylhsminor.yy85;
2728 break;
2729 case 85: /* place2 ::= NTH VERTEX OF object */
2730 #line 659 "pikchr.y"
2731 {yylhsminor.yy85 = pik_nth_vertex(p,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,yymsp[0].minor.yy118);}
2732 #line 2757 "pikchr.c"
2733 yymsp[-3].minor.yy85 = yylhsminor.yy85;
2734 break;
2735 case 86: /* object ::= nth */
2736 #line 670 "pikchr.y"
2737 {yylhsminor.yy118 = pik_find_nth(p,0,&yymsp[0].minor.yy0);}
2738 #line 2763 "pikchr.c"
2739 yymsp[0].minor.yy118 = yylhsminor.yy118;
2740 break;
2741 case 87: /* object ::= nth OF|IN object */
2742 #line 671 "pikchr.y"
2743 {yylhsminor.yy118 = pik_find_nth(p,yymsp[0].minor.yy118,&yymsp[-2].minor.yy0);}
2744 #line 2769 "pikchr.c"
2745 yymsp[-2].minor.yy118 = yylhsminor.yy118;
2746 break;
2747 case 88: /* objectname ::= PLACENAME */
2748 #line 673 "pikchr.y"
2749 {yylhsminor.yy118 = pik_find_byname(p,0,&yymsp[0].minor.yy0);}
2750 #line 2775 "pikchr.c"
2751 yymsp[0].minor.yy118 = yylhsminor.yy118;
2752 break;
2753 case 89: /* objectname ::= objectname DOT_U PLACENAME */
2754 #line 675 "pikchr.y"
2755 {yylhsminor.yy118 = pik_find_byname(p,yymsp[-2].minor.yy118,&yymsp[0].minor.yy0);}
2756 #line 2781 "pikchr.c"
2757 yymsp[-2].minor.yy118 = yylhsminor.yy118;
2758 break;
2759 case 90: /* nth ::= NTH CLASSNAME */
2760 #line 677 "pikchr.y"
2761 {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-1].minor.yy0); }
2762 #line 2787 "pikchr.c"
2763 yymsp[-1].minor.yy0 = yylhsminor.yy0;
2764 break;
2765 case 91: /* nth ::= NTH LAST CLASSNAME */
2766 #line 678 "pikchr.y"
2767 {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-2].minor.yy0); }
2768 #line 2793 "pikchr.c"
2769 yymsp[-2].minor.yy0 = yylhsminor.yy0;
2770 break;
2771 case 92: /* nth ::= LAST CLASSNAME */
2772 #line 679 "pikchr.y"
2773 {yymsp[-1].minor.yy0=yymsp[0].minor.yy0; yymsp[-1].minor.yy0.eCode = -1;}
2774 #line 2799 "pikchr.c"
2775 break;
2776 case 93: /* nth ::= LAST */
2777 #line 680 "pikchr.y"
2778 {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -1;}
2779 #line 2804 "pikchr.c"
2780 yymsp[0].minor.yy0 = yylhsminor.yy0;
2781 break;
2782 case 94: /* nth ::= NTH LB RB */
2783 #line 681 "pikchr.y"
2784 {yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-2].minor.yy0);}
2785 #line 2810 "pikchr.c"
2786 yymsp[-2].minor.yy0 = yylhsminor.yy0;
2787 break;
2788 case 95: /* nth ::= NTH LAST LB RB */
2789 #line 682 "pikchr.y"
2790 {yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-3].minor.yy0);}
2791 #line 2816 "pikchr.c"
2792 yymsp[-3].minor.yy0 = yylhsminor.yy0;
2793 break;
2794 case 96: /* nth ::= LAST LB RB */
2795 #line 683 "pikchr.y"
2796 {yymsp[-2].minor.yy0=yymsp[-1].minor.yy0; yymsp[-2].minor.yy0.eCode = -1; }
2797 #line 2822 "pikchr.c"
2798 break;
2799 case 97: /* expr ::= expr PLUS expr */
2800 #line 685 "pikchr.y"
2801 {yylhsminor.yy215=yymsp[-2].minor.yy215+yymsp[0].minor.yy215;}
2802 #line 2827 "pikchr.c"
2803 yymsp[-2].minor.yy215 = yylhsminor.yy215;
2804 break;
2805 case 98: /* expr ::= expr MINUS expr */
2806 #line 686 "pikchr.y"
2807 {yylhsminor.yy215=yymsp[-2].minor.yy215-yymsp[0].minor.yy215;}
2808 #line 2833 "pikchr.c"
2809 yymsp[-2].minor.yy215 = yylhsminor.yy215;
2810 break;
2811 case 99: /* expr ::= expr STAR expr */
2812 #line 687 "pikchr.y"
2813 {yylhsminor.yy215=yymsp[-2].minor.yy215*yymsp[0].minor.yy215;}
2814 #line 2839 "pikchr.c"
2815 yymsp[-2].minor.yy215 = yylhsminor.yy215;
2816 break;
2817 case 100: /* expr ::= expr SLASH expr */
2818 #line 688 "pikchr.y"
2819 {
2820 if( yymsp[0].minor.yy215==0.0 ){ pik_error(p, &yymsp[-1].minor.yy0, "division by zero"); yylhsminor.yy215 = 0.0; }
2821 else{ yylhsminor.yy215 = yymsp[-2].minor.yy215/yymsp[0].minor.yy215; }
2822 }
2823 #line 2848 "pikchr.c"
2824 yymsp[-2].minor.yy215 = yylhsminor.yy215;
2825 break;
2826 case 101: /* expr ::= MINUS expr */
2827 #line 692 "pikchr.y"
2828 {yymsp[-1].minor.yy215=-yymsp[0].minor.yy215;}
2829 #line 2854 "pikchr.c"
2830 break;
2831 case 102: /* expr ::= PLUS expr */
2832 #line 693 "pikchr.y"
2833 {yymsp[-1].minor.yy215=yymsp[0].minor.yy215;}
2834 #line 2859 "pikchr.c"
2835 break;
2836 case 103: /* expr ::= LP expr RP */
2837 #line 694 "pikchr.y"
2838 {yymsp[-2].minor.yy215=yymsp[-1].minor.yy215;}
2839 #line 2864 "pikchr.c"
2840 break;
2841 case 104: /* expr ::= NUMBER */
2842 #line 695 "pikchr.y"
2843 {yylhsminor.yy215=pik_atof(p,&yymsp[0].minor.yy0);}
2844 #line 2869 "pikchr.c"
2845 yymsp[0].minor.yy215 = yylhsminor.yy215;
2846 break;
2847 case 105: /* expr ::= ID */
2848 #line 696 "pikchr.y"
2849 {yylhsminor.yy215=pik_get_var(p,&yymsp[0].minor.yy0);}
2850 #line 2875 "pikchr.c"
2851 yymsp[0].minor.yy215 = yylhsminor.yy215;
2852 break;
2853 case 106: /* expr ::= FUNC1 LP expr RP */
2854 #line 697 "pikchr.y"
2855 {yylhsminor.yy215 = pik_func(p,&yymsp[-3].minor.yy0,yymsp[-1].minor.yy215,0.0);}
2856 #line 2881 "pikchr.c"
2857 yymsp[-3].minor.yy215 = yylhsminor.yy215;
2858 break;
2859 case 107: /* expr ::= FUNC2 LP expr COMMA expr RP */
2860 #line 698 "pikchr.y"
2861 {yylhsminor.yy215 = pik_func(p,&yymsp[-5].minor.yy0,yymsp[-3].minor.yy215,yymsp[-1].minor.yy215);}
2862 #line 2887 "pikchr.c"
2863 yymsp[-5].minor.yy215 = yylhsminor.yy215;
2864 break;
2865 case 108: /* expr ::= place2 DOT_XY X */
2866 #line 699 "pikchr.y"
2867 {yylhsminor.yy215 = yymsp[-2].minor.yy85.x;}
2868 #line 2893 "pikchr.c"
2869 yymsp[-2].minor.yy215 = yylhsminor.yy215;
2870 break;
2871 case 109: /* expr ::= place2 DOT_XY Y */
2872 #line 700 "pikchr.y"
2873 {yylhsminor.yy215 = yymsp[-2].minor.yy85.y;}
2874 #line 2899 "pikchr.c"
2875 yymsp[-2].minor.yy215 = yylhsminor.yy215;
2876 break;
2877 case 110: /* expr ::= object DOT_L numproperty */
2878 case 111: /* expr ::= object DOT_L dashproperty */ yytestcase(yyruleno==111);
2879 case 112: /* expr ::= object DOT_L colorproperty */ yytestcase(yyruleno==112);
2880 #line 701 "pikchr.y"
2881 {yylhsminor.yy215=pik_property_of(p,yymsp[-2].minor.yy118,&yymsp[0].minor.yy0);}
2882 #line 2907 "pikchr.c"
2883 yymsp[-2].minor.yy215 = yylhsminor.yy215;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2884 break;
2885 default:
2886 /* (113) lvalue ::= ID */ yytestcase(yyruleno==113);
2887 /* (114) lvalue ::= FILL */ yytestcase(yyruleno==114);
2888 /* (115) lvalue ::= COLOR */ yytestcase(yyruleno==115);
2889 /* (116) lvalue ::= THICKNESS */ yytestcase(yyruleno==116);
2890 /* (117) rvalue ::= expr */ yytestcase(yyruleno==117);
2891 /* (118) print ::= PRINT */ yytestcase(yyruleno==118);
2892 /* (119) prlist ::= pritem (OPTIMIZED OUT) */ assert(yyruleno!=119);
2893 /* (120) prlist ::= prlist prsep pritem */ yytestcase(yyruleno==120);
2894 /* (121) direction ::= UP */ yytestcase(yyruleno==121);
2895 /* (122) direction ::= DOWN */ yytestcase(yyruleno==122);
2896 /* (123) direction ::= LEFT */ yytestcase(yyruleno==123);
2897 /* (124) direction ::= RIGHT */ yytestcase(yyruleno==124);
2898 /* (125) attribute_list ::= alist */ yytestcase(yyruleno==125);
2899 /* (126) alist ::= */ yytestcase(yyruleno==126);
2900 /* (127) alist ::= alist attribute */ yytestcase(yyruleno==127);
2901 /* (128) attribute ::= boolproperty (OPTIMIZED OUT) */ assert(yyruleno!=128);
2902 /* (129) attribute ::= WITH withclause */ yytestcase(yyruleno==129);
2903 /* (130) go ::= GO */ yytestcase(yyruleno==130);
2904 /* (131) go ::= */ yytestcase(yyruleno==131);
2905 /* (132) even ::= UNTIL EVEN WITH */ yytestcase(yyruleno==132);
2906 /* (133) even ::= EVEN WITH */ yytestcase(yyruleno==133);
2907 /* (134) dashproperty ::= DOTTED */ yytestcase(yyruleno==134);
2908 /* (135) dashproperty ::= DASHED */ yytestcase(yyruleno==135);
2909 /* (136) colorproperty ::= FILL */ yytestcase(yyruleno==136);
2910 /* (137) colorproperty ::= COLOR */ yytestcase(yyruleno==137);
2911 /* (138) position ::= place */ yytestcase(yyruleno==138);
2912 /* (139) between ::= WAY BETWEEN */ yytestcase(yyruleno==139);
2913 /* (140) between ::= BETWEEN */ yytestcase(yyruleno==140);
2914 /* (141) between ::= OF THE WAY BETWEEN */ yytestcase(yyruleno==141);
2915 /* (142) place ::= place2 */ yytestcase(yyruleno==142);
2916 /* (143) edge ::= EDGEPT */ yytestcase(yyruleno==143);
2917 /* (144) edge ::= TOP */ yytestcase(yyruleno==144);
2918 /* (145) edge ::= BOTTOM */ yytestcase(yyruleno==145);
2919 /* (146) edge ::= START */ yytestcase(yyruleno==146);
2920 /* (147) edge ::= END */ yytestcase(yyruleno==147);
2921 /* (148) edge ::= RIGHT */ yytestcase(yyruleno==148);
2922 /* (149) edge ::= LEFT */ yytestcase(yyruleno==149);
2923 /* (150) object ::= objectname */ yytestcase(yyruleno==150);
2924 break;
2925 /********** End reduce actions ************************************************/
2926 };
2927 assert( yyruleno<sizeof(yyRuleInfoLhs)/sizeof(yyRuleInfoLhs[0]) );
2928 yygoto = yyRuleInfoLhs[yyruleno];
@@ -2958,18 +2978,18 @@
2978 ){
2979 pik_parserARG_FETCH
2980 pik_parserCTX_FETCH
2981 #define TOKEN yyminor
2982 /************ Begin %syntax_error code ****************************************/
2983 #line 471 "pikchr.y"
2984
2985 if( TOKEN.z && TOKEN.z[0] ){
2986 pik_error(p, &TOKEN, "syntax error");
2987 }else{
2988 pik_error(p, 0, "syntax error");
2989 }
2990 #line 3015 "pikchr.c"
2991 /************ End %syntax_error code ******************************************/
2992 pik_parserARG_STORE /* Suppress warning about unused %extra_argument variable */
2993 pik_parserCTX_STORE
2994 }
2995
@@ -3198,11 +3218,11 @@
3218 #else
3219 (void)iToken;
3220 return 0;
3221 #endif
3222 }
3223 #line 706 "pikchr.y"
3224
3225
3226
3227 /* Chart of the 140 official HTML color names with their
3228 ** corresponding RGB value.
@@ -4634,10 +4654,44 @@
4654 pik_append(p, "\nERROR: ", -1);
4655 pik_append_text(p, zMsg, -1, 0);
4656 pik_append(p, "\n", 1);
4657 pik_append(p, "\n</pre></div>\n", -1);
4658 }
4659
4660 /*
4661 ** Process an "assert( e1 == e2 )" statement. Always return NULL.
4662 */
4663 static PElem *pik_assert(Pik *p, PNum e1, PToken *pEq, PNum e2){
4664 char zE1[50], zE2[50], zMsg[200];
4665
4666 /* Convert the numbers to strings using %g for comparison. This
4667 ** limits the precision of the comparison to account for rounding error. */
4668 snprintf(zE1, sizeof(zE1), "%g", e1); zE1[sizeof(zE1)-1] = 0;
4669 snprintf(zE2, sizeof(zE2), "%g", e2); zE1[sizeof(zE2)-1] = 0;
4670 if( strcmp(zE1,zE2)!=0 ){
4671 snprintf(zMsg, sizeof(zMsg), "%s != %s", zE1, zE2);
4672 pik_error(p, pEq, zMsg);
4673 }
4674 return 0;
4675 }
4676
4677 /*
4678 ** Process an "assert( place1 == place2 )" statement. Always return NULL.
4679 */
4680 static PElem *pik_place_assert(Pik *p, PPoint *e1, PToken *pEq, PPoint *e2){
4681 char zE1[100], zE2[100], zMsg[200];
4682
4683 /* Convert the numbers to strings using %g for comparison. This
4684 ** limits the precision of the comparison to account for rounding error. */
4685 snprintf(zE1, sizeof(zE1), "(%g,%g)", e1->x, e1->y); zE1[sizeof(zE1)-1] = 0;
4686 snprintf(zE2, sizeof(zE2), "(%g,%g)", e2->x, e2->y); zE1[sizeof(zE2)-1] = 0;
4687 if( strcmp(zE1,zE2)!=0 ){
4688 snprintf(zMsg, sizeof(zMsg), "%s != %s", zE1, zE2);
4689 pik_error(p, pEq, zMsg);
4690 }
4691 return 0;
4692 }
4693
4694 /* Free a complete list of elements */
4695 static void pik_elist_free(Pik *p, PEList *pEList){
4696 int i;
4697 if( pEList==0 ) return;
@@ -6279,10 +6333,11 @@
6333 { "above", 5, T_ABOVE, 0, 0 },
6334 { "abs", 3, T_FUNC1, FN_ABS, 0 },
6335 { "aligned", 7, T_ALIGNED, 0, 0 },
6336 { "and", 3, T_AND, 0, 0 },
6337 { "as", 2, T_AS, 0, 0 },
6338 { "assert", 6, T_ASSERT, 0, 0 },
6339 { "at", 2, T_AT, 0, 0 },
6340 { "behind", 6, T_BEHIND, 0, 0 },
6341 { "below", 5, T_BELOW, 0, 0 },
6342 { "between", 7, T_BETWEEN, 0, 0 },
6343 { "big", 3, T_BIG, 0, 0 },
@@ -6488,12 +6543,19 @@
6543 case '[': { pToken->eType = T_LB; return 1; }
6544 case ']': { pToken->eType = T_RB; return 1; }
6545 case ',': { pToken->eType = T_COMMA; return 1; }
6546 case ':': { pToken->eType = T_COLON; return 1; }
6547 case '>': { pToken->eType = T_GT; return 1; }
6548 case '=': {
6549 if( z[1]=='=' ){
6550 pToken->eType = T_EQ;
6551 return 2;
6552 }
6553 pToken->eType = T_ASSIGN;
6554 pToken->eCode = T_ASSIGN;
6555 return 1;
6556 }
6557 case '-': {
6558 if( z[1]=='>' ){
6559 pToken->eType = T_RARROW;
6560 return 2;
6561 }else if( z[1]=='=' ){
@@ -6526,13 +6588,22 @@
6588 if( islower(c1) ){
6589 const PikWord *pFound;
6590 for(i=2; (c = z[i])>='a' && c<='z'; i++){}
6591 pFound = pik_find_word((const char*)z+1, i-1,
6592 pik_keywords, count(pik_keywords));
6593 if( pFound && (pFound->eEdge>0 ||
6594 pFound->eType==T_EDGEPT ||
6595 pFound->eType==T_START ||
6596 pFound->eType==T_END)
6597 ){
6598 /* Dot followed by something that is a 2-D place value */
6599 pToken->eType = T_DOT_E;
6600 }else if( pFound->eType==T_X || pFound->eType==T_Y ){
6601 /* Dot followed by "x" or "y" */
6602 pToken->eType = T_DOT_XY;
6603 }else{
6604 /* Any other "dot" */
6605 pToken->eType = T_DOT_L;
6606 }
6607 return 1;
6608 }else if( isdigit(c1) ){
6609 i = 0;
@@ -6764,10 +6835,11 @@
6835 ** input text and the rendered SVG for all files named on the command
6836 ** line.
6837 */
6838 int main(int argc, char **argv){
6839 int i;
6840 int bNoEcho = 0; /* Do not the text of the script */
6841 printf(
6842 "<!DOCTYPE html>\n"
6843 "<html lang=\"en-US\">\n"
6844 "<head>\n<title>PIKCHR Test</title>\n"
6845 "<meta charset=\"utf-8\">\n"
@@ -6781,10 +6853,23 @@
6853 char *zOut;
6854 char *z, c;
6855 int j;
6856 int w, h;
6857
6858 if( argv[i][0]=='-' ){
6859 char *z = argv[i];
6860 z++;
6861 if( z[0]=='-' ) z++;
6862 if( strcmp(z,"no-echo")==0 ){
6863 bNoEcho = 1;
6864 }else
6865 {
6866 fprintf(stderr,"unknown option: \"%s\"\n", argv[i]);
6867 exit(1);
6868 }
6869 continue;
6870 }
6871 printf("<h1>File %s</h1>\n", argv[i]);
6872 in = fopen(argv[i], "rb");
6873 if( in==0 ){
6874 fprintf(stderr, "cannot open \"%s\" for reading\n", argv[i]);
6875 continue;
@@ -6799,42 +6884,45 @@
6884 continue;
6885 }
6886 sz = fread(zIn, 1, sz, in);
6887 fclose(in);
6888 zIn[sz] = 0;
6889 if( !bNoEcho ){
6890 printf("<p>Source text:</p>\n<blockquote><pre>\n");
6891 z = zIn;
6892 while( z[0]!=0 ){
6893 for(j=0; (c = z[j])!=0 && c!='<' && c!='>' && c!='&'; j++){}
6894 if( j ) printf("%.*s", j, z);
6895 z += j+1;
6896 j = -1;
6897 if( c=='<' ){
6898 printf("&lt;");
6899 }else if( c=='>' ){
6900 printf("&gt;");
6901 }else if( c=='&' ){
6902 printf("&amp;");
6903 }else if( c==0 ){
6904 break;
6905 }
6906 }
6907 printf("</pre></blockquote>\n");
6908 }
6909 zOut = pikchr(zIn, "pikchr", 0, &w, &h);
6910 free(zIn);
6911 if( zOut ){
6912 if( w<0 ){
6913 printf("<p>ERROR:</p>\n");
6914 }else{
6915 printf("<p>Output size: %d by %d</p>\n", w, h);
6916 }
6917 printf("<div style='border:3px solid lightgray;max-width:%dpx'>\n"
6918 "%s</div>\n",
6919 w, zOut);
6920 free(zOut);
6921 }
6922 }
6923 printf("</body></html>\n");
6924 return 0;
6925 }
6926 #endif /* PIKCHR_SHELL */
6927
6928 #line 6953 "pikchr.c"
6929

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button