1 # Exercising Bison on actual grammars. -*- Autotest -*- 2 3 # Copyright (C) 1989-1992, 2000-2005, 2007, 2009-2012 Free Software 4 # Foundation, Inc. 5 6 # This program is free software: you can redistribute it and/or modify 7 # it under the terms of the GNU General Public License as published by 8 # the Free Software Foundation, either version 3 of the License, or 9 # (at your option) any later version. 10 # 11 # This program is distributed in the hope that it will be useful, 12 # but WITHOUT ANY WARRANTY; without even the implied warranty of 13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 # GNU General Public License for more details. 15 # 16 # You should have received a copy of the GNU General Public License 17 # along with this program. If not, see <http://www.gnu.org/licenses/>. 18 19 AT_BANNER([[Existing Grammars.]]) 20 21 # AT_TEST_EXISTING_GRAMMAR(DESCRIPTION, 22 # DECLS, GRAMMAR, INPUT, 23 # BISON-STDERR, LAST-STATE, LALR1-DIFF, 24 # [OTHER-CHECKS], 25 # [PARSER-EXIT-VALUE], 26 # [PARSER-STDOUT], [PARSER-STDERR]) 27 # -------------------------------------------------------------- 28 m4_define([AT_TEST_EXISTING_GRAMMAR], [_AT_TEST_EXISTING_GRAMMAR([$][1], $@)]) 29 30 m4_define([_AT_TEST_EXISTING_GRAMMAR], 31 [ 32 dnl See how the parser tables have changed. As the .output format evolves, the 33 dnl diff comments with line numbers might be a pain to maintain. When that 34 dnl time comes, just use sed to drop the line numbers. For now, as LR(1) 35 dnl support is rapidly evolving, let's keep that information to be careful. 36 dnl However, we don't do diffs for canonical LR(1) because the diff is huge. 37 m4_pushdef([AT_LALR1_DIFF_CHECK], 38 [dnl We need diff -u, which is not portable. 39 AT_CHECK([diff -u /dev/null /dev/null || exit 77], [0], [ignore]) 40 41 AT_CHECK([[sed 's/^%define lr.type .*$//' input.y > input-lalr.y]]) 42 AT_BISON_CHECK([[--report=all input-lalr.y]], [[0]], [ignore], [ignore]) 43 AT_CHECK([[diff -u input-lalr.output input.output \ 44 | sed -n '/^@@/,$p' | sed 's/^ $//']], 45 [[0]], [$1])]) 46 47 AT_TEST_TABLES_AND_PARSE([$2[: LALR(1)]], [[LALR]], [[last-state]], 48 [[%define lr.type lalr 49 ]$3], 50 [$4], [$5], [$6], [$7], 51 [AT_LALR1_DIFF_CHECK([$8])$9], [$10], [$11], [$12]) 52 AT_TEST_TABLES_AND_PARSE([$2[: IELR(1)]], [[IELR]], [[last-state]], 53 [[%define lr.type ielr 54 ]$3], 55 [$4], [$5], [$6], [$7], 56 [AT_LALR1_DIFF_CHECK([$8])$9], [$10], [$11], [$12]) 57 AT_TEST_TABLES_AND_PARSE([$2[: Canonical LR(1)]], [[canonical LR]], 58 [[last-state,no-xml]], 59 [[%define lr.type canonical-lr 60 ]$3], 61 [$4], [$5], [$6], [$7], 62 [$9], [$10], [$11], [$12]) 63 64 m4_popdef([AT_LALR1_DIFF_CHECK]) 65 ]) 66 67 68 69 ## ----------------------- ## 70 ## GNU AWK 3.1.0 Grammar. ## 71 ## ----------------------- ## 72 73 # We have been careful to strip all the actions excepts the 74 # mid-rule actions. 75 # 76 # There are 65 SR conflicts. Bison was once wrong, due to an incorrect 77 # computation of nullable. It reported 485 SR conflicts! 78 79 AT_TEST_EXISTING_GRAMMAR([[GNU AWK 3.1.0 Grammar]], 80 [[%error-verbose 81 82 %token FUNC_CALL NAME REGEXP 83 %token ERROR 84 %token YNUMBER YSTRING 85 %token RELOP APPEND_OP 86 %token ASSIGNOP MATCHOP NEWLINE CONCAT_OP 87 %token LEX_BEGIN LEX_END LEX_IF LEX_ELSE LEX_RETURN LEX_DELETE 88 %token LEX_WHILE LEX_DO LEX_FOR LEX_BREAK LEX_CONTINUE 89 %token LEX_PRINT LEX_PRINTF LEX_NEXT LEX_EXIT LEX_FUNCTION 90 %token LEX_GETLINE LEX_NEXTFILE 91 %token LEX_IN 92 %token LEX_AND LEX_OR INCREMENT DECREMENT 93 %token LEX_BUILTIN LEX_LENGTH 94 95 /* Lowest to highest */ 96 %right ASSIGNOP 97 %right '?' ':' 98 %left LEX_OR 99 %left LEX_AND 100 %left LEX_GETLINE 101 %nonassoc LEX_IN 102 %left FUNC_CALL LEX_BUILTIN LEX_LENGTH 103 %nonassoc ',' 104 %nonassoc MATCHOP 105 %nonassoc RELOP '<' '>' '|' APPEND_OP TWOWAYIO 106 %left CONCAT_OP 107 %left YSTRING YNUMBER 108 %left '+' '-' 109 %left '*' '/' '%' 110 %right '!' UNARY 111 %right '^' 112 %left INCREMENT DECREMENT 113 %left '$' 114 %left '(' ')' 115 ]], 116 [[ 117 start 118 : opt_nls program opt_nls 119 ; 120 121 program 122 : rule 123 | program rule 124 | error 125 | program error 126 | /* empty */ 127 ; 128 129 rule 130 : LEX_BEGIN {} action 131 | LEX_END {} action 132 | LEX_BEGIN statement_term 133 | LEX_END statement_term 134 | pattern action 135 | action 136 | pattern statement_term 137 | function_prologue function_body 138 ; 139 140 func_name 141 : NAME 142 | FUNC_CALL 143 | lex_builtin 144 ; 145 146 lex_builtin 147 : LEX_BUILTIN 148 | LEX_LENGTH 149 ; 150 151 function_prologue 152 : LEX_FUNCTION {} func_name '(' opt_param_list r_paren opt_nls 153 ; 154 155 function_body 156 : l_brace statements r_brace opt_semi opt_nls 157 | l_brace r_brace opt_semi opt_nls 158 ; 159 160 pattern 161 : exp 162 | exp ',' exp 163 ; 164 165 regexp 166 /* 167 * In this rule, want_regexp tells yylex that the next thing 168 * is a regexp so it should read up to the closing slash. 169 */ 170 : '/' {} REGEXP '/' 171 ; 172 173 action 174 : l_brace statements r_brace opt_semi opt_nls 175 | l_brace r_brace opt_semi opt_nls 176 ; 177 178 statements 179 : statement 180 | statements statement 181 | error 182 | statements error 183 ; 184 185 statement_term 186 : nls 187 | semi opt_nls 188 ; 189 190 statement 191 : semi opt_nls 192 | l_brace r_brace 193 | l_brace statements r_brace 194 | if_statement 195 | LEX_WHILE '(' exp r_paren opt_nls statement 196 | LEX_DO opt_nls statement LEX_WHILE '(' exp r_paren opt_nls 197 | LEX_FOR '(' NAME LEX_IN NAME r_paren opt_nls statement 198 | LEX_FOR '(' opt_exp semi opt_nls exp semi opt_nls opt_exp r_paren opt_nls statement 199 | LEX_FOR '(' opt_exp semi opt_nls semi opt_nls opt_exp r_paren opt_nls statement 200 | LEX_BREAK statement_term 201 | LEX_CONTINUE statement_term 202 | print '(' expression_list r_paren output_redir statement_term 203 | print opt_rexpression_list output_redir statement_term 204 | LEX_NEXT statement_term 205 | LEX_NEXTFILE statement_term 206 | LEX_EXIT opt_exp statement_term 207 | LEX_RETURN {} opt_exp statement_term 208 | LEX_DELETE NAME '[' expression_list ']' statement_term 209 | LEX_DELETE NAME statement_term 210 | exp statement_term 211 ; 212 213 print 214 : LEX_PRINT 215 | LEX_PRINTF 216 ; 217 218 if_statement 219 : LEX_IF '(' exp r_paren opt_nls statement 220 | LEX_IF '(' exp r_paren opt_nls statement 221 LEX_ELSE opt_nls statement 222 ; 223 224 nls 225 : NEWLINE 226 | nls NEWLINE 227 ; 228 229 opt_nls 230 : /* empty */ 231 | nls 232 ; 233 234 input_redir 235 : /* empty */ 236 | '<' simp_exp 237 ; 238 239 output_redir 240 : /* empty */ 241 | '>' exp 242 | APPEND_OP exp 243 | '|' exp 244 | TWOWAYIO exp 245 ; 246 247 opt_param_list 248 : /* empty */ 249 | param_list 250 ; 251 252 param_list 253 : NAME 254 | param_list comma NAME 255 | error 256 | param_list error 257 | param_list comma error 258 ; 259 260 /* optional expression, as in for loop */ 261 opt_exp 262 : /* empty */ 263 | exp 264 ; 265 266 opt_rexpression_list 267 : /* empty */ 268 | rexpression_list 269 ; 270 271 rexpression_list 272 : rexp 273 | rexpression_list comma rexp 274 | error 275 | rexpression_list error 276 | rexpression_list error rexp 277 | rexpression_list comma error 278 ; 279 280 opt_expression_list 281 : /* empty */ 282 | expression_list 283 ; 284 285 expression_list 286 : exp 287 | expression_list comma exp 288 | error 289 | expression_list error 290 | expression_list error exp 291 | expression_list comma error 292 ; 293 294 /* Expressions, not including the comma operator. */ 295 exp : variable ASSIGNOP {} exp 296 | '(' expression_list r_paren LEX_IN NAME 297 | exp '|' LEX_GETLINE opt_variable 298 | exp TWOWAYIO LEX_GETLINE opt_variable 299 | LEX_GETLINE opt_variable input_redir 300 | exp LEX_AND exp 301 | exp LEX_OR exp 302 | exp MATCHOP exp 303 | regexp 304 | '!' regexp %prec UNARY 305 | exp LEX_IN NAME 306 | exp RELOP exp 307 | exp '<' exp 308 | exp '>' exp 309 | exp '?' exp ':' exp 310 | simp_exp 311 | exp simp_exp %prec CONCAT_OP 312 ; 313 314 rexp 315 : variable ASSIGNOP {} rexp 316 | rexp LEX_AND rexp 317 | rexp LEX_OR rexp 318 | LEX_GETLINE opt_variable input_redir 319 | regexp 320 | '!' regexp %prec UNARY 321 | rexp MATCHOP rexp 322 | rexp LEX_IN NAME 323 | rexp RELOP rexp 324 | rexp '?' rexp ':' rexp 325 | simp_exp 326 | rexp simp_exp %prec CONCAT_OP 327 ; 328 329 simp_exp 330 : non_post_simp_exp 331 /* Binary operators in order of decreasing precedence. */ 332 | simp_exp '^' simp_exp 333 | simp_exp '*' simp_exp 334 | simp_exp '/' simp_exp 335 | simp_exp '%' simp_exp 336 | simp_exp '+' simp_exp 337 | simp_exp '-' simp_exp 338 | variable INCREMENT 339 | variable DECREMENT 340 ; 341 342 non_post_simp_exp 343 : '!' simp_exp %prec UNARY 344 | '(' exp r_paren 345 | LEX_BUILTIN 346 '(' opt_expression_list r_paren 347 | LEX_LENGTH '(' opt_expression_list r_paren 348 | LEX_LENGTH 349 | FUNC_CALL '(' opt_expression_list r_paren 350 | variable 351 | INCREMENT variable 352 | DECREMENT variable 353 | YNUMBER 354 | YSTRING 355 | '-' simp_exp %prec UNARY 356 | '+' simp_exp %prec UNARY 357 ; 358 359 opt_variable 360 : /* empty */ 361 | variable 362 ; 363 364 variable 365 : NAME 366 | NAME '[' expression_list ']' 367 | '$' non_post_simp_exp 368 ; 369 370 l_brace 371 : '{' opt_nls 372 ; 373 374 r_brace 375 : '}' opt_nls 376 ; 377 378 r_paren 379 : ')' 380 ; 381 382 opt_semi 383 : /* empty */ 384 | semi 385 ; 386 387 semi 388 : ';' 389 ; 390 391 comma : ',' opt_nls 392 ; 393 ]], 394 395 dnl INPUT 396 dnl 397 dnl For example, in AWK: 398 dnl 399 dnl getline $!4*0; 400 dnl 401 dnl The grammar below (from GNU AWK 3.1.0) using canonical LR(1) or IELR(1) 402 dnl parses it as: 403 dnl 404 dnl getline $!(4*0); 405 dnl 406 dnl That is, they shift `*' immediately and make it part of the getline 407 dnl argument. 408 dnl 409 dnl The grammar below using LALR(1) parses it as a syntax error. So does 410 dnl GNU AWK 3.0.6, 3.1.0, and 3.1.1. They reduce the full getline expression 411 dnl before shifting `*' even though `*' is not a valid lookahead. 412 dnl 413 dnl GNU AWK 3.1.2, 3.1.3, 3.1.4, and 3.1.5 parse it as: 414 dnl 415 dnl (getline $!4)*0; 416 dnl 417 dnl That is, like the other versions of GNU AWK, they reduce the full getline 418 dnl expression before shifting `*'. However, because of a different LHS on the 419 dnl getline rule, `*' actually is a valid lookahead. Solaris /usr/xpg4/bin/awk 420 dnl and the Open Group awk specification seem to agree: 421 dnl 422 dnl http://www.opengroup.org/pubs/online/7908799/xcu/awk.html 423 dnl 424 dnl /bin/nawk and /bin/awk on Solaris 10 report it as a syntax error, but they 425 dnl don't like even `print $!4;'. 426 [[LEX_GETLINE, '$', '!', YNUMBER, '*', YNUMBER, ';']], 427 428 dnl BISON-STDERR 429 [AT_COND_CASE([[canonical LR]], 430 [[input.y: conflicts: 265 shift/reduce]], 431 [[input.y: conflicts: 65 shift/reduce]])[ 432 ]], 433 434 dnl LAST-STATE 435 [AT_COND_CASE([[LALR]], [[319]], [[canonical LR]], [[2358]], [[328]])], 436 437 dnl LALR1-DIFF not used for canonical LR(1) because the diff is huge. 438 dnl Isocore map from LALR(1) state number to new state number plus descriptions 439 dnl of any change in the actions resulting in a change in accepted language: 440 dnl - 24 -> 320 441 dnl - 16 -> 321 442 dnl - 17 -> 322 443 dnl - 20 -> 323 444 dnl - 21 -> 324 445 dnl - 54 -> 325 446 dnl - 56 -> 326: reduce -> shift on '*', '/', and '%' 447 dnl - 58 -> 327: reduce -> shift on '*', '/', and '%' 448 dnl - 61 -> 328: reduce -> shift on '*', '/', and '%' 449 [AT_COND_CASE([[LALR]], [], 450 [[@@ -712,7 +712,7 @@ 451 156 | . '$' non_post_simp_exp 452 453 NAME shift, and go to state 9 454 - '$' shift, and go to state 24 455 + '$' shift, and go to state 320 456 457 NAME [reduce using rule 152 (opt_variable)] 458 '$' [reduce using rule 152 (opt_variable)] 459 @@ -5379,7 +5379,7 @@ 460 156 | . '$' non_post_simp_exp 461 462 NAME shift, and go to state 9 463 - '$' shift, and go to state 24 464 + '$' shift, and go to state 320 465 466 NAME [reduce using rule 152 (opt_variable)] 467 '$' [reduce using rule 152 (opt_variable)] 468 @@ -5399,7 +5399,7 @@ 469 156 | . '$' non_post_simp_exp 470 471 NAME shift, and go to state 9 472 - '$' shift, and go to state 24 473 + '$' shift, and go to state 320 474 475 NAME [reduce using rule 152 (opt_variable)] 476 '$' [reduce using rule 152 (opt_variable)] 477 @@ -6214,7 +6214,7 @@ 478 156 | . '$' non_post_simp_exp 479 480 NAME shift, and go to state 9 481 - '$' shift, and go to state 24 482 + '$' shift, and go to state 320 483 484 NAME [reduce using rule 152 (opt_variable)] 485 '$' [reduce using rule 152 (opt_variable)] 486 @@ -11099,3 +11099,274 @@ 487 45 statement: LEX_FOR '(' opt_exp semi opt_nls exp semi opt_nls opt_exp r_paren opt_nls statement . 488 489 $default reduce using rule 45 (statement) 490 + 491 + 492 +State 320 493 + 494 + 139 non_post_simp_exp: . '!' simp_exp 495 + 140 | . '(' exp r_paren 496 + 141 | . LEX_BUILTIN '(' opt_expression_list r_paren 497 + 142 | . LEX_LENGTH '(' opt_expression_list r_paren 498 + 143 | . LEX_LENGTH 499 + 144 | . FUNC_CALL '(' opt_expression_list r_paren 500 + 145 | . variable 501 + 146 | . INCREMENT variable 502 + 147 | . DECREMENT variable 503 + 148 | . YNUMBER 504 + 149 | . YSTRING 505 + 150 | . '-' simp_exp 506 + 151 | . '+' simp_exp 507 + 154 variable: . NAME 508 + 155 | . NAME '[' expression_list ']' 509 + 156 | . '$' non_post_simp_exp 510 + 156 | '$' . non_post_simp_exp 511 + 512 + FUNC_CALL shift, and go to state 8 513 + NAME shift, and go to state 9 514 + YNUMBER shift, and go to state 10 515 + YSTRING shift, and go to state 11 516 + INCREMENT shift, and go to state 321 517 + DECREMENT shift, and go to state 322 518 + LEX_BUILTIN shift, and go to state 18 519 + LEX_LENGTH shift, and go to state 19 520 + '+' shift, and go to state 323 521 + '-' shift, and go to state 324 522 + '!' shift, and go to state 325 523 + '$' shift, and go to state 320 524 + '(' shift, and go to state 55 525 + 526 + non_post_simp_exp go to state 62 527 + variable go to state 63 528 + 529 + 530 +State 321 531 + 532 + 146 non_post_simp_exp: INCREMENT . variable 533 + 154 variable: . NAME 534 + 155 | . NAME '[' expression_list ']' 535 + 156 | . '$' non_post_simp_exp 536 + 537 + NAME shift, and go to state 9 538 + '$' shift, and go to state 320 539 + 540 + variable go to state 50 541 + 542 + 543 +State 322 544 + 545 + 147 non_post_simp_exp: DECREMENT . variable 546 + 154 variable: . NAME 547 + 155 | . NAME '[' expression_list ']' 548 + 156 | . '$' non_post_simp_exp 549 + 550 + NAME shift, and go to state 9 551 + '$' shift, and go to state 320 552 + 553 + variable go to state 51 554 + 555 + 556 +State 323 557 + 558 + 130 simp_exp: . non_post_simp_exp 559 + 131 | . simp_exp '^' simp_exp 560 + 132 | . simp_exp '*' simp_exp 561 + 133 | . simp_exp '/' simp_exp 562 + 134 | . simp_exp '%' simp_exp 563 + 135 | . simp_exp '+' simp_exp 564 + 136 | . simp_exp '-' simp_exp 565 + 137 | . variable INCREMENT 566 + 138 | . variable DECREMENT 567 + 139 non_post_simp_exp: . '!' simp_exp 568 + 140 | . '(' exp r_paren 569 + 141 | . LEX_BUILTIN '(' opt_expression_list r_paren 570 + 142 | . LEX_LENGTH '(' opt_expression_list r_paren 571 + 143 | . LEX_LENGTH 572 + 144 | . FUNC_CALL '(' opt_expression_list r_paren 573 + 145 | . variable 574 + 146 | . INCREMENT variable 575 + 147 | . DECREMENT variable 576 + 148 | . YNUMBER 577 + 149 | . YSTRING 578 + 150 | . '-' simp_exp 579 + 151 | . '+' simp_exp 580 + 151 | '+' . simp_exp 581 + 154 variable: . NAME 582 + 155 | . NAME '[' expression_list ']' 583 + 156 | . '$' non_post_simp_exp 584 + 585 + FUNC_CALL shift, and go to state 8 586 + NAME shift, and go to state 9 587 + YNUMBER shift, and go to state 10 588 + YSTRING shift, and go to state 11 589 + INCREMENT shift, and go to state 16 590 + DECREMENT shift, and go to state 17 591 + LEX_BUILTIN shift, and go to state 18 592 + LEX_LENGTH shift, and go to state 19 593 + '+' shift, and go to state 20 594 + '-' shift, and go to state 21 595 + '!' shift, and go to state 54 596 + '$' shift, and go to state 24 597 + '(' shift, and go to state 55 598 + 599 + simp_exp go to state 326 600 + non_post_simp_exp go to state 35 601 + variable go to state 57 602 + 603 + 604 +State 324 605 + 606 + 130 simp_exp: . non_post_simp_exp 607 + 131 | . simp_exp '^' simp_exp 608 + 132 | . simp_exp '*' simp_exp 609 + 133 | . simp_exp '/' simp_exp 610 + 134 | . simp_exp '%' simp_exp 611 + 135 | . simp_exp '+' simp_exp 612 + 136 | . simp_exp '-' simp_exp 613 + 137 | . variable INCREMENT 614 + 138 | . variable DECREMENT 615 + 139 non_post_simp_exp: . '!' simp_exp 616 + 140 | . '(' exp r_paren 617 + 141 | . LEX_BUILTIN '(' opt_expression_list r_paren 618 + 142 | . LEX_LENGTH '(' opt_expression_list r_paren 619 + 143 | . LEX_LENGTH 620 + 144 | . FUNC_CALL '(' opt_expression_list r_paren 621 + 145 | . variable 622 + 146 | . INCREMENT variable 623 + 147 | . DECREMENT variable 624 + 148 | . YNUMBER 625 + 149 | . YSTRING 626 + 150 | . '-' simp_exp 627 + 150 | '-' . simp_exp 628 + 151 | . '+' simp_exp 629 + 154 variable: . NAME 630 + 155 | . NAME '[' expression_list ']' 631 + 156 | . '$' non_post_simp_exp 632 + 633 + FUNC_CALL shift, and go to state 8 634 + NAME shift, and go to state 9 635 + YNUMBER shift, and go to state 10 636 + YSTRING shift, and go to state 11 637 + INCREMENT shift, and go to state 16 638 + DECREMENT shift, and go to state 17 639 + LEX_BUILTIN shift, and go to state 18 640 + LEX_LENGTH shift, and go to state 19 641 + '+' shift, and go to state 20 642 + '-' shift, and go to state 21 643 + '!' shift, and go to state 54 644 + '$' shift, and go to state 24 645 + '(' shift, and go to state 55 646 + 647 + simp_exp go to state 327 648 + non_post_simp_exp go to state 35 649 + variable go to state 57 650 + 651 + 652 +State 325 653 + 654 + 130 simp_exp: . non_post_simp_exp 655 + 131 | . simp_exp '^' simp_exp 656 + 132 | . simp_exp '*' simp_exp 657 + 133 | . simp_exp '/' simp_exp 658 + 134 | . simp_exp '%' simp_exp 659 + 135 | . simp_exp '+' simp_exp 660 + 136 | . simp_exp '-' simp_exp 661 + 137 | . variable INCREMENT 662 + 138 | . variable DECREMENT 663 + 139 non_post_simp_exp: . '!' simp_exp 664 + 139 | '!' . simp_exp 665 + 140 | . '(' exp r_paren 666 + 141 | . LEX_BUILTIN '(' opt_expression_list r_paren 667 + 142 | . LEX_LENGTH '(' opt_expression_list r_paren 668 + 143 | . LEX_LENGTH 669 + 144 | . FUNC_CALL '(' opt_expression_list r_paren 670 + 145 | . variable 671 + 146 | . INCREMENT variable 672 + 147 | . DECREMENT variable 673 + 148 | . YNUMBER 674 + 149 | . YSTRING 675 + 150 | . '-' simp_exp 676 + 151 | . '+' simp_exp 677 + 154 variable: . NAME 678 + 155 | . NAME '[' expression_list ']' 679 + 156 | . '$' non_post_simp_exp 680 + 681 + FUNC_CALL shift, and go to state 8 682 + NAME shift, and go to state 9 683 + YNUMBER shift, and go to state 10 684 + YSTRING shift, and go to state 11 685 + INCREMENT shift, and go to state 16 686 + DECREMENT shift, and go to state 17 687 + LEX_BUILTIN shift, and go to state 18 688 + LEX_LENGTH shift, and go to state 19 689 + '+' shift, and go to state 20 690 + '-' shift, and go to state 21 691 + '!' shift, and go to state 54 692 + '$' shift, and go to state 24 693 + '(' shift, and go to state 55 694 + 695 + simp_exp go to state 328 696 + non_post_simp_exp go to state 35 697 + variable go to state 57 698 + 699 + 700 +State 326 701 + 702 + 131 simp_exp: simp_exp . '^' simp_exp 703 + 132 | simp_exp . '*' simp_exp 704 + 133 | simp_exp . '/' simp_exp 705 + 134 | simp_exp . '%' simp_exp 706 + 135 | simp_exp . '+' simp_exp 707 + 136 | simp_exp . '-' simp_exp 708 + 151 non_post_simp_exp: '+' simp_exp . [error, FUNC_CALL, NAME, YNUMBER, YSTRING, RELOP, APPEND_OP, MATCHOP, NEWLINE, LEX_IN, LEX_AND, LEX_OR, INCREMENT, DECREMENT, LEX_BUILTIN, LEX_LENGTH, '?', ':', ',', '<', '>', '|', TWOWAYIO, '+', '-', '!', '$', '(', ')', '@:>@', '{', ';'] 709 + 710 + '*' shift, and go to state 89 711 + '/' shift, and go to state 90 712 + '%' shift, and go to state 91 713 + '^' shift, and go to state 92 714 + 715 + $default reduce using rule 151 (non_post_simp_exp) 716 + 717 + Conflict between rule 151 and token '+' resolved as reduce ('+' < UNARY). 718 + Conflict between rule 151 and token '-' resolved as reduce ('-' < UNARY). 719 + 720 + 721 +State 327 722 + 723 + 131 simp_exp: simp_exp . '^' simp_exp 724 + 132 | simp_exp . '*' simp_exp 725 + 133 | simp_exp . '/' simp_exp 726 + 134 | simp_exp . '%' simp_exp 727 + 135 | simp_exp . '+' simp_exp 728 + 136 | simp_exp . '-' simp_exp 729 + 150 non_post_simp_exp: '-' simp_exp . [error, FUNC_CALL, NAME, YNUMBER, YSTRING, RELOP, APPEND_OP, MATCHOP, NEWLINE, LEX_IN, LEX_AND, LEX_OR, INCREMENT, DECREMENT, LEX_BUILTIN, LEX_LENGTH, '?', ':', ',', '<', '>', '|', TWOWAYIO, '+', '-', '!', '$', '(', ')', '@:>@', '{', ';'] 730 + 731 + '*' shift, and go to state 89 732 + '/' shift, and go to state 90 733 + '%' shift, and go to state 91 734 + '^' shift, and go to state 92 735 + 736 + $default reduce using rule 150 (non_post_simp_exp) 737 + 738 + Conflict between rule 150 and token '+' resolved as reduce ('+' < UNARY). 739 + Conflict between rule 150 and token '-' resolved as reduce ('-' < UNARY). 740 + 741 + 742 +State 328 743 + 744 + 131 simp_exp: simp_exp . '^' simp_exp 745 + 132 | simp_exp . '*' simp_exp 746 + 133 | simp_exp . '/' simp_exp 747 + 134 | simp_exp . '%' simp_exp 748 + 135 | simp_exp . '+' simp_exp 749 + 136 | simp_exp . '-' simp_exp 750 + 139 non_post_simp_exp: '!' simp_exp . [error, FUNC_CALL, NAME, YNUMBER, YSTRING, RELOP, APPEND_OP, MATCHOP, NEWLINE, LEX_IN, LEX_AND, LEX_OR, INCREMENT, DECREMENT, LEX_BUILTIN, LEX_LENGTH, '?', ':', ',', '<', '>', '|', TWOWAYIO, '+', '-', '!', '$', '(', ')', '@:>@', '{', ';'] 751 + 752 + '*' shift, and go to state 89 753 + '/' shift, and go to state 90 754 + '%' shift, and go to state 91 755 + '^' shift, and go to state 92 756 + 757 + $default reduce using rule 139 (non_post_simp_exp) 758 + 759 + Conflict between rule 139 and token '+' resolved as reduce ('+' < UNARY). 760 + Conflict between rule 139 and token '-' resolved as reduce ('-' < UNARY). 761 ]])], 762 763 dnl OTHER-CHECKS 764 [], 765 766 dnl PARSER-EXIT-VALUE, PARSER-STDOUT, PARSER-STDERR 767 dnl In the case of the syntax error, the parser recovers, so it returns 0. 768 [[0]], 769 [], 770 [AT_COND_CASE([[LALR]], 771 [[syntax error, unexpected '*', expecting NEWLINE or '{' or ';' 772 ]])]) 773 774 ## ----------------- ## 775 ## GNU Cim Grammar. ## 776 ## ----------------- ## 777 778 # GNU Cim, the GNU Simula 87 Compiler. 779 780 # Bison was once wrong, due to an incorrect computation of the RR conflicts. 781 # It reported 80 SR && 99 RR conflicts instead of 78/10!!! 782 783 AT_TEST_EXISTING_GRAMMAR([[GNU Cim Grammar]], 784 [[ 785 %token 786 HACTIVATE HAFTER /*HAND*/ HARRAY HAT 787 HBEFORE HBEGIN HBOOLEAN 788 HCHARACTER HCLASS /*HCOMMENT*/ HCONC 789 HDELAY HDO 790 HELSE HEND HEQ /*HEQV*/ HEXTERNAL 791 HFOR 792 HGE HGO HGOTO HGT 793 HHIDDEN 794 HIF /*HIMP*/ HIN HINNER HINSPECT HINTEGER HIS 795 HLABEL HLE HLONG HLT 796 HNAME HNE HNEW HNONE /*HNOT*/ HNOTEXT 797 /*HOR*/ HOTHERWISE 798 HPRIOR HPROCEDURE HPROTECTED 799 HQUA 800 HREACTIVATE HREAL HREF 801 HSHORT HSTEP HSWITCH 802 HTEXT HTHEN HTHIS HTO 803 HUNTIL 804 HVALUE HVAR HVIRTUAL 805 HWHEN HWHILE 806 807 HASSIGNVALUE HASSIGNREF 808 /*HDOT*/ HPAREXPSEPARATOR HLABELSEPARATOR HSTATEMENTSEPARATOR 809 HBEGPAR HENDPAR 810 HEQR HNER 811 HADD HSUB HMUL HDIV HINTDIV HEXP 812 HDOTDOTDOT 813 814 %token HIDENTIFIER 815 %token HBOOLEANKONST HINTEGERKONST HCHARACTERKONST 816 %token HREALKONST 817 %token HTEXTKONST 818 819 820 %right HASSIGN 821 %left HORELSE 822 %left HANDTHEN 823 %left HEQV 824 %left HIMP 825 %left HOR 826 %left HAND 827 828 %left HNOT 829 830 %left HVALRELOPERATOR HREFRELOPERATOR HOBJRELOPERATOR 831 832 %left HCONC 833 834 %left HTERMOPERATOR 835 %left UNEAR 836 %left HFACTOROPERATOR 837 %left HPRIMARYOPERATOR 838 839 %left HQUA 840 841 %left HDOT 842 843 %start MAIN_MODULE 844 ]], 845 [[ 846 /* GRAMATIKK FOR PROGRAM MODULES */ 847 MAIN_MODULE : {} 848 MODULS 849 | error HSTATEMENTSEPARATOR MBEE_DECLSTMS 850 ; 851 EXT_DECLARATION : HEXTERNAL 852 MBEE_TYPE 853 HPROCEDURE 854 {} 855 EXT_LIST 856 | 857 HEXTERNAL 858 HIDENTIFIER 859 HPROCEDURE 860 {} 861 HIDENTIFIER {} 862 EXTERNAL_KIND_ITEM 863 | HEXTERNAL 864 HCLASS 865 {} 866 EXT_LIST 867 868 ; 869 EXTERNAL_KIND_ITEM: EXT_IDENT 870 HOBJRELOPERATOR 871 {} 872 MBEE_TYPE HPROCEDURE 873 HIDENTIFIER 874 {} 875 HEADING EMPTY_BLOCK 876 {} 877 /* | 878 EXT_IDENT 879 {} 880 MBEE_REST_EXT_LIST 881 ; 882 MBEE_REST_EXT_LIST: /* EMPTY 883 | HPAREXPSEPARATOR EXT_KIND_LIST 884 ; 885 EXT_KIND_LIST : EXT_KIND_ITEM 886 | EXT_KIND_LIST HPAREXPSEPARATOR EXT_KIND_ITEM 887 ; 888 EXT_KIND_ITEM : HIDENTIFIER 889 EXT_IDENT 890 {}*/ 891 ; 892 EMPTY_BLOCK : /*EMPT*/ 893 | HBEGIN HEND 894 ; 895 EXT_LIST : EXT_ITEM 896 | EXT_LIST HPAREXPSEPARATOR EXT_ITEM 897 ; 898 EXT_ITEM : HIDENTIFIER 899 EXT_IDENT 900 ; 901 EXT_IDENT : /* EMPTY */ 902 | HVALRELOPERATOR {} 903 HTEXTKONST 904 ; 905 /* GRAMATIKK FOR TYPER */ 906 NO_TYPE : /*EMPT*/ 907 ; 908 MBEE_TYPE : NO_TYPE 909 | TYPE 910 ; 911 TYPE : HREF HBEGPAR 912 HIDENTIFIER 913 {} 914 HENDPAR 915 | HTEXT 916 | HBOOLEAN 917 | HCHARACTER 918 | HSHORT HINTEGER 919 | HINTEGER 920 | HREAL 921 | HLONG HREAL 922 ; 923 924 /* GRAMATIKK FOR DEL AV SETNINGER */ 925 MBEE_ELSE_PART : /*EMPT*/ 926 /* | HELSE 927 HIF 928 EXPRESSION 929 HTHEN {} 930 BLOCK {} 931 MBEE_ELSE_PART {}*/ 932 | HELSE {} 933 BLOCK 934 ; 935 FOR_LIST : FOR_LIST_ELEMENT 936 | FOR_LIST_ELEMENT 937 HPAREXPSEPARATOR 938 FOR_LIST 939 ; 940 FOR_LIST_ELEMENT: EXPRESSION 941 MBEE_F_L_EL_R_PT 942 ; 943 MBEE_F_L_EL_R_PT: /*EMPT*/ 944 | HWHILE 945 EXPRESSION 946 | HSTEP 947 EXPRESSION 948 HUNTIL 949 EXPRESSION 950 ; 951 GOTO : HGO 952 HTO 953 | HGOTO 954 ; 955 CONN_STATE_R_PT : WHEN_CLAUSE_LIST 956 | HDO {} 957 BLOCK 958 ; 959 WHEN_CLAUSE_LIST: HWHEN 960 HIDENTIFIER 961 HDO {} 962 BLOCK 963 | WHEN_CLAUSE_LIST 964 HWHEN 965 HIDENTIFIER 966 HDO {} 967 BLOCK 968 ; 969 MBEE_OTWI_CLAUS : /*EMPT*/ 970 | HOTHERWISE {} 971 972 BLOCK 973 ; 974 ACTIVATOR : HACTIVATE 975 | HREACTIVATE 976 ; 977 SCHEDULE : /*EMPT*/ 978 | ATDELAY EXPRESSION {} 979 PRIOR 980 | BEFOREAFTER {} 981 EXPRESSION 982 ; 983 ATDELAY : HAT 984 | HDELAY 985 ; 986 BEFOREAFTER : HBEFORE 987 | HAFTER 988 ; 989 PRIOR : /*EMPT*/ 990 | HPRIOR 991 ; 992 /* GRAMATIKK FOR SETNINGER OG DEKLARASJONER */ 993 MODULSTATEMENT : HWHILE 994 EXPRESSION 995 HDO {} 996 BLOCK 997 | HIF 998 EXPRESSION 999 HTHEN {} 1000 BLOCK {} 1001 MBEE_ELSE_PART 1002 | HFOR 1003 HIDENTIFIER 1004 HASSIGN {} 1005 FOR_LIST 1006 HDO {} 1007 BLOCK 1008 | GOTO 1009 EXPRESSION 1010 | HINSPECT 1011 EXPRESSION {} 1012 CONN_STATE_R_PT 1013 {} 1014 MBEE_OTWI_CLAUS 1015 | HINNER 1016 | HIDENTIFIER 1017 HLABELSEPARATOR 1018 {} 1019 DECLSTATEMENT 1020 | EXPRESSION_SIMP 1021 HBEGIN 1022 {} 1023 IMPORT_SPEC_MODULE 1024 {} 1025 MBEE_DECLSTMS 1026 HEND 1027 | EXPRESSION_SIMP HBEGIN error HSTATEMENTSEPARATOR 1028 MBEE_DECLSTMS HEND 1029 | EXPRESSION_SIMP HBEGIN error HEND 1030 | EXPRESSION_SIMP 1031 | ACTIVATOR EXPRESSION SCHEDULE 1032 | HBEGIN 1033 {} 1034 MBEE_DECLSTMS 1035 HEND 1036 | MBEE_TYPE HPROCEDURE 1037 HIDENTIFIER 1038 {} 1039 HEADING BLOCK 1040 | HIDENTIFIER 1041 HCLASS 1042 NO_TYPE 1043 {} 1044 IMPORT_SPEC_MODULE 1045 HIDENTIFIER 1046 {} 1047 HEADING 1048 BLOCK 1049 | HCLASS 1050 NO_TYPE 1051 HIDENTIFIER 1052 {} 1053 HEADING 1054 BLOCK 1055 | EXT_DECLARATION 1056 | /*EMPT*/ 1057 ; 1058 IMPORT_SPEC_MODULE: 1059 ; 1060 DECLSTATEMENT : MODULSTATEMENT 1061 | TYPE 1062 HIDENTIFIER 1063 MBEE_CONSTANT 1064 HPAREXPSEPARATOR 1065 {} 1066 IDENTIFIER_LISTC 1067 | TYPE 1068 HIDENTIFIER 1069 MBEE_CONSTANT 1070 | MBEE_TYPE 1071 HARRAY {} 1072 ARR_SEGMENT_LIST 1073 | HSWITCH 1074 HIDENTIFIER 1075 HASSIGN {} 1076 SWITCH_LIST 1077 ; 1078 BLOCK : DECLSTATEMENT 1079 | HBEGIN MBEE_DECLSTMS HEND 1080 | HBEGIN error HSTATEMENTSEPARATOR MBEE_DECLSTMS HEND 1081 | HBEGIN error HEND 1082 ; 1083 MBEE_DECLSTMS : MBEE_DECLSTMSU 1084 ; 1085 MBEE_DECLSTMSU : DECLSTATEMENT 1086 | MBEE_DECLSTMSU 1087 HSTATEMENTSEPARATOR 1088 DECLSTATEMENT 1089 ; 1090 MODULS : MODULSTATEMENT 1091 | MODULS HSTATEMENTSEPARATOR MODULSTATEMENT 1092 ; 1093 /* GRAMATIKK FOR DEL AV DEKLARASJONER */ 1094 ARR_SEGMENT_LIST: ARR_SEGMENT 1095 | ARR_SEGMENT_LIST 1096 HPAREXPSEPARATOR 1097 ARR_SEGMENT 1098 ; 1099 ARR_SEGMENT : ARRAY_SEGMENT 1100 HBEGPAR 1101 BAUND_PAIR_LIST HENDPAR 1102 ; 1103 ARRAY_SEGMENT : ARRAY_SEGMENT_EL {} 1104 1105 | ARRAY_SEGMENT_EL 1106 HPAREXPSEPARATOR 1107 ARRAY_SEGMENT 1108 ; 1109 ARRAY_SEGMENT_EL: HIDENTIFIER 1110 ; 1111 BAUND_PAIR_LIST : BAUND_PAIR 1112 | BAUND_PAIR 1113 HPAREXPSEPARATOR 1114 BAUND_PAIR_LIST 1115 ; 1116 BAUND_PAIR : EXPRESSION 1117 HLABELSEPARATOR 1118 EXPRESSION 1119 ; 1120 SWITCH_LIST : EXPRESSION 1121 | EXPRESSION 1122 HPAREXPSEPARATOR 1123 SWITCH_LIST 1124 ; 1125 HEADING : MBEE_FMAL_PAR_P HSTATEMENTSEPARATOR {} 1126 MBEE_MODE_PART {} 1127 MBEE_SPEC_PART {} 1128 MBEE_PROT_PART {} 1129 MBEE_VIRT_PART 1130 ; 1131 MBEE_FMAL_PAR_P : /*EMPT*/ 1132 | FMAL_PAR_PART 1133 ; 1134 FMAL_PAR_PART : HBEGPAR NO_TYPE 1135 MBEE_LISTV HENDPAR 1136 ; 1137 MBEE_LISTV : /*EMPT*/ 1138 | LISTV 1139 ; 1140 LISTV : HIDENTIFIER 1141 | FPP_CATEG HDOTDOTDOT 1142 | HIDENTIFIER {} 1143 HPAREXPSEPARATOR LISTV 1144 | FPP_SPEC 1145 | FPP_SPEC 1146 HPAREXPSEPARATOR LISTV 1147 ; 1148 FPP_HEADING : HBEGPAR NO_TYPE 1149 FPP_MBEE_LISTV HENDPAR 1150 ; 1151 FPP_MBEE_LISTV : /*EMPT*/ 1152 | FPP_LISTV 1153 ; 1154 FPP_LISTV : FPP_CATEG HDOTDOTDOT 1155 | FPP_SPEC 1156 | FPP_SPEC 1157 HPAREXPSEPARATOR LISTV 1158 ; 1159 FPP_SPEC : FPP_CATEG SPECIFIER HIDENTIFIER 1160 | FPP_CATEG FPP_PROC_DECL_IN_SPEC 1161 ; 1162 FPP_CATEG : HNAME HLABELSEPARATOR 1163 | HVALUE HLABELSEPARATOR 1164 | HVAR HLABELSEPARATOR 1165 | /*EMPT*/ 1166 ; 1167 FPP_PROC_DECL_IN_SPEC: MBEE_TYPE HPROCEDURE 1168 HIDENTIFIER 1169 {} 1170 FPP_HEADING {} { /* Yes, two "final" actions. */ } 1171 ; 1172 IDENTIFIER_LISTV: HIDENTIFIER 1173 | HDOTDOTDOT 1174 | HIDENTIFIER {} 1175 HPAREXPSEPARATOR IDENTIFIER_LISTV 1176 ; 1177 MBEE_MODE_PART : /*EMPT*/ 1178 | MODE_PART 1179 ; 1180 MODE_PART : NAME_PART 1181 | VALUE_PART 1182 | VAR_PART 1183 | NAME_PART VALUE_PART 1184 | VALUE_PART NAME_PART 1185 | NAME_PART VAR_PART 1186 | VAR_PART NAME_PART 1187 | VALUE_PART VAR_PART 1188 | VAR_PART VALUE_PART 1189 | VAR_PART NAME_PART VALUE_PART 1190 | NAME_PART VAR_PART VALUE_PART 1191 | NAME_PART VALUE_PART VAR_PART 1192 | VAR_PART VALUE_PART NAME_PART 1193 | VALUE_PART VAR_PART NAME_PART 1194 | VALUE_PART NAME_PART VAR_PART 1195 ; 1196 NAME_PART : HNAME {} 1197 IDENTIFIER_LISTV 1198 HSTATEMENTSEPARATOR 1199 ; 1200 VAR_PART : HVAR {} 1201 IDENTIFIER_LISTV 1202 HSTATEMENTSEPARATOR 1203 ; 1204 VALUE_PART : HVALUE {} 1205 IDENTIFIER_LISTV HSTATEMENTSEPARATOR 1206 ; 1207 MBEE_SPEC_PART : /*EMPT*/ 1208 | SPEC_PART 1209 ; 1210 SPEC_PART : ONE_SPEC 1211 | SPEC_PART ONE_SPEC 1212 ; 1213 ONE_SPEC : SPECIFIER IDENTIFIER_LIST HSTATEMENTSEPARATOR 1214 | NO_TYPE HPROCEDURE HIDENTIFIER HOBJRELOPERATOR 1215 {} 1216 PROC_DECL_IN_SPEC HSTATEMENTSEPARATOR 1217 | FPP_PROC_DECL_IN_SPEC HSTATEMENTSEPARATOR 1218 | MBEE_TYPE HPROCEDURE HIDENTIFIER HSTATEMENTSEPARATOR 1219 | MBEE_TYPE HPROCEDURE HIDENTIFIER HPAREXPSEPARATOR 1220 IDENTIFIER_LIST HSTATEMENTSEPARATOR 1221 ; 1222 SPECIFIER : TYPE 1223 | MBEE_TYPE 1224 HARRAY 1225 | HLABEL 1226 | HSWITCH 1227 ; 1228 PROC_DECL_IN_SPEC: MBEE_TYPE HPROCEDURE 1229 HIDENTIFIER 1230 {} 1231 HEADING 1232 {} 1233 MBEE_BEGIN_END 1234 ; 1235 MBEE_BEGIN_END : /* EMPTY */ 1236 | HBEGIN HEND 1237 ; 1238 MBEE_PROT_PART : /*EMPT*/ 1239 | PROTECTION_PART 1240 ; 1241 PROTECTION_PART : PROT_SPECIFIER IDENTIFIER_LIST 1242 HSTATEMENTSEPARATOR 1243 | PROTECTION_PART PROT_SPECIFIER 1244 IDENTIFIER_LIST HSTATEMENTSEPARATOR 1245 ; 1246 PROT_SPECIFIER : HHIDDEN 1247 | HPROTECTED 1248 | HHIDDEN 1249 HPROTECTED 1250 | HPROTECTED 1251 HHIDDEN 1252 ; 1253 MBEE_VIRT_PART : /*EMPT*/ 1254 | VIRTUAL_PART 1255 ; 1256 VIRTUAL_PART : HVIRTUAL 1257 HLABELSEPARATOR 1258 MBEE_SPEC_PART 1259 ; 1260 IDENTIFIER_LIST : HIDENTIFIER 1261 | IDENTIFIER_LIST HPAREXPSEPARATOR 1262 HIDENTIFIER 1263 ; 1264 IDENTIFIER_LISTC: HIDENTIFIER 1265 MBEE_CONSTANT 1266 | IDENTIFIER_LISTC HPAREXPSEPARATOR 1267 HIDENTIFIER 1268 MBEE_CONSTANT 1269 ; 1270 MBEE_CONSTANT : /* EMPTY */ 1271 | HVALRELOPERATOR 1272 {} 1273 EXPRESSION 1274 ; 1275 1276 /* GRAMATIKK FOR UTTRYKK */ 1277 EXPRESSION : EXPRESSION_SIMP 1278 | HIF 1279 EXPRESSION 1280 HTHEN 1281 EXPRESSION 1282 HELSE 1283 EXPRESSION 1284 ; 1285 EXPRESSION_SIMP : EXPRESSION_SIMP 1286 HASSIGN 1287 EXPRESSION 1288 | 1289 1290 EXPRESSION_SIMP 1291 HCONC 1292 EXPRESSION_SIMP 1293 | EXPRESSION_SIMP HOR 1294 HELSE 1295 EXPRESSION_SIMP 1296 %prec HORELSE 1297 | EXPRESSION_SIMP HAND 1298 HTHEN 1299 EXPRESSION_SIMP 1300 %prec HANDTHEN 1301 | EXPRESSION_SIMP 1302 HEQV EXPRESSION_SIMP 1303 | EXPRESSION_SIMP 1304 HIMP EXPRESSION_SIMP 1305 | EXPRESSION_SIMP 1306 HOR EXPRESSION_SIMP 1307 | EXPRESSION_SIMP 1308 HAND EXPRESSION_SIMP 1309 | HNOT EXPRESSION_SIMP 1310 | EXPRESSION_SIMP 1311 HVALRELOPERATOR 1312 EXPRESSION_SIMP 1313 | EXPRESSION_SIMP 1314 HREFRELOPERATOR 1315 EXPRESSION_SIMP 1316 | EXPRESSION_SIMP 1317 HOBJRELOPERATOR 1318 EXPRESSION_SIMP 1319 | HTERMOPERATOR 1320 EXPRESSION_SIMP %prec UNEAR 1321 | EXPRESSION_SIMP 1322 HTERMOPERATOR 1323 EXPRESSION_SIMP 1324 | EXPRESSION_SIMP 1325 HFACTOROPERATOR 1326 EXPRESSION_SIMP 1327 | EXPRESSION_SIMP 1328 HPRIMARYOPERATOR 1329 EXPRESSION_SIMP 1330 | HBEGPAR 1331 EXPRESSION HENDPAR 1332 | HTEXTKONST 1333 | HCHARACTERKONST 1334 | HREALKONST 1335 | HINTEGERKONST 1336 | HBOOLEANKONST 1337 | HNONE 1338 | HIDENTIFIER 1339 {} 1340 MBEE_ARG_R_PT 1341 | HTHIS HIDENTIFIER 1342 | HNEW 1343 HIDENTIFIER 1344 ARG_R_PT 1345 | EXPRESSION_SIMP 1346 HDOT 1347 EXPRESSION_SIMP 1348 | EXPRESSION_SIMP 1349 HQUA HIDENTIFIER 1350 ; 1351 ARG_R_PT : /*EMPTY*/ 1352 | HBEGPAR 1353 ARGUMENT_LIST HENDPAR 1354 ; 1355 MBEE_ARG_R_PT : /*EMPTY*/ 1356 | HBEGPAR 1357 ARGUMENT_LIST HENDPAR 1358 ; 1359 ARGUMENT_LIST : EXPRESSION 1360 | EXPRESSION 1361 HPAREXPSEPARATOR 1362 ARGUMENT_LIST 1363 ; 1364 ]], 1365 1366 dnl INPUT 1367 [[]], 1368 1369 dnl BISON-STDERR 1370 [AT_COND_CASE([[canonical LR]], 1371 [[input.y: conflicts: 1876 shift/reduce, 144 reduce/reduce]], 1372 [[input.y: conflicts: 78 shift/reduce, 10 reduce/reduce]])[ 1373 ]], 1374 1375 dnl LAST-STATE 1376 [AT_COND_CASE([[canonical LR]], [[10425]], [[442]])], 1377 1378 dnl LALR1-DIFF not used for canonical LR(1) because the diff is huge. 1379 [], 1380 1381 dnl OTHER-CHECKS 1382 [AT_COND_CASE([[canonical LR]], [[]], 1383 [AT_CHECK([[grep '^State.*conflicts:' input.output]], [[0]], 1384 [[State 64 conflicts: 14 shift/reduce 1385 State 164 conflicts: 1 shift/reduce 1386 State 201 conflicts: 33 shift/reduce, 4 reduce/reduce 1387 State 206 conflicts: 1 shift/reduce 1388 State 240 conflicts: 1 shift/reduce 1389 State 335 conflicts: 9 shift/reduce, 2 reduce/reduce 1390 State 356 conflicts: 1 shift/reduce 1391 State 360 conflicts: 9 shift/reduce, 2 reduce/reduce 1392 State 427 conflicts: 9 shift/reduce, 2 reduce/reduce 1393 ]])])]) 1394 1395 ## -------------------------------- ## 1396 ## GNU pic (Groff 1.18.1) Grammar. ## 1397 ## -------------------------------- ## 1398 1399 # GNU pic, part of groff. 1400 1401 # Bison once reported shift/reduce conflicts that it shouldn't have. 1402 1403 AT_TEST_EXISTING_GRAMMAR([[GNU pic (Groff 1.18.1) Grammar]], 1404 [[%error-verbose 1405 1406 %token LABEL 1407 %token VARIABLE 1408 %token NUMBER 1409 %token TEXT 1410 %token COMMAND_LINE 1411 %token DELIMITED 1412 %token ORDINAL 1413 %token TH 1414 %token LEFT_ARROW_HEAD 1415 %token RIGHT_ARROW_HEAD 1416 %token DOUBLE_ARROW_HEAD 1417 %token LAST 1418 %token UP 1419 %token DOWN 1420 %token LEFT 1421 %token RIGHT 1422 %token BOX 1423 %token CIRCLE 1424 %token ELLIPSE 1425 %token ARC 1426 %token LINE 1427 %token ARROW 1428 %token MOVE 1429 %token SPLINE 1430 %token HEIGHT 1431 %token RADIUS 1432 %token WIDTH 1433 %token DIAMETER 1434 %token FROM 1435 %token TO 1436 %token AT 1437 %token WITH 1438 %token BY 1439 %token THEN 1440 %token SOLID 1441 %token DOTTED 1442 %token DASHED 1443 %token CHOP 1444 %token SAME 1445 %token INVISIBLE 1446 %token LJUST 1447 %token RJUST 1448 %token ABOVE 1449 %token BELOW 1450 %token OF 1451 %token THE 1452 %token WAY 1453 %token BETWEEN 1454 %token AND 1455 %token HERE 1456 %token DOT_N 1457 %token DOT_E 1458 %token DOT_W 1459 %token DOT_S 1460 %token DOT_NE 1461 %token DOT_SE 1462 %token DOT_NW 1463 %token DOT_SW 1464 %token DOT_C 1465 %token DOT_START 1466 %token DOT_END 1467 %token DOT_X 1468 %token DOT_Y 1469 %token DOT_HT 1470 %token DOT_WID 1471 %token DOT_RAD 1472 %token SIN 1473 %token COS 1474 %token ATAN2 1475 %token LOG 1476 %token EXP 1477 %token SQRT 1478 %token K_MAX 1479 %token K_MIN 1480 %token INT 1481 %token RAND 1482 %token SRAND 1483 %token COPY 1484 %token THROUGH 1485 %token TOP 1486 %token BOTTOM 1487 %token UPPER 1488 %token LOWER 1489 %token SH 1490 %token PRINT 1491 %token CW 1492 %token CCW 1493 %token FOR 1494 %token DO 1495 %token IF 1496 %token ELSE 1497 %token ANDAND 1498 %token OROR 1499 %token NOTEQUAL 1500 %token EQUALEQUAL 1501 %token LESSEQUAL 1502 %token GREATEREQUAL 1503 %token LEFT_CORNER 1504 %token RIGHT_CORNER 1505 %token NORTH 1506 %token SOUTH 1507 %token EAST 1508 %token WEST 1509 %token CENTER 1510 %token END 1511 %token START 1512 %token RESET 1513 %token UNTIL 1514 %token PLOT 1515 %token THICKNESS 1516 %token FILL 1517 %token COLORED 1518 %token OUTLINED 1519 %token SHADED 1520 %token ALIGNED 1521 %token SPRINTF 1522 %token COMMAND 1523 1524 %left '.' 1525 1526 /* this ensures that plot 17 "%g" parses as (plot 17 "%g") */ 1527 %left PLOT 1528 %left TEXT SPRINTF 1529 1530 /* give text adjustments higher precedence than TEXT, so that 1531 box "foo" above ljust == box ("foo" above ljust) 1532 */ 1533 1534 %left LJUST RJUST ABOVE BELOW 1535 1536 %left LEFT RIGHT 1537 /* Give attributes that take an optional expression a higher 1538 precedence than left and right, so that eg `line chop left' 1539 parses properly. */ 1540 %left CHOP SOLID DASHED DOTTED UP DOWN FILL COLORED OUTLINED 1541 %left LABEL 1542 1543 %left VARIABLE NUMBER '(' SIN COS ATAN2 LOG EXP SQRT K_MAX K_MIN INT RAND SRAND LAST 1544 %left ORDINAL HERE '`' 1545 1546 %left BOX CIRCLE ELLIPSE ARC LINE ARROW SPLINE '[' /* ] */ 1547 1548 /* these need to be lower than '-' */ 1549 %left HEIGHT RADIUS WIDTH DIAMETER FROM TO AT THICKNESS 1550 1551 /* these must have higher precedence than CHOP so that `label %prec CHOP' 1552 works */ 1553 %left DOT_N DOT_E DOT_W DOT_S DOT_NE DOT_SE DOT_NW DOT_SW DOT_C 1554 %left DOT_START DOT_END TOP BOTTOM LEFT_CORNER RIGHT_CORNER 1555 %left UPPER LOWER NORTH SOUTH EAST WEST CENTER START END 1556 1557 %left ',' 1558 %left OROR 1559 %left ANDAND 1560 %left EQUALEQUAL NOTEQUAL 1561 %left '<' '>' LESSEQUAL GREATEREQUAL 1562 1563 %left BETWEEN OF 1564 %left AND 1565 1566 %left '+' '-' 1567 %left '*' '/' '%' 1568 %right '!' 1569 %right '^' 1570 ]], 1571 [[ 1572 top: 1573 optional_separator 1574 | element_list 1575 ; 1576 1577 element_list: 1578 optional_separator middle_element_list optional_separator 1579 ; 1580 1581 middle_element_list: 1582 element 1583 | middle_element_list separator element 1584 ; 1585 1586 optional_separator: 1587 /* empty */ 1588 | separator 1589 ; 1590 1591 separator: 1592 ';' 1593 | separator ';' 1594 ; 1595 1596 placeless_element: 1597 VARIABLE '=' any_expr 1598 | VARIABLE ':' '=' any_expr 1599 | UP 1600 | DOWN 1601 | LEFT 1602 | RIGHT 1603 | COMMAND_LINE 1604 | COMMAND print_args 1605 | PRINT print_args 1606 | SH 1607 {} 1608 DELIMITED 1609 | COPY TEXT 1610 | COPY TEXT THROUGH 1611 {} 1612 DELIMITED 1613 {} 1614 until 1615 | COPY THROUGH 1616 {} 1617 DELIMITED 1618 {} 1619 until 1620 | FOR VARIABLE '=' expr TO expr optional_by DO 1621 {} 1622 DELIMITED 1623 | simple_if 1624 | simple_if ELSE 1625 {} 1626 DELIMITED 1627 | reset_variables 1628 | RESET 1629 ; 1630 1631 reset_variables: 1632 RESET VARIABLE 1633 | reset_variables VARIABLE 1634 | reset_variables ',' VARIABLE 1635 ; 1636 1637 print_args: 1638 print_arg 1639 | print_args print_arg 1640 ; 1641 1642 print_arg: 1643 expr %prec ',' 1644 | text 1645 | position %prec ',' 1646 ; 1647 1648 simple_if: 1649 IF any_expr THEN 1650 {} 1651 DELIMITED 1652 ; 1653 1654 until: 1655 /* empty */ 1656 | UNTIL TEXT 1657 ; 1658 1659 any_expr: 1660 expr 1661 | text_expr 1662 ; 1663 1664 text_expr: 1665 text EQUALEQUAL text 1666 | text NOTEQUAL text 1667 | text_expr ANDAND text_expr 1668 | text_expr ANDAND expr 1669 | expr ANDAND text_expr 1670 | text_expr OROR text_expr 1671 | text_expr OROR expr 1672 | expr OROR text_expr 1673 | '!' text_expr 1674 ; 1675 1676 optional_by: 1677 /* empty */ 1678 | BY expr 1679 | BY '*' expr 1680 ; 1681 1682 element: 1683 object_spec 1684 | LABEL ':' optional_separator element 1685 | LABEL ':' optional_separator position_not_place 1686 | LABEL ':' optional_separator place 1687 | '{' {} element_list '}' 1688 {} 1689 optional_element 1690 | placeless_element 1691 ; 1692 1693 optional_element: 1694 /* empty */ 1695 | element 1696 ; 1697 1698 object_spec: 1699 BOX 1700 | CIRCLE 1701 | ELLIPSE 1702 | ARC 1703 | LINE 1704 | ARROW 1705 | MOVE 1706 | SPLINE 1707 | text %prec TEXT 1708 | PLOT expr 1709 | PLOT expr text 1710 | '[' 1711 {} 1712 element_list ']' 1713 | object_spec HEIGHT expr 1714 | object_spec RADIUS expr 1715 | object_spec WIDTH expr 1716 | object_spec DIAMETER expr 1717 | object_spec expr %prec HEIGHT 1718 | object_spec UP 1719 | object_spec UP expr 1720 | object_spec DOWN 1721 | object_spec DOWN expr 1722 | object_spec RIGHT 1723 | object_spec RIGHT expr 1724 | object_spec LEFT 1725 | object_spec LEFT expr 1726 | object_spec FROM position 1727 | object_spec TO position 1728 | object_spec AT position 1729 | object_spec WITH path 1730 | object_spec WITH position %prec ',' 1731 | object_spec BY expr_pair 1732 | object_spec THEN 1733 | object_spec SOLID 1734 | object_spec DOTTED 1735 | object_spec DOTTED expr 1736 | object_spec DASHED 1737 | object_spec DASHED expr 1738 | object_spec FILL 1739 | object_spec FILL expr 1740 | object_spec SHADED text 1741 | object_spec COLORED text 1742 | object_spec OUTLINED text 1743 | object_spec CHOP 1744 | object_spec CHOP expr 1745 | object_spec SAME 1746 | object_spec INVISIBLE 1747 | object_spec LEFT_ARROW_HEAD 1748 | object_spec RIGHT_ARROW_HEAD 1749 | object_spec DOUBLE_ARROW_HEAD 1750 | object_spec CW 1751 | object_spec CCW 1752 | object_spec text %prec TEXT 1753 | object_spec LJUST 1754 | object_spec RJUST 1755 | object_spec ABOVE 1756 | object_spec BELOW 1757 | object_spec THICKNESS expr 1758 | object_spec ALIGNED 1759 ; 1760 1761 text: 1762 TEXT 1763 | SPRINTF '(' TEXT sprintf_args ')' 1764 ; 1765 1766 sprintf_args: 1767 /* empty */ 1768 | sprintf_args ',' expr 1769 ; 1770 1771 position: 1772 position_not_place 1773 | place 1774 ; 1775 1776 position_not_place: 1777 expr_pair 1778 | position '+' expr_pair 1779 | position '-' expr_pair 1780 | '(' position ',' position ')' 1781 | expr between position AND position 1782 | expr '<' position ',' position '>' 1783 ; 1784 1785 between: 1786 BETWEEN 1787 | OF THE WAY BETWEEN 1788 ; 1789 1790 expr_pair: 1791 expr ',' expr 1792 | '(' expr_pair ')' 1793 ; 1794 1795 place: 1796 /* line at A left == line (at A) left */ 1797 label %prec CHOP 1798 | label corner 1799 | corner label 1800 | corner OF label 1801 | HERE 1802 ; 1803 1804 label: 1805 LABEL 1806 | nth_primitive 1807 | label '.' LABEL 1808 ; 1809 1810 ordinal: 1811 ORDINAL 1812 | '`' any_expr TH 1813 ; 1814 1815 optional_ordinal_last: 1816 LAST 1817 | ordinal LAST 1818 ; 1819 1820 nth_primitive: 1821 ordinal object_type 1822 | optional_ordinal_last object_type 1823 ; 1824 1825 object_type: 1826 BOX 1827 | CIRCLE 1828 | ELLIPSE 1829 | ARC 1830 | LINE 1831 | ARROW 1832 | SPLINE 1833 | '[' ']' 1834 | TEXT 1835 ; 1836 1837 label_path: 1838 '.' LABEL 1839 | label_path '.' LABEL 1840 ; 1841 1842 relative_path: 1843 corner %prec CHOP 1844 /* give this a lower precedence than LEFT and RIGHT so that 1845 [A: box] with .A left == [A: box] with (.A left) */ 1846 | label_path %prec TEXT 1847 | label_path corner 1848 ; 1849 1850 path: 1851 relative_path 1852 | '(' relative_path ',' relative_path ')' 1853 {} 1854 /* The rest of these rules are a compatibility sop. */ 1855 | ORDINAL LAST object_type relative_path 1856 | LAST object_type relative_path 1857 | ORDINAL object_type relative_path 1858 | LABEL relative_path 1859 ; 1860 1861 corner: 1862 DOT_N 1863 | DOT_E 1864 | DOT_W 1865 | DOT_S 1866 | DOT_NE 1867 | DOT_SE 1868 | DOT_NW 1869 | DOT_SW 1870 | DOT_C 1871 | DOT_START 1872 | DOT_END 1873 | TOP 1874 | BOTTOM 1875 | LEFT 1876 | RIGHT 1877 | UPPER LEFT 1878 | LOWER LEFT 1879 | UPPER RIGHT 1880 | LOWER RIGHT 1881 | LEFT_CORNER 1882 | RIGHT_CORNER 1883 | UPPER LEFT_CORNER 1884 | LOWER LEFT_CORNER 1885 | UPPER RIGHT_CORNER 1886 | LOWER RIGHT_CORNER 1887 | NORTH 1888 | SOUTH 1889 | EAST 1890 | WEST 1891 | CENTER 1892 | START 1893 | END 1894 ; 1895 1896 expr: 1897 VARIABLE 1898 | NUMBER 1899 | place DOT_X 1900 | place DOT_Y 1901 | place DOT_HT 1902 | place DOT_WID 1903 | place DOT_RAD 1904 | expr '+' expr 1905 | expr '-' expr 1906 | expr '*' expr 1907 | expr '/' expr 1908 | expr '%' expr 1909 | expr '^' expr 1910 | '-' expr %prec '!' 1911 | '(' any_expr ')' 1912 | SIN '(' any_expr ')' 1913 | COS '(' any_expr ')' 1914 | ATAN2 '(' any_expr ',' any_expr ')' 1915 | LOG '(' any_expr ')' 1916 | EXP '(' any_expr ')' 1917 | SQRT '(' any_expr ')' 1918 | K_MAX '(' any_expr ',' any_expr ')' 1919 | K_MIN '(' any_expr ',' any_expr ')' 1920 | INT '(' any_expr ')' 1921 | RAND '(' any_expr ')' 1922 | RAND '(' ')' 1923 | SRAND '(' any_expr ')' 1924 | expr '<' expr 1925 | expr LESSEQUAL expr 1926 | expr '>' expr 1927 | expr GREATEREQUAL expr 1928 | expr EQUALEQUAL expr 1929 | expr NOTEQUAL expr 1930 | expr ANDAND expr 1931 | expr OROR expr 1932 | '!' expr 1933 ; 1934 ]], 1935 1936 dnl INPUT 1937 dnl 1938 dnl For example, in pic: 1939 dnl 1940 dnl .PS 1941 dnl A: circle "A" 1942 dnl B: A left 1943 dnl circle "B" at B 1944 dnl .PE 1945 dnl 1946 dnl Even using groff 1.19.2, the 3rd line above is a syntax error. Change 1947 dnl "left" to "right", and it still is. However, add "upper" or "lower" before 1948 dnl "left or "right" and it's accepted to mean ".nw", ".ne", ".sw", or ".se". 1949 dnl (There seem to be no aliases for "north" and "south" that can stand alone 1950 dnl without being followed by "of".) 1951 [[VARIABLE, '=', LABEL, LEFT, DOT_X]], 1952 1953 dnl BISON-STDERR 1954 [[input.y:470.11-48: warning: rule useless in parser due to conflicts: path: ORDINAL LAST object_type relative_path 1955 ]], 1956 1957 dnl LAST-STATE 1958 [AT_COND_CASE([[LALR]], [[422]], [[canonical LR]], [[4833]], [[427]])], 1959 1960 dnl LALR1-DIFF not used for canonical LR(1) because the diff is huge. 1961 dnl Isocore map from LALR(1) state number to new state number plus descriptions 1962 dnl of any change in the actions resulting in a change in accepted language: 1963 dnl - 102 -> 423: reduce -> shift on LEFT and RIGHT 1964 dnl - 237 -> 425 1965 dnl - 266 -> 424 1966 dnl - 339 -> 426 1967 dnl - 383 -> 427 1968 [AT_COND_CASE([[LALR]], [], 1969 [[@@ -1223,7 +1223,7 @@ 1970 text_expr go to state 112 1971 text go to state 113 1972 place go to state 114 1973 - label go to state 102 1974 + label go to state 423 1975 ordinal go to state 103 1976 optional_ordinal_last go to state 104 1977 nth_primitive go to state 105 1978 @@ -1377,7 +1377,7 @@ 1979 '!' shift, and go to state 94 1980 1981 place go to state 114 1982 - label go to state 102 1983 + label go to state 423 1984 ordinal go to state 103 1985 optional_ordinal_last go to state 104 1986 nth_primitive go to state 105 1987 @@ -1854,7 +1854,7 @@ 1988 1989 text go to state 162 1990 place go to state 114 1991 - label go to state 102 1992 + label go to state 423 1993 ordinal go to state 103 1994 optional_ordinal_last go to state 104 1995 nth_primitive go to state 105 1996 @@ -2047,7 +2047,7 @@ 1997 text_expr go to state 112 1998 text go to state 113 1999 place go to state 114 2000 - label go to state 102 2001 + label go to state 423 2002 ordinal go to state 103 2003 optional_ordinal_last go to state 104 2004 nth_primitive go to state 105 2005 @@ -2571,7 +2571,7 @@ 2006 position_not_place go to state 99 2007 expr_pair go to state 191 2008 place go to state 101 2009 - label go to state 102 2010 + label go to state 423 2011 ordinal go to state 103 2012 optional_ordinal_last go to state 104 2013 nth_primitive go to state 105 2014 @@ -2732,7 +2732,7 @@ 2015 text_expr go to state 112 2016 text go to state 113 2017 place go to state 114 2018 - label go to state 102 2019 + label go to state 423 2020 ordinal go to state 103 2021 optional_ordinal_last go to state 104 2022 nth_primitive go to state 105 2023 @@ -2875,7 +2875,7 @@ 2024 '!' shift, and go to state 94 2025 2026 place go to state 114 2027 - label go to state 102 2028 + label go to state 423 2029 ordinal go to state 103 2030 optional_ordinal_last go to state 104 2031 nth_primitive go to state 105 2032 @@ -3018,7 +3018,7 @@ 2033 '!' shift, and go to state 94 2034 2035 place go to state 114 2036 - label go to state 102 2037 + label go to state 423 2038 ordinal go to state 103 2039 optional_ordinal_last go to state 104 2040 nth_primitive go to state 105 2041 @@ -3256,7 +3256,7 @@ 2042 2043 State 102 2044 2045 - 146 place: label . [$end, LABEL, VARIABLE, NUMBER, TEXT, ORDINAL, LEFT_ARROW_HEAD, RIGHT_ARROW_HEAD, DOUBLE_ARROW_HEAD, LAST, UP, DOWN, LEFT, RIGHT, HEIGHT, RADIUS, WIDTH, DIAMETER, FROM, TO, AT, WITH, BY, THEN, SOLID, DOTTED, DASHED, CHOP, SAME, INVISIBLE, LJUST, RJUST, ABOVE, BELOW, AND, HERE, DOT_X, DOT_Y, DOT_HT, DOT_WID, DOT_RAD, SIN, COS, ATAN2, LOG, EXP, SQRT, K_MAX, K_MIN, INT, RAND, SRAND, CW, CCW, THICKNESS, FILL, COLORED, OUTLINED, SHADED, ALIGNED, SPRINTF, '(', '`', ',', '>', '+', '-', '!', ';', '}', '@:>@', ')'] 2046 + 146 place: label . [$end, LABEL, VARIABLE, NUMBER, TEXT, ORDINAL, LEFT_ARROW_HEAD, RIGHT_ARROW_HEAD, DOUBLE_ARROW_HEAD, LAST, UP, DOWN, LEFT, RIGHT, HEIGHT, RADIUS, WIDTH, DIAMETER, FROM, TO, AT, WITH, BY, THEN, SOLID, DOTTED, DASHED, CHOP, SAME, INVISIBLE, LJUST, RJUST, ABOVE, BELOW, HERE, DOT_X, DOT_Y, DOT_HT, DOT_WID, DOT_RAD, SIN, COS, ATAN2, LOG, EXP, SQRT, K_MAX, K_MIN, INT, RAND, SRAND, CW, CCW, THICKNESS, FILL, COLORED, OUTLINED, SHADED, ALIGNED, SPRINTF, '(', '`', '+', '-', '!', ';', '}', '@:>@'] 2047 147 | label . corner 2048 153 label: label . '.' LABEL 2049 180 corner: . DOT_N 2050 @@ -3645,7 +3645,7 @@ 2051 text_expr go to state 112 2052 text go to state 113 2053 place go to state 114 2054 - label go to state 102 2055 + label go to state 423 2056 ordinal go to state 103 2057 optional_ordinal_last go to state 104 2058 nth_primitive go to state 105 2059 @@ -3804,7 +3804,7 @@ 2060 text_expr go to state 239 2061 text go to state 113 2062 place go to state 114 2063 - label go to state 102 2064 + label go to state 423 2065 ordinal go to state 103 2066 optional_ordinal_last go to state 104 2067 nth_primitive go to state 105 2068 @@ -4481,7 +4481,7 @@ 2069 $default reduce using rule 89 (object_spec) 2070 2071 place go to state 114 2072 - label go to state 102 2073 + label go to state 423 2074 ordinal go to state 103 2075 optional_ordinal_last go to state 104 2076 nth_primitive go to state 105 2077 @@ -4673,7 +4673,7 @@ 2078 $default reduce using rule 91 (object_spec) 2079 2080 place go to state 114 2081 - label go to state 102 2082 + label go to state 423 2083 ordinal go to state 103 2084 optional_ordinal_last go to state 104 2085 nth_primitive go to state 105 2086 @@ -4867,7 +4867,7 @@ 2087 $default reduce using rule 95 (object_spec) 2088 2089 place go to state 114 2090 - label go to state 102 2091 + label go to state 423 2092 ordinal go to state 103 2093 optional_ordinal_last go to state 104 2094 nth_primitive go to state 105 2095 @@ -5065,7 +5065,7 @@ 2096 $default reduce using rule 93 (object_spec) 2097 2098 place go to state 114 2099 - label go to state 102 2100 + label go to state 423 2101 ordinal go to state 103 2102 optional_ordinal_last go to state 104 2103 nth_primitive go to state 105 2104 @@ -5260,7 +5260,7 @@ 2105 '!' shift, and go to state 94 2106 2107 place go to state 114 2108 - label go to state 102 2109 + label go to state 423 2110 ordinal go to state 103 2111 optional_ordinal_last go to state 104 2112 nth_primitive go to state 105 2113 @@ -5403,7 +5403,7 @@ 2114 '!' shift, and go to state 94 2115 2116 place go to state 114 2117 - label go to state 102 2118 + label go to state 423 2119 ordinal go to state 103 2120 optional_ordinal_last go to state 104 2121 nth_primitive go to state 105 2122 @@ -5546,7 +5546,7 @@ 2123 '!' shift, and go to state 94 2124 2125 place go to state 114 2126 - label go to state 102 2127 + label go to state 423 2128 ordinal go to state 103 2129 optional_ordinal_last go to state 104 2130 nth_primitive go to state 105 2131 @@ -5689,7 +5689,7 @@ 2132 '!' shift, and go to state 94 2133 2134 place go to state 114 2135 - label go to state 102 2136 + label go to state 423 2137 ordinal go to state 103 2138 optional_ordinal_last go to state 104 2139 nth_primitive go to state 105 2140 @@ -6475,7 +6475,7 @@ 2141 2142 expr_pair go to state 280 2143 place go to state 114 2144 - label go to state 102 2145 + label go to state 423 2146 ordinal go to state 103 2147 optional_ordinal_last go to state 104 2148 nth_primitive go to state 105 2149 @@ -6633,7 +6633,7 @@ 2150 $default reduce using rule 105 (object_spec) 2151 2152 place go to state 114 2153 - label go to state 102 2154 + label go to state 423 2155 ordinal go to state 103 2156 optional_ordinal_last go to state 104 2157 nth_primitive go to state 105 2158 @@ -6825,7 +6825,7 @@ 2159 $default reduce using rule 107 (object_spec) 2160 2161 place go to state 114 2162 - label go to state 102 2163 + label go to state 423 2164 ordinal go to state 103 2165 optional_ordinal_last go to state 104 2166 nth_primitive go to state 105 2167 @@ -7017,7 +7017,7 @@ 2168 $default reduce using rule 114 (object_spec) 2169 2170 place go to state 114 2171 - label go to state 102 2172 + label go to state 423 2173 ordinal go to state 103 2174 optional_ordinal_last go to state 104 2175 nth_primitive go to state 105 2176 @@ -7264,7 +7264,7 @@ 2177 '!' shift, and go to state 94 2178 2179 place go to state 114 2180 - label go to state 102 2181 + label go to state 423 2182 ordinal go to state 103 2183 optional_ordinal_last go to state 104 2184 nth_primitive go to state 105 2185 @@ -7408,7 +7408,7 @@ 2186 $default reduce using rule 109 (object_spec) 2187 2188 place go to state 114 2189 - label go to state 102 2190 + label go to state 423 2191 ordinal go to state 103 2192 optional_ordinal_last go to state 104 2193 nth_primitive go to state 105 2194 @@ -7819,12 +7819,12 @@ 2195 position_not_place go to state 296 2196 expr_pair go to state 100 2197 place go to state 297 2198 - label go to state 102 2199 + label go to state 423 2200 ordinal go to state 103 2201 optional_ordinal_last go to state 104 2202 nth_primitive go to state 105 2203 corner go to state 106 2204 - expr go to state 266 2205 + expr go to state 424 2206 2207 2208 State 165 2209 @@ -7987,7 +7987,7 @@ 2210 text_expr go to state 112 2211 text go to state 113 2212 place go to state 114 2213 - label go to state 102 2214 + label go to state 423 2215 ordinal go to state 103 2216 optional_ordinal_last go to state 104 2217 nth_primitive go to state 105 2218 @@ -8172,7 +8172,7 @@ 2219 text_expr go to state 112 2220 text go to state 113 2221 place go to state 114 2222 - label go to state 102 2223 + label go to state 423 2224 ordinal go to state 103 2225 optional_ordinal_last go to state 104 2226 nth_primitive go to state 105 2227 @@ -8333,7 +8333,7 @@ 2228 text_expr go to state 112 2229 text go to state 113 2230 place go to state 114 2231 - label go to state 102 2232 + label go to state 423 2233 ordinal go to state 103 2234 optional_ordinal_last go to state 104 2235 nth_primitive go to state 105 2236 @@ -8494,7 +8494,7 @@ 2237 text_expr go to state 112 2238 text go to state 113 2239 place go to state 114 2240 - label go to state 102 2241 + label go to state 423 2242 ordinal go to state 103 2243 optional_ordinal_last go to state 104 2244 nth_primitive go to state 105 2245 @@ -8655,7 +8655,7 @@ 2246 text_expr go to state 112 2247 text go to state 113 2248 place go to state 114 2249 - label go to state 102 2250 + label go to state 423 2251 ordinal go to state 103 2252 optional_ordinal_last go to state 104 2253 nth_primitive go to state 105 2254 @@ -8816,7 +8816,7 @@ 2255 text_expr go to state 112 2256 text go to state 113 2257 place go to state 114 2258 - label go to state 102 2259 + label go to state 423 2260 ordinal go to state 103 2261 optional_ordinal_last go to state 104 2262 nth_primitive go to state 105 2263 @@ -8977,7 +8977,7 @@ 2264 text_expr go to state 112 2265 text go to state 113 2266 place go to state 114 2267 - label go to state 102 2268 + label go to state 423 2269 ordinal go to state 103 2270 optional_ordinal_last go to state 104 2271 nth_primitive go to state 105 2272 @@ -9138,7 +9138,7 @@ 2273 text_expr go to state 112 2274 text go to state 113 2275 place go to state 114 2276 - label go to state 102 2277 + label go to state 423 2278 ordinal go to state 103 2279 optional_ordinal_last go to state 104 2280 nth_primitive go to state 105 2281 @@ -9299,7 +9299,7 @@ 2282 text_expr go to state 112 2283 text go to state 113 2284 place go to state 114 2285 - label go to state 102 2286 + label go to state 423 2287 ordinal go to state 103 2288 optional_ordinal_last go to state 104 2289 nth_primitive go to state 105 2290 @@ -9460,7 +9460,7 @@ 2291 text_expr go to state 112 2292 text go to state 113 2293 place go to state 114 2294 - label go to state 102 2295 + label go to state 423 2296 ordinal go to state 103 2297 optional_ordinal_last go to state 104 2298 nth_primitive go to state 105 2299 @@ -9623,7 +9623,7 @@ 2300 text_expr go to state 112 2301 text go to state 113 2302 place go to state 114 2303 - label go to state 102 2304 + label go to state 423 2305 ordinal go to state 103 2306 optional_ordinal_last go to state 104 2307 nth_primitive go to state 105 2308 @@ -9784,7 +9784,7 @@ 2309 text_expr go to state 112 2310 text go to state 113 2311 place go to state 114 2312 - label go to state 102 2313 + label go to state 423 2314 ordinal go to state 103 2315 optional_ordinal_last go to state 104 2316 nth_primitive go to state 105 2317 @@ -9921,7 +9921,7 @@ 2318 2319 $default reduce using rule 47 (any_expr) 2320 2321 - between go to state 237 2322 + between go to state 425 2323 2324 2325 State 193 2326 @@ -10152,7 +10152,7 @@ 2327 2328 expr_pair go to state 317 2329 place go to state 114 2330 - label go to state 102 2331 + label go to state 423 2332 ordinal go to state 103 2333 optional_ordinal_last go to state 104 2334 nth_primitive go to state 105 2335 @@ -10298,7 +10298,7 @@ 2336 2337 expr_pair go to state 318 2338 place go to state 114 2339 - label go to state 102 2340 + label go to state 423 2341 ordinal go to state 103 2342 optional_ordinal_last go to state 104 2343 nth_primitive go to state 105 2344 @@ -10622,7 +10622,7 @@ 2345 '!' shift, and go to state 94 2346 2347 place go to state 114 2348 - label go to state 102 2349 + label go to state 423 2350 ordinal go to state 103 2351 optional_ordinal_last go to state 104 2352 nth_primitive go to state 105 2353 @@ -10765,7 +10765,7 @@ 2354 '!' shift, and go to state 94 2355 2356 place go to state 114 2357 - label go to state 102 2358 + label go to state 423 2359 ordinal go to state 103 2360 optional_ordinal_last go to state 104 2361 nth_primitive go to state 105 2362 @@ -10908,7 +10908,7 @@ 2363 '!' shift, and go to state 94 2364 2365 place go to state 114 2366 - label go to state 102 2367 + label go to state 423 2368 ordinal go to state 103 2369 optional_ordinal_last go to state 104 2370 nth_primitive go to state 105 2371 @@ -11051,7 +11051,7 @@ 2372 '!' shift, and go to state 94 2373 2374 place go to state 114 2375 - label go to state 102 2376 + label go to state 423 2377 ordinal go to state 103 2378 optional_ordinal_last go to state 104 2379 nth_primitive go to state 105 2380 @@ -11194,7 +11194,7 @@ 2381 '!' shift, and go to state 94 2382 2383 place go to state 114 2384 - label go to state 102 2385 + label go to state 423 2386 ordinal go to state 103 2387 optional_ordinal_last go to state 104 2388 nth_primitive go to state 105 2389 @@ -11337,7 +11337,7 @@ 2390 '!' shift, and go to state 94 2391 2392 place go to state 114 2393 - label go to state 102 2394 + label go to state 423 2395 ordinal go to state 103 2396 optional_ordinal_last go to state 104 2397 nth_primitive go to state 105 2398 @@ -11480,7 +11480,7 @@ 2399 '!' shift, and go to state 94 2400 2401 place go to state 114 2402 - label go to state 102 2403 + label go to state 423 2404 ordinal go to state 103 2405 optional_ordinal_last go to state 104 2406 nth_primitive go to state 105 2407 @@ -11637,7 +11637,7 @@ 2408 position_not_place go to state 99 2409 expr_pair go to state 100 2410 place go to state 101 2411 - label go to state 102 2412 + label go to state 423 2413 ordinal go to state 103 2414 optional_ordinal_last go to state 104 2415 nth_primitive go to state 105 2416 @@ -11780,7 +11780,7 @@ 2417 '!' shift, and go to state 94 2418 2419 place go to state 114 2420 - label go to state 102 2421 + label go to state 423 2422 ordinal go to state 103 2423 optional_ordinal_last go to state 104 2424 nth_primitive go to state 105 2425 @@ -11923,7 +11923,7 @@ 2426 '!' shift, and go to state 94 2427 2428 place go to state 114 2429 - label go to state 102 2430 + label go to state 423 2431 ordinal go to state 103 2432 optional_ordinal_last go to state 104 2433 nth_primitive go to state 105 2434 @@ -12066,7 +12066,7 @@ 2435 '!' shift, and go to state 94 2436 2437 place go to state 114 2438 - label go to state 102 2439 + label go to state 423 2440 ordinal go to state 103 2441 optional_ordinal_last go to state 104 2442 nth_primitive go to state 105 2443 @@ -12209,7 +12209,7 @@ 2444 '!' shift, and go to state 94 2445 2446 place go to state 114 2447 - label go to state 102 2448 + label go to state 423 2449 ordinal go to state 103 2450 optional_ordinal_last go to state 104 2451 nth_primitive go to state 105 2452 @@ -12352,7 +12352,7 @@ 2453 '!' shift, and go to state 94 2454 2455 place go to state 114 2456 - label go to state 102 2457 + label go to state 423 2458 ordinal go to state 103 2459 optional_ordinal_last go to state 104 2460 nth_primitive go to state 105 2461 @@ -12495,7 +12495,7 @@ 2462 '!' shift, and go to state 94 2463 2464 place go to state 114 2465 - label go to state 102 2466 + label go to state 423 2467 ordinal go to state 103 2468 optional_ordinal_last go to state 104 2469 nth_primitive go to state 105 2470 @@ -12638,7 +12638,7 @@ 2471 '!' shift, and go to state 94 2472 2473 place go to state 114 2474 - label go to state 102 2475 + label go to state 423 2476 ordinal go to state 103 2477 optional_ordinal_last go to state 104 2478 nth_primitive go to state 105 2479 @@ -12794,12 +12794,12 @@ 2480 position_not_place go to state 99 2481 expr_pair go to state 100 2482 place go to state 101 2483 - label go to state 102 2484 + label go to state 423 2485 ordinal go to state 103 2486 optional_ordinal_last go to state 104 2487 nth_primitive go to state 105 2488 corner go to state 106 2489 - expr go to state 266 2490 + expr go to state 424 2491 2492 2493 State 238 2494 @@ -12937,7 +12937,7 @@ 2495 '!' shift, and go to state 94 2496 2497 place go to state 114 2498 - label go to state 102 2499 + label go to state 423 2500 ordinal go to state 103 2501 optional_ordinal_last go to state 104 2502 nth_primitive go to state 105 2503 @@ -13160,7 +13160,7 @@ 2504 text_expr go to state 342 2505 text go to state 113 2506 place go to state 114 2507 - label go to state 102 2508 + label go to state 423 2509 ordinal go to state 103 2510 optional_ordinal_last go to state 104 2511 nth_primitive go to state 105 2512 @@ -13319,7 +13319,7 @@ 2513 text_expr go to state 344 2514 text go to state 113 2515 place go to state 114 2516 - label go to state 102 2517 + label go to state 423 2518 ordinal go to state 103 2519 optional_ordinal_last go to state 104 2520 nth_primitive go to state 105 2521 @@ -13502,7 +13502,7 @@ 2522 text_expr go to state 348 2523 text go to state 113 2524 place go to state 114 2525 - label go to state 102 2526 + label go to state 423 2527 ordinal go to state 103 2528 optional_ordinal_last go to state 104 2529 nth_primitive go to state 105 2530 @@ -13661,7 +13661,7 @@ 2531 text_expr go to state 350 2532 text go to state 113 2533 place go to state 114 2534 - label go to state 102 2535 + label go to state 423 2536 ordinal go to state 103 2537 optional_ordinal_last go to state 104 2538 nth_primitive go to state 105 2539 @@ -13804,7 +13804,7 @@ 2540 '!' shift, and go to state 94 2541 2542 place go to state 114 2543 - label go to state 102 2544 + label go to state 423 2545 ordinal go to state 103 2546 optional_ordinal_last go to state 104 2547 nth_primitive go to state 105 2548 @@ -14747,7 +14747,7 @@ 2549 position_not_place go to state 99 2550 expr_pair go to state 191 2551 place go to state 101 2552 - label go to state 102 2553 + label go to state 423 2554 ordinal go to state 103 2555 optional_ordinal_last go to state 104 2556 nth_primitive go to state 105 2557 @@ -15074,7 +15074,7 @@ 2558 text go to state 113 2559 expr_pair go to state 365 2560 place go to state 114 2561 - label go to state 102 2562 + label go to state 423 2563 ordinal go to state 103 2564 optional_ordinal_last go to state 104 2565 nth_primitive go to state 105 2566 @@ -15693,12 +15693,12 @@ 2567 position_not_place go to state 99 2568 expr_pair go to state 100 2569 place go to state 101 2570 - label go to state 102 2571 + label go to state 423 2572 ordinal go to state 103 2573 optional_ordinal_last go to state 104 2574 nth_primitive go to state 105 2575 corner go to state 106 2576 - expr go to state 266 2577 + expr go to state 424 2578 2579 2580 State 315 2581 @@ -16124,7 +16124,7 @@ 2582 2583 $default reduce using rule 239 (expr) 2584 2585 - between go to state 237 2586 + between go to state 425 2587 2588 Conflict between rule 239 and token OF resolved as shift ('<' < OF). 2589 Conflict between rule 239 and token BETWEEN resolved as shift ('<' < BETWEEN). 2590 @@ -17234,7 +17234,7 @@ 2591 text_expr go to state 112 2592 text go to state 113 2593 place go to state 114 2594 - label go to state 102 2595 + label go to state 423 2596 ordinal go to state 103 2597 optional_ordinal_last go to state 104 2598 nth_primitive go to state 105 2599 @@ -17416,7 +17416,7 @@ 2600 text_expr go to state 112 2601 text go to state 113 2602 place go to state 114 2603 - label go to state 102 2604 + label go to state 423 2605 ordinal go to state 103 2606 optional_ordinal_last go to state 104 2607 nth_primitive go to state 105 2608 @@ -17577,7 +17577,7 @@ 2609 text_expr go to state 112 2610 text go to state 113 2611 place go to state 114 2612 - label go to state 102 2613 + label go to state 423 2614 ordinal go to state 103 2615 optional_ordinal_last go to state 104 2616 nth_primitive go to state 105 2617 @@ -17772,12 +17772,12 @@ 2618 position_not_place go to state 99 2619 expr_pair go to state 100 2620 place go to state 101 2621 - label go to state 102 2622 + label go to state 423 2623 ordinal go to state 103 2624 optional_ordinal_last go to state 104 2625 nth_primitive go to state 105 2626 corner go to state 106 2627 - expr go to state 266 2628 + expr go to state 424 2629 2630 2631 State 383 2632 @@ -18071,7 +18071,7 @@ 2633 '!' shift, and go to state 94 2634 2635 place go to state 114 2636 - label go to state 102 2637 + label go to state 423 2638 ordinal go to state 103 2639 optional_ordinal_last go to state 104 2640 nth_primitive go to state 105 2641 @@ -18221,7 +18221,7 @@ 2642 '!' shift, and go to state 94 2643 2644 place go to state 114 2645 - label go to state 102 2646 + label go to state 423 2647 ordinal go to state 103 2648 optional_ordinal_last go to state 104 2649 nth_primitive go to state 105 2650 @@ -18830,7 +18830,7 @@ 2651 '!' shift, and go to state 94 2652 2653 place go to state 114 2654 - label go to state 102 2655 + label go to state 423 2656 ordinal go to state 103 2657 optional_ordinal_last go to state 104 2658 nth_primitive go to state 105 2659 @@ -18987,7 +18987,7 @@ 2660 '!' shift, and go to state 94 2661 2662 place go to state 114 2663 - label go to state 102 2664 + label go to state 423 2665 ordinal go to state 103 2666 optional_ordinal_last go to state 104 2667 nth_primitive go to state 105 2668 @@ -19089,3 +19089,440 @@ 2669 29 placeless_element: FOR VARIABLE '=' expr TO expr optional_by DO $@6 DELIMITED . 2670 2671 $default reduce using rule 29 (placeless_element) 2672 + 2673 + 2674 +State 423 2675 + 2676 + 146 place: label . [$end, AND, DOT_X, DOT_Y, DOT_HT, DOT_WID, DOT_RAD, ',', '>', '+', '-', ';', '}', '@:>@', ')'] 2677 + 147 | label . corner 2678 + 153 label: label . '.' LABEL 2679 + 180 corner: . DOT_N 2680 + 181 | . DOT_E 2681 + 182 | . DOT_W 2682 + 183 | . DOT_S 2683 + 184 | . DOT_NE 2684 + 185 | . DOT_SE 2685 + 186 | . DOT_NW 2686 + 187 | . DOT_SW 2687 + 188 | . DOT_C 2688 + 189 | . DOT_START 2689 + 190 | . DOT_END 2690 + 191 | . TOP 2691 + 192 | . BOTTOM 2692 + 193 | . LEFT 2693 + 194 | . RIGHT 2694 + 195 | . UPPER LEFT 2695 + 196 | . LOWER LEFT 2696 + 197 | . UPPER RIGHT 2697 + 198 | . LOWER RIGHT 2698 + 199 | . LEFT_CORNER 2699 + 200 | . RIGHT_CORNER 2700 + 201 | . UPPER LEFT_CORNER 2701 + 202 | . LOWER LEFT_CORNER 2702 + 203 | . UPPER RIGHT_CORNER 2703 + 204 | . LOWER RIGHT_CORNER 2704 + 205 | . NORTH 2705 + 206 | . SOUTH 2706 + 207 | . EAST 2707 + 208 | . WEST 2708 + 209 | . CENTER 2709 + 210 | . START 2710 + 211 | . END 2711 + 2712 + LEFT shift, and go to state 53 2713 + RIGHT shift, and go to state 54 2714 + DOT_N shift, and go to state 56 2715 + DOT_E shift, and go to state 57 2716 + DOT_W shift, and go to state 58 2717 + DOT_S shift, and go to state 59 2718 + DOT_NE shift, and go to state 60 2719 + DOT_SE shift, and go to state 61 2720 + DOT_NW shift, and go to state 62 2721 + DOT_SW shift, and go to state 63 2722 + DOT_C shift, and go to state 64 2723 + DOT_START shift, and go to state 65 2724 + DOT_END shift, and go to state 66 2725 + TOP shift, and go to state 78 2726 + BOTTOM shift, and go to state 79 2727 + UPPER shift, and go to state 80 2728 + LOWER shift, and go to state 81 2729 + LEFT_CORNER shift, and go to state 82 2730 + RIGHT_CORNER shift, and go to state 83 2731 + NORTH shift, and go to state 84 2732 + SOUTH shift, and go to state 85 2733 + EAST shift, and go to state 86 2734 + WEST shift, and go to state 87 2735 + CENTER shift, and go to state 88 2736 + END shift, and go to state 89 2737 + START shift, and go to state 90 2738 + '.' shift, and go to state 204 2739 + 2740 + $default reduce using rule 146 (place) 2741 + 2742 + corner go to state 205 2743 + 2744 + 2745 +State 424 2746 + 2747 + 140 position_not_place: expr . between position AND position 2748 + 141 | expr . '<' position ',' position '>' 2749 + 142 between: . BETWEEN 2750 + 143 | . OF THE WAY BETWEEN 2751 + 144 expr_pair: expr . ',' expr 2752 + 219 expr: expr . '+' expr 2753 + 220 | expr . '-' expr 2754 + 221 | expr . '*' expr 2755 + 222 | expr . '/' expr 2756 + 223 | expr . '%' expr 2757 + 224 | expr . '^' expr 2758 + 239 | expr . '<' expr 2759 + 240 | expr . LESSEQUAL expr 2760 + 241 | expr . '>' expr 2761 + 242 | expr . GREATEREQUAL expr 2762 + 243 | expr . EQUALEQUAL expr 2763 + 244 | expr . NOTEQUAL expr 2764 + 245 | expr . ANDAND expr 2765 + 246 | expr . OROR expr 2766 + 2767 + OF shift, and go to state 220 2768 + BETWEEN shift, and go to state 221 2769 + ANDAND shift, and go to state 222 2770 + OROR shift, and go to state 223 2771 + NOTEQUAL shift, and go to state 224 2772 + EQUALEQUAL shift, and go to state 225 2773 + LESSEQUAL shift, and go to state 226 2774 + GREATEREQUAL shift, and go to state 227 2775 + ',' shift, and go to state 228 2776 + '<' shift, and go to state 229 2777 + '>' shift, and go to state 230 2778 + '+' shift, and go to state 231 2779 + '-' shift, and go to state 232 2780 + '*' shift, and go to state 233 2781 + '/' shift, and go to state 234 2782 + '%' shift, and go to state 235 2783 + '^' shift, and go to state 236 2784 + 2785 + between go to state 425 2786 + 2787 + 2788 +State 425 2789 + 2790 + 134 position: . position_not_place 2791 + 135 | . place 2792 + 136 position_not_place: . expr_pair 2793 + 137 | . position '+' expr_pair 2794 + 138 | . position '-' expr_pair 2795 + 139 | . '(' position ',' position ')' 2796 + 140 | . expr between position AND position 2797 + 140 | expr between . position AND position 2798 + 141 | . expr '<' position ',' position '>' 2799 + 144 expr_pair: . expr ',' expr 2800 + 145 | . '(' expr_pair ')' 2801 + 146 place: . label 2802 + 147 | . label corner 2803 + 148 | . corner label 2804 + 149 | . corner OF label 2805 + 150 | . HERE 2806 + 151 label: . LABEL 2807 + 152 | . nth_primitive 2808 + 153 | . label '.' LABEL 2809 + 154 ordinal: . ORDINAL 2810 + 155 | . '`' any_expr TH 2811 + 156 optional_ordinal_last: . LAST 2812 + 157 | . ordinal LAST 2813 + 158 nth_primitive: . ordinal object_type 2814 + 159 | . optional_ordinal_last object_type 2815 + 180 corner: . DOT_N 2816 + 181 | . DOT_E 2817 + 182 | . DOT_W 2818 + 183 | . DOT_S 2819 + 184 | . DOT_NE 2820 + 185 | . DOT_SE 2821 + 186 | . DOT_NW 2822 + 187 | . DOT_SW 2823 + 188 | . DOT_C 2824 + 189 | . DOT_START 2825 + 190 | . DOT_END 2826 + 191 | . TOP 2827 + 192 | . BOTTOM 2828 + 193 | . LEFT 2829 + 194 | . RIGHT 2830 + 195 | . UPPER LEFT 2831 + 196 | . LOWER LEFT 2832 + 197 | . UPPER RIGHT 2833 + 198 | . LOWER RIGHT 2834 + 199 | . LEFT_CORNER 2835 + 200 | . RIGHT_CORNER 2836 + 201 | . UPPER LEFT_CORNER 2837 + 202 | . LOWER LEFT_CORNER 2838 + 203 | . UPPER RIGHT_CORNER 2839 + 204 | . LOWER RIGHT_CORNER 2840 + 205 | . NORTH 2841 + 206 | . SOUTH 2842 + 207 | . EAST 2843 + 208 | . WEST 2844 + 209 | . CENTER 2845 + 210 | . START 2846 + 211 | . END 2847 + 212 expr: . VARIABLE 2848 + 213 | . NUMBER 2849 + 214 | . place DOT_X 2850 + 215 | . place DOT_Y 2851 + 216 | . place DOT_HT 2852 + 217 | . place DOT_WID 2853 + 218 | . place DOT_RAD 2854 + 219 | . expr '+' expr 2855 + 220 | . expr '-' expr 2856 + 221 | . expr '*' expr 2857 + 222 | . expr '/' expr 2858 + 223 | . expr '%' expr 2859 + 224 | . expr '^' expr 2860 + 225 | . '-' expr 2861 + 226 | . '(' any_expr ')' 2862 + 227 | . SIN '(' any_expr ')' 2863 + 228 | . COS '(' any_expr ')' 2864 + 229 | . ATAN2 '(' any_expr ',' any_expr ')' 2865 + 230 | . LOG '(' any_expr ')' 2866 + 231 | . EXP '(' any_expr ')' 2867 + 232 | . SQRT '(' any_expr ')' 2868 + 233 | . K_MAX '(' any_expr ',' any_expr ')' 2869 + 234 | . K_MIN '(' any_expr ',' any_expr ')' 2870 + 235 | . INT '(' any_expr ')' 2871 + 236 | . RAND '(' any_expr ')' 2872 + 237 | . RAND '(' ')' 2873 + 238 | . SRAND '(' any_expr ')' 2874 + 239 | . expr '<' expr 2875 + 240 | . expr LESSEQUAL expr 2876 + 241 | . expr '>' expr 2877 + 242 | . expr GREATEREQUAL expr 2878 + 243 | . expr EQUALEQUAL expr 2879 + 244 | . expr NOTEQUAL expr 2880 + 245 | . expr ANDAND expr 2881 + 246 | . expr OROR expr 2882 + 247 | . '!' expr 2883 + 2884 + LABEL shift, and go to state 48 2885 + VARIABLE shift, and go to state 49 2886 + NUMBER shift, and go to state 50 2887 + ORDINAL shift, and go to state 51 2888 + LAST shift, and go to state 52 2889 + LEFT shift, and go to state 53 2890 + RIGHT shift, and go to state 54 2891 + HERE shift, and go to state 55 2892 + DOT_N shift, and go to state 56 2893 + DOT_E shift, and go to state 57 2894 + DOT_W shift, and go to state 58 2895 + DOT_S shift, and go to state 59 2896 + DOT_NE shift, and go to state 60 2897 + DOT_SE shift, and go to state 61 2898 + DOT_NW shift, and go to state 62 2899 + DOT_SW shift, and go to state 63 2900 + DOT_C shift, and go to state 64 2901 + DOT_START shift, and go to state 65 2902 + DOT_END shift, and go to state 66 2903 + SIN shift, and go to state 67 2904 + COS shift, and go to state 68 2905 + ATAN2 shift, and go to state 69 2906 + LOG shift, and go to state 70 2907 + EXP shift, and go to state 71 2908 + SQRT shift, and go to state 72 2909 + K_MAX shift, and go to state 73 2910 + K_MIN shift, and go to state 74 2911 + INT shift, and go to state 75 2912 + RAND shift, and go to state 76 2913 + SRAND shift, and go to state 77 2914 + TOP shift, and go to state 78 2915 + BOTTOM shift, and go to state 79 2916 + UPPER shift, and go to state 80 2917 + LOWER shift, and go to state 81 2918 + LEFT_CORNER shift, and go to state 82 2919 + RIGHT_CORNER shift, and go to state 83 2920 + NORTH shift, and go to state 84 2921 + SOUTH shift, and go to state 85 2922 + EAST shift, and go to state 86 2923 + WEST shift, and go to state 87 2924 + CENTER shift, and go to state 88 2925 + END shift, and go to state 89 2926 + START shift, and go to state 90 2927 + '(' shift, and go to state 91 2928 + '`' shift, and go to state 92 2929 + '-' shift, and go to state 93 2930 + '!' shift, and go to state 94 2931 + 2932 + position go to state 426 2933 + position_not_place go to state 99 2934 + expr_pair go to state 100 2935 + place go to state 101 2936 + label go to state 423 2937 + ordinal go to state 103 2938 + optional_ordinal_last go to state 104 2939 + nth_primitive go to state 105 2940 + corner go to state 106 2941 + expr go to state 424 2942 + 2943 + 2944 +State 426 2945 + 2946 + 137 position_not_place: position . '+' expr_pair 2947 + 138 | position . '-' expr_pair 2948 + 140 | expr between position . AND position 2949 + 2950 + AND shift, and go to state 427 2951 + '+' shift, and go to state 197 2952 + '-' shift, and go to state 198 2953 + 2954 + 2955 +State 427 2956 + 2957 + 134 position: . position_not_place 2958 + 135 | . place 2959 + 136 position_not_place: . expr_pair 2960 + 137 | . position '+' expr_pair 2961 + 138 | . position '-' expr_pair 2962 + 139 | . '(' position ',' position ')' 2963 + 140 | . expr between position AND position 2964 + 140 | expr between position AND . position 2965 + 141 | . expr '<' position ',' position '>' 2966 + 144 expr_pair: . expr ',' expr 2967 + 145 | . '(' expr_pair ')' 2968 + 146 place: . label 2969 + 147 | . label corner 2970 + 148 | . corner label 2971 + 149 | . corner OF label 2972 + 150 | . HERE 2973 + 151 label: . LABEL 2974 + 152 | . nth_primitive 2975 + 153 | . label '.' LABEL 2976 + 154 ordinal: . ORDINAL 2977 + 155 | . '`' any_expr TH 2978 + 156 optional_ordinal_last: . LAST 2979 + 157 | . ordinal LAST 2980 + 158 nth_primitive: . ordinal object_type 2981 + 159 | . optional_ordinal_last object_type 2982 + 180 corner: . DOT_N 2983 + 181 | . DOT_E 2984 + 182 | . DOT_W 2985 + 183 | . DOT_S 2986 + 184 | . DOT_NE 2987 + 185 | . DOT_SE 2988 + 186 | . DOT_NW 2989 + 187 | . DOT_SW 2990 + 188 | . DOT_C 2991 + 189 | . DOT_START 2992 + 190 | . DOT_END 2993 + 191 | . TOP 2994 + 192 | . BOTTOM 2995 + 193 | . LEFT 2996 + 194 | . RIGHT 2997 + 195 | . UPPER LEFT 2998 + 196 | . LOWER LEFT 2999 + 197 | . UPPER RIGHT 3000 + 198 | . LOWER RIGHT 3001 + 199 | . LEFT_CORNER 3002 + 200 | . RIGHT_CORNER 3003 + 201 | . UPPER LEFT_CORNER 3004 + 202 | . LOWER LEFT_CORNER 3005 + 203 | . UPPER RIGHT_CORNER 3006 + 204 | . LOWER RIGHT_CORNER 3007 + 205 | . NORTH 3008 + 206 | . SOUTH 3009 + 207 | . EAST 3010 + 208 | . WEST 3011 + 209 | . CENTER 3012 + 210 | . START 3013 + 211 | . END 3014 + 212 expr: . VARIABLE 3015 + 213 | . NUMBER 3016 + 214 | . place DOT_X 3017 + 215 | . place DOT_Y 3018 + 216 | . place DOT_HT 3019 + 217 | . place DOT_WID 3020 + 218 | . place DOT_RAD 3021 + 219 | . expr '+' expr 3022 + 220 | . expr '-' expr 3023 + 221 | . expr '*' expr 3024 + 222 | . expr '/' expr 3025 + 223 | . expr '%' expr 3026 + 224 | . expr '^' expr 3027 + 225 | . '-' expr 3028 + 226 | . '(' any_expr ')' 3029 + 227 | . SIN '(' any_expr ')' 3030 + 228 | . COS '(' any_expr ')' 3031 + 229 | . ATAN2 '(' any_expr ',' any_expr ')' 3032 + 230 | . LOG '(' any_expr ')' 3033 + 231 | . EXP '(' any_expr ')' 3034 + 232 | . SQRT '(' any_expr ')' 3035 + 233 | . K_MAX '(' any_expr ',' any_expr ')' 3036 + 234 | . K_MIN '(' any_expr ',' any_expr ')' 3037 + 235 | . INT '(' any_expr ')' 3038 + 236 | . RAND '(' any_expr ')' 3039 + 237 | . RAND '(' ')' 3040 + 238 | . SRAND '(' any_expr ')' 3041 + 239 | . expr '<' expr 3042 + 240 | . expr LESSEQUAL expr 3043 + 241 | . expr '>' expr 3044 + 242 | . expr GREATEREQUAL expr 3045 + 243 | . expr EQUALEQUAL expr 3046 + 244 | . expr NOTEQUAL expr 3047 + 245 | . expr ANDAND expr 3048 + 246 | . expr OROR expr 3049 + 247 | . '!' expr 3050 + 3051 + LABEL shift, and go to state 48 3052 + VARIABLE shift, and go to state 49 3053 + NUMBER shift, and go to state 50 3054 + ORDINAL shift, and go to state 51 3055 + LAST shift, and go to state 52 3056 + LEFT shift, and go to state 53 3057 + RIGHT shift, and go to state 54 3058 + HERE shift, and go to state 55 3059 + DOT_N shift, and go to state 56 3060 + DOT_E shift, and go to state 57 3061 + DOT_W shift, and go to state 58 3062 + DOT_S shift, and go to state 59 3063 + DOT_NE shift, and go to state 60 3064 + DOT_SE shift, and go to state 61 3065 + DOT_NW shift, and go to state 62 3066 + DOT_SW shift, and go to state 63 3067 + DOT_C shift, and go to state 64 3068 + DOT_START shift, and go to state 65 3069 + DOT_END shift, and go to state 66 3070 + SIN shift, and go to state 67 3071 + COS shift, and go to state 68 3072 + ATAN2 shift, and go to state 69 3073 + LOG shift, and go to state 70 3074 + EXP shift, and go to state 71 3075 + SQRT shift, and go to state 72 3076 + K_MAX shift, and go to state 73 3077 + K_MIN shift, and go to state 74 3078 + INT shift, and go to state 75 3079 + RAND shift, and go to state 76 3080 + SRAND shift, and go to state 77 3081 + TOP shift, and go to state 78 3082 + BOTTOM shift, and go to state 79 3083 + UPPER shift, and go to state 80 3084 + LOWER shift, and go to state 81 3085 + LEFT_CORNER shift, and go to state 82 3086 + RIGHT_CORNER shift, and go to state 83 3087 + NORTH shift, and go to state 84 3088 + SOUTH shift, and go to state 85 3089 + EAST shift, and go to state 86 3090 + WEST shift, and go to state 87 3091 + CENTER shift, and go to state 88 3092 + END shift, and go to state 89 3093 + START shift, and go to state 90 3094 + '(' shift, and go to state 91 3095 + '`' shift, and go to state 92 3096 + '-' shift, and go to state 93 3097 + '!' shift, and go to state 94 3098 + 3099 + position go to state 402 3100 + position_not_place go to state 99 3101 + expr_pair go to state 100 3102 + place go to state 101 3103 + label go to state 423 3104 + ordinal go to state 103 3105 + optional_ordinal_last go to state 104 3106 + nth_primitive go to state 105 3107 + corner go to state 106 3108 + expr go to state 424 3109 ]])], 3110 3111 dnl OTHER-CHECKS 3112 [], 3113 3114 dnl PARSER-EXIT-VALUE, PARSER-STDOUT, PARSER-STDERR 3115 [AT_COND_CASE([[LALR]], [[1]], [[0]])], 3116 [], 3117 [AT_COND_CASE([[LALR]], 3118 [[syntax error, unexpected LEFT 3119 ]])]) 3120