1 # Exercising Bison on actual grammars. -*- Autotest -*-
3 # Copyright (C) 1989-1992, 2000-2005, 2007, 2009-2012 Free Software
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.
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.
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/>.
19 AT_BANNER([[Existing Grammars.]])
21 # AT_TEST_EXISTING_GRAMMAR(DESCRIPTION,
22 # DECLS, GRAMMAR, INPUT,
23 # BISON-STDERR, LAST-STATE, LALR1-DIFF,
25 # [PARSER-EXIT-VALUE],
26 # [PARSER-STDOUT], [PARSER-STDERR])
27 # --------------------------------------------------------------
28 m4_define([AT_TEST_EXISTING_GRAMMAR], [_AT_TEST_EXISTING_GRAMMAR([$][1], $@)])
30 m4_define([_AT_TEST_EXISTING_GRAMMAR],
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 [AT_CHECK([[sed 's/^%define lr.type .*$//' input.y > input-lalr.y]])
39 AT_BISON_CHECK([[--report=all input-lalr.y]], [[0]], [ignore], [ignore])
40 AT_CHECK([[diff -u input-lalr.output input.output \
41 | sed -n '/^@@/,$p' | sed 's/^ $//']],
44 AT_TEST_TABLES_AND_PARSE([$2[: LALR(1)]], [[LALR]], [[last-state]],
45 [[%define lr.type lalr
47 [$4], [$5], [$6], [$7],
48 [AT_LALR1_DIFF_CHECK([$8])$9], [$10], [$11], [$12])
49 AT_TEST_TABLES_AND_PARSE([$2[: IELR(1)]], [[IELR]], [[last-state]],
50 [[%define lr.type ielr
52 [$4], [$5], [$6], [$7],
53 [AT_LALR1_DIFF_CHECK([$8])$9], [$10], [$11], [$12])
54 AT_TEST_TABLES_AND_PARSE([$2[: Canonical LR(1)]], [[canonical LR]],
55 [[last-state,no-xml]],
56 [[%define lr.type canonical-lr
58 [$4], [$5], [$6], [$7],
59 [$9], [$10], [$11], [$12])
61 m4_popdef([AT_LALR1_DIFF_CHECK])
66 ## ----------------------- ##
67 ## GNU AWK 3.1.0 Grammar. ##
68 ## ----------------------- ##
70 # We have been careful to strip all the actions excepts the
73 # There are 65 SR conflicts. Bison was once wrong, due to an incorrect
74 # computation of nullable. It reported 485 SR conflicts!
76 AT_TEST_EXISTING_GRAMMAR([[GNU AWK 3.1.0 Grammar]],
79 %token FUNC_CALL NAME REGEXP
81 %token YNUMBER YSTRING
82 %token RELOP APPEND_OP
83 %token ASSIGNOP MATCHOP NEWLINE CONCAT_OP
84 %token LEX_BEGIN LEX_END LEX_IF LEX_ELSE LEX_RETURN LEX_DELETE
85 %token LEX_WHILE LEX_DO LEX_FOR LEX_BREAK LEX_CONTINUE
86 %token LEX_PRINT LEX_PRINTF LEX_NEXT LEX_EXIT LEX_FUNCTION
87 %token LEX_GETLINE LEX_NEXTFILE
89 %token LEX_AND LEX_OR INCREMENT DECREMENT
90 %token LEX_BUILTIN LEX_LENGTH
92 /* Lowest to highest */
99 %left FUNC_CALL LEX_BUILTIN LEX_LENGTH
102 %nonassoc RELOP '<' '>' '|' APPEND_OP TWOWAYIO
104 %left YSTRING YNUMBER
109 %left INCREMENT DECREMENT
115 : opt_nls program opt_nls
127 : LEX_BEGIN {} action
129 | LEX_BEGIN statement_term
130 | LEX_END statement_term
133 | pattern statement_term
134 | function_prologue function_body
149 : LEX_FUNCTION {} func_name '(' opt_param_list r_paren opt_nls
153 : l_brace statements r_brace opt_semi opt_nls
154 | l_brace r_brace opt_semi opt_nls
164 * In this rule, want_regexp tells yylex that the next thing
165 * is a regexp so it should read up to the closing slash.
171 : l_brace statements r_brace opt_semi opt_nls
172 | l_brace r_brace opt_semi opt_nls
177 | statements statement
190 | l_brace statements r_brace
192 | LEX_WHILE '(' exp r_paren opt_nls statement
193 | LEX_DO opt_nls statement LEX_WHILE '(' exp r_paren opt_nls
194 | LEX_FOR '(' NAME LEX_IN NAME r_paren opt_nls statement
195 | LEX_FOR '(' opt_exp semi opt_nls exp semi opt_nls opt_exp r_paren opt_nls statement
196 | LEX_FOR '(' opt_exp semi opt_nls semi opt_nls opt_exp r_paren opt_nls statement
197 | LEX_BREAK statement_term
198 | LEX_CONTINUE statement_term
199 | print '(' expression_list r_paren output_redir statement_term
200 | print opt_rexpression_list output_redir statement_term
201 | LEX_NEXT statement_term
202 | LEX_NEXTFILE statement_term
203 | LEX_EXIT opt_exp statement_term
204 | LEX_RETURN {} opt_exp statement_term
205 | LEX_DELETE NAME '[' expression_list ']' statement_term
206 | LEX_DELETE NAME statement_term
216 : LEX_IF '(' exp r_paren opt_nls statement
217 | LEX_IF '(' exp r_paren opt_nls statement
218 LEX_ELSE opt_nls statement
251 | param_list comma NAME
254 | param_list comma error
257 /* optional expression, as in for loop */
270 | rexpression_list comma rexp
272 | rexpression_list error
273 | rexpression_list error rexp
274 | rexpression_list comma error
284 | expression_list comma exp
286 | expression_list error
287 | expression_list error exp
288 | expression_list comma error
291 /* Expressions, not including the comma operator. */
292 exp : variable ASSIGNOP {} exp
293 | '(' expression_list r_paren LEX_IN NAME
294 | exp '|' LEX_GETLINE opt_variable
295 | exp TWOWAYIO LEX_GETLINE opt_variable
296 | LEX_GETLINE opt_variable input_redir
301 | '!' regexp %prec UNARY
306 | exp '?' exp ':' exp
308 | exp simp_exp %prec CONCAT_OP
312 : variable ASSIGNOP {} rexp
315 | LEX_GETLINE opt_variable input_redir
317 | '!' regexp %prec UNARY
321 | rexp '?' rexp ':' rexp
323 | rexp simp_exp %prec CONCAT_OP
328 /* Binary operators in order of decreasing precedence. */
329 | simp_exp '^' simp_exp
330 | simp_exp '*' simp_exp
331 | simp_exp '/' simp_exp
332 | simp_exp '%' simp_exp
333 | simp_exp '+' simp_exp
334 | simp_exp '-' simp_exp
340 : '!' simp_exp %prec UNARY
343 '(' opt_expression_list r_paren
344 | LEX_LENGTH '(' opt_expression_list r_paren
346 | FUNC_CALL '(' opt_expression_list r_paren
352 | '-' simp_exp %prec UNARY
353 | '+' simp_exp %prec UNARY
363 | NAME '[' expression_list ']'
364 | '$' non_post_simp_exp
394 dnl For example, in AWK:
398 dnl The grammar below (from GNU AWK 3.1.0) using canonical LR(1) or IELR(1)
403 dnl That is, they shift `*' immediately and make it part of the getline
406 dnl The grammar below using LALR(1) parses it as a syntax error. So does
407 dnl GNU AWK 3.0.6, 3.1.0, and 3.1.1. They reduce the full getline expression
408 dnl before shifting `*' even though `*' is not a valid lookahead.
410 dnl GNU AWK 3.1.2, 3.1.3, 3.1.4, and 3.1.5 parse it as:
414 dnl That is, like the other versions of GNU AWK, they reduce the full getline
415 dnl expression before shifting `*'. However, because of a different LHS on the
416 dnl getline rule, `*' actually is a valid lookahead. Solaris /usr/xpg4/bin/awk
417 dnl and the Open Group awk specification seem to agree:
419 dnl http://www.opengroup.org/pubs/online/7908799/xcu/awk.html
421 dnl /bin/nawk and /bin/awk on Solaris 10 report it as a syntax error, but they
422 dnl don't like even `print $!4;'.
423 [[LEX_GETLINE, '$', '!', YNUMBER, '*', YNUMBER, ';']],
426 [AT_COND_CASE([[canonical LR]],
427 [[input.y: conflicts: 265 shift/reduce]],
428 [[input.y: conflicts: 65 shift/reduce]])[
432 [AT_COND_CASE([[LALR]], [[319]], [[canonical LR]], [[2358]], [[328]])],
434 dnl LALR1-DIFF not used for canonical LR(1) because the diff is huge.
435 dnl Isocore map from LALR(1) state number to new state number plus descriptions
436 dnl of any change in the actions resulting in a change in accepted language:
443 dnl - 56 -> 326: reduce -> shift on '*', '/', and '%'
444 dnl - 58 -> 327: reduce -> shift on '*', '/', and '%'
445 dnl - 61 -> 328: reduce -> shift on '*', '/', and '%'
446 [AT_COND_CASE([[LALR]], [],
447 [[@@ -712,7 +712,7 @@
448 156 | . '$' non_post_simp_exp
450 NAME shift, and go to state 9
451 - '$' shift, and go to state 24
452 + '$' shift, and go to state 320
454 NAME [reduce using rule 152 (opt_variable)]
455 '$' [reduce using rule 152 (opt_variable)]
456 @@ -5379,7 +5379,7 @@
457 156 | . '$' non_post_simp_exp
459 NAME shift, and go to state 9
460 - '$' shift, and go to state 24
461 + '$' shift, and go to state 320
463 NAME [reduce using rule 152 (opt_variable)]
464 '$' [reduce using rule 152 (opt_variable)]
465 @@ -5399,7 +5399,7 @@
466 156 | . '$' non_post_simp_exp
468 NAME shift, and go to state 9
469 - '$' shift, and go to state 24
470 + '$' shift, and go to state 320
472 NAME [reduce using rule 152 (opt_variable)]
473 '$' [reduce using rule 152 (opt_variable)]
474 @@ -6214,7 +6214,7 @@
475 156 | . '$' non_post_simp_exp
477 NAME shift, and go to state 9
478 - '$' shift, and go to state 24
479 + '$' shift, and go to state 320
481 NAME [reduce using rule 152 (opt_variable)]
482 '$' [reduce using rule 152 (opt_variable)]
483 @@ -11099,3 +11099,274 @@
484 45 statement: LEX_FOR '(' opt_exp semi opt_nls exp semi opt_nls opt_exp r_paren opt_nls statement .
486 $default reduce using rule 45 (statement)
491 + 139 non_post_simp_exp: . '!' simp_exp
492 + 140 | . '(' exp r_paren
493 + 141 | . LEX_BUILTIN '(' opt_expression_list r_paren
494 + 142 | . LEX_LENGTH '(' opt_expression_list r_paren
496 + 144 | . FUNC_CALL '(' opt_expression_list r_paren
498 + 146 | . INCREMENT variable
499 + 147 | . DECREMENT variable
502 + 150 | . '-' simp_exp
503 + 151 | . '+' simp_exp
504 + 154 variable: . NAME
505 + 155 | . NAME '[' expression_list ']'
506 + 156 | . '$' non_post_simp_exp
507 + 156 | '$' . non_post_simp_exp
509 + FUNC_CALL shift, and go to state 8
510 + NAME shift, and go to state 9
511 + YNUMBER shift, and go to state 10
512 + YSTRING shift, and go to state 11
513 + INCREMENT shift, and go to state 321
514 + DECREMENT shift, and go to state 322
515 + LEX_BUILTIN shift, and go to state 18
516 + LEX_LENGTH shift, and go to state 19
517 + '+' shift, and go to state 323
518 + '-' shift, and go to state 324
519 + '!' shift, and go to state 325
520 + '$' shift, and go to state 320
521 + '(' shift, and go to state 55
523 + non_post_simp_exp go to state 62
524 + variable go to state 63
529 + 146 non_post_simp_exp: INCREMENT . variable
530 + 154 variable: . NAME
531 + 155 | . NAME '[' expression_list ']'
532 + 156 | . '$' non_post_simp_exp
534 + NAME shift, and go to state 9
535 + '$' shift, and go to state 320
537 + variable go to state 50
542 + 147 non_post_simp_exp: DECREMENT . variable
543 + 154 variable: . NAME
544 + 155 | . NAME '[' expression_list ']'
545 + 156 | . '$' non_post_simp_exp
547 + NAME shift, and go to state 9
548 + '$' shift, and go to state 320
550 + variable go to state 51
555 + 130 simp_exp: . non_post_simp_exp
556 + 131 | . simp_exp '^' simp_exp
557 + 132 | . simp_exp '*' simp_exp
558 + 133 | . simp_exp '/' simp_exp
559 + 134 | . simp_exp '%' simp_exp
560 + 135 | . simp_exp '+' simp_exp
561 + 136 | . simp_exp '-' simp_exp
562 + 137 | . variable INCREMENT
563 + 138 | . variable DECREMENT
564 + 139 non_post_simp_exp: . '!' simp_exp
565 + 140 | . '(' exp r_paren
566 + 141 | . LEX_BUILTIN '(' opt_expression_list r_paren
567 + 142 | . LEX_LENGTH '(' opt_expression_list r_paren
569 + 144 | . FUNC_CALL '(' opt_expression_list r_paren
571 + 146 | . INCREMENT variable
572 + 147 | . DECREMENT variable
575 + 150 | . '-' simp_exp
576 + 151 | . '+' simp_exp
577 + 151 | '+' . simp_exp
578 + 154 variable: . NAME
579 + 155 | . NAME '[' expression_list ']'
580 + 156 | . '$' non_post_simp_exp
582 + FUNC_CALL shift, and go to state 8
583 + NAME shift, and go to state 9
584 + YNUMBER shift, and go to state 10
585 + YSTRING shift, and go to state 11
586 + INCREMENT shift, and go to state 16
587 + DECREMENT shift, and go to state 17
588 + LEX_BUILTIN shift, and go to state 18
589 + LEX_LENGTH shift, and go to state 19
590 + '+' shift, and go to state 20
591 + '-' shift, and go to state 21
592 + '!' shift, and go to state 54
593 + '$' shift, and go to state 24
594 + '(' shift, and go to state 55
596 + simp_exp go to state 326
597 + non_post_simp_exp go to state 35
598 + variable go to state 57
603 + 130 simp_exp: . non_post_simp_exp
604 + 131 | . simp_exp '^' simp_exp
605 + 132 | . simp_exp '*' simp_exp
606 + 133 | . simp_exp '/' simp_exp
607 + 134 | . simp_exp '%' simp_exp
608 + 135 | . simp_exp '+' simp_exp
609 + 136 | . simp_exp '-' simp_exp
610 + 137 | . variable INCREMENT
611 + 138 | . variable DECREMENT
612 + 139 non_post_simp_exp: . '!' simp_exp
613 + 140 | . '(' exp r_paren
614 + 141 | . LEX_BUILTIN '(' opt_expression_list r_paren
615 + 142 | . LEX_LENGTH '(' opt_expression_list r_paren
617 + 144 | . FUNC_CALL '(' opt_expression_list r_paren
619 + 146 | . INCREMENT variable
620 + 147 | . DECREMENT variable
623 + 150 | . '-' simp_exp
624 + 150 | '-' . simp_exp
625 + 151 | . '+' simp_exp
626 + 154 variable: . NAME
627 + 155 | . NAME '[' expression_list ']'
628 + 156 | . '$' non_post_simp_exp
630 + FUNC_CALL shift, and go to state 8
631 + NAME shift, and go to state 9
632 + YNUMBER shift, and go to state 10
633 + YSTRING shift, and go to state 11
634 + INCREMENT shift, and go to state 16
635 + DECREMENT shift, and go to state 17
636 + LEX_BUILTIN shift, and go to state 18
637 + LEX_LENGTH shift, and go to state 19
638 + '+' shift, and go to state 20
639 + '-' shift, and go to state 21
640 + '!' shift, and go to state 54
641 + '$' shift, and go to state 24
642 + '(' shift, and go to state 55
644 + simp_exp go to state 327
645 + non_post_simp_exp go to state 35
646 + variable go to state 57
651 + 130 simp_exp: . non_post_simp_exp
652 + 131 | . simp_exp '^' simp_exp
653 + 132 | . simp_exp '*' simp_exp
654 + 133 | . simp_exp '/' simp_exp
655 + 134 | . simp_exp '%' simp_exp
656 + 135 | . simp_exp '+' simp_exp
657 + 136 | . simp_exp '-' simp_exp
658 + 137 | . variable INCREMENT
659 + 138 | . variable DECREMENT
660 + 139 non_post_simp_exp: . '!' simp_exp
661 + 139 | '!' . simp_exp
662 + 140 | . '(' exp r_paren
663 + 141 | . LEX_BUILTIN '(' opt_expression_list r_paren
664 + 142 | . LEX_LENGTH '(' opt_expression_list r_paren
666 + 144 | . FUNC_CALL '(' opt_expression_list r_paren
668 + 146 | . INCREMENT variable
669 + 147 | . DECREMENT variable
672 + 150 | . '-' simp_exp
673 + 151 | . '+' simp_exp
674 + 154 variable: . NAME
675 + 155 | . NAME '[' expression_list ']'
676 + 156 | . '$' non_post_simp_exp
678 + FUNC_CALL shift, and go to state 8
679 + NAME shift, and go to state 9
680 + YNUMBER shift, and go to state 10
681 + YSTRING shift, and go to state 11
682 + INCREMENT shift, and go to state 16
683 + DECREMENT shift, and go to state 17
684 + LEX_BUILTIN shift, and go to state 18
685 + LEX_LENGTH shift, and go to state 19
686 + '+' shift, and go to state 20
687 + '-' shift, and go to state 21
688 + '!' shift, and go to state 54
689 + '$' shift, and go to state 24
690 + '(' shift, and go to state 55
692 + simp_exp go to state 328
693 + non_post_simp_exp go to state 35
694 + variable go to state 57
699 + 131 simp_exp: simp_exp . '^' simp_exp
700 + 132 | simp_exp . '*' simp_exp
701 + 133 | simp_exp . '/' simp_exp
702 + 134 | simp_exp . '%' simp_exp
703 + 135 | simp_exp . '+' simp_exp
704 + 136 | simp_exp . '-' simp_exp
705 + 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, '+', '-', '!', '$', '(', ')', '@:>@', '{', ';']
707 + '*' shift, and go to state 89
708 + '/' shift, and go to state 90
709 + '%' shift, and go to state 91
710 + '^' shift, and go to state 92
712 + $default reduce using rule 151 (non_post_simp_exp)
714 + Conflict between rule 151 and token '+' resolved as reduce ('+' < UNARY).
715 + Conflict between rule 151 and token '-' resolved as reduce ('-' < UNARY).
720 + 131 simp_exp: simp_exp . '^' simp_exp
721 + 132 | simp_exp . '*' simp_exp
722 + 133 | simp_exp . '/' simp_exp
723 + 134 | simp_exp . '%' simp_exp
724 + 135 | simp_exp . '+' simp_exp
725 + 136 | simp_exp . '-' simp_exp
726 + 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, '+', '-', '!', '$', '(', ')', '@:>@', '{', ';']
728 + '*' shift, and go to state 89
729 + '/' shift, and go to state 90
730 + '%' shift, and go to state 91
731 + '^' shift, and go to state 92
733 + $default reduce using rule 150 (non_post_simp_exp)
735 + Conflict between rule 150 and token '+' resolved as reduce ('+' < UNARY).
736 + Conflict between rule 150 and token '-' resolved as reduce ('-' < UNARY).
741 + 131 simp_exp: simp_exp . '^' simp_exp
742 + 132 | simp_exp . '*' simp_exp
743 + 133 | simp_exp . '/' simp_exp
744 + 134 | simp_exp . '%' simp_exp
745 + 135 | simp_exp . '+' simp_exp
746 + 136 | simp_exp . '-' simp_exp
747 + 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, '+', '-', '!', '$', '(', ')', '@:>@', '{', ';']
749 + '*' shift, and go to state 89
750 + '/' shift, and go to state 90
751 + '%' shift, and go to state 91
752 + '^' shift, and go to state 92
754 + $default reduce using rule 139 (non_post_simp_exp)
756 + Conflict between rule 139 and token '+' resolved as reduce ('+' < UNARY).
757 + Conflict between rule 139 and token '-' resolved as reduce ('-' < UNARY).
763 dnl PARSER-EXIT-VALUE, PARSER-STDOUT, PARSER-STDERR
764 dnl In the case of the syntax error, the parser recovers, so it returns 0.
767 [AT_COND_CASE([[LALR]],
768 [[syntax error, unexpected '*', expecting NEWLINE or '{' or ';'
771 ## ----------------- ##
772 ## GNU Cim Grammar. ##
773 ## ----------------- ##
775 # GNU Cim, the GNU Simula 87 Compiler.
777 # Bison was once wrong, due to an incorrect computation of the RR conflicts.
778 # It reported 80 SR && 99 RR conflicts instead of 78/10!!!
780 AT_TEST_EXISTING_GRAMMAR([[GNU Cim Grammar]],
783 HACTIVATE HAFTER /*HAND*/ HARRAY HAT
784 HBEFORE HBEGIN HBOOLEAN
785 HCHARACTER HCLASS /*HCOMMENT*/ HCONC
787 HELSE HEND HEQ /*HEQV*/ HEXTERNAL
791 HIF /*HIMP*/ HIN HINNER HINSPECT HINTEGER HIS
793 HNAME HNE HNEW HNONE /*HNOT*/ HNOTEXT
795 HPRIOR HPROCEDURE HPROTECTED
797 HREACTIVATE HREAL HREF
799 HTEXT HTHEN HTHIS HTO
804 HASSIGNVALUE HASSIGNREF
805 /*HDOT*/ HPAREXPSEPARATOR HLABELSEPARATOR HSTATEMENTSEPARATOR
808 HADD HSUB HMUL HDIV HINTDIV HEXP
812 %token HBOOLEANKONST HINTEGERKONST HCHARACTERKONST
827 %left HVALRELOPERATOR HREFRELOPERATOR HOBJRELOPERATOR
833 %left HFACTOROPERATOR
834 %left HPRIMARYOPERATOR
843 /* GRAMATIKK FOR PROGRAM MODULES */
846 | error HSTATEMENTSEPARATOR MBEE_DECLSTMS
848 EXT_DECLARATION : HEXTERNAL
866 EXTERNAL_KIND_ITEM: EXT_IDENT
879 MBEE_REST_EXT_LIST: /* EMPTY
880 | HPAREXPSEPARATOR EXT_KIND_LIST
882 EXT_KIND_LIST : EXT_KIND_ITEM
883 | EXT_KIND_LIST HPAREXPSEPARATOR EXT_KIND_ITEM
885 EXT_KIND_ITEM : HIDENTIFIER
889 EMPTY_BLOCK : /*EMPT*/
893 | EXT_LIST HPAREXPSEPARATOR EXT_ITEM
895 EXT_ITEM : HIDENTIFIER
898 EXT_IDENT : /* EMPTY */
902 /* GRAMATIKK FOR TYPER */
921 /* GRAMATIKK FOR DEL AV SETNINGER */
922 MBEE_ELSE_PART : /*EMPT*/
932 FOR_LIST : FOR_LIST_ELEMENT
937 FOR_LIST_ELEMENT: EXPRESSION
940 MBEE_F_L_EL_R_PT: /*EMPT*/
952 CONN_STATE_R_PT : WHEN_CLAUSE_LIST
956 WHEN_CLAUSE_LIST: HWHEN
966 MBEE_OTWI_CLAUS : /*EMPT*/
971 ACTIVATOR : HACTIVATE
975 | ATDELAY EXPRESSION {}
983 BEFOREAFTER : HBEFORE
989 /* GRAMATIKK FOR SETNINGER OG DEKLARASJONER */
990 MODULSTATEMENT : HWHILE
1024 | EXPRESSION_SIMP HBEGIN error HSTATEMENTSEPARATOR
1026 | EXPRESSION_SIMP HBEGIN error HEND
1028 | ACTIVATOR EXPRESSION SCHEDULE
1033 | MBEE_TYPE HPROCEDURE
1057 DECLSTATEMENT : MODULSTATEMENT
1075 BLOCK : DECLSTATEMENT
1076 | HBEGIN MBEE_DECLSTMS HEND
1077 | HBEGIN error HSTATEMENTSEPARATOR MBEE_DECLSTMS HEND
1080 MBEE_DECLSTMS : MBEE_DECLSTMSU
1082 MBEE_DECLSTMSU : DECLSTATEMENT
1087 MODULS : MODULSTATEMENT
1088 | MODULS HSTATEMENTSEPARATOR MODULSTATEMENT
1090 /* GRAMATIKK FOR DEL AV DEKLARASJONER */
1091 ARR_SEGMENT_LIST: ARR_SEGMENT
1096 ARR_SEGMENT : ARRAY_SEGMENT
1098 BAUND_PAIR_LIST HENDPAR
1100 ARRAY_SEGMENT : ARRAY_SEGMENT_EL {}
1106 ARRAY_SEGMENT_EL: HIDENTIFIER
1108 BAUND_PAIR_LIST : BAUND_PAIR
1113 BAUND_PAIR : EXPRESSION
1117 SWITCH_LIST : EXPRESSION
1122 HEADING : MBEE_FMAL_PAR_P HSTATEMENTSEPARATOR {}
1128 MBEE_FMAL_PAR_P : /*EMPT*/
1131 FMAL_PAR_PART : HBEGPAR NO_TYPE
1134 MBEE_LISTV : /*EMPT*/
1138 | FPP_CATEG HDOTDOTDOT
1140 HPAREXPSEPARATOR LISTV
1143 HPAREXPSEPARATOR LISTV
1145 FPP_HEADING : HBEGPAR NO_TYPE
1146 FPP_MBEE_LISTV HENDPAR
1148 FPP_MBEE_LISTV : /*EMPT*/
1151 FPP_LISTV : FPP_CATEG HDOTDOTDOT
1154 HPAREXPSEPARATOR LISTV
1156 FPP_SPEC : FPP_CATEG SPECIFIER HIDENTIFIER
1157 | FPP_CATEG FPP_PROC_DECL_IN_SPEC
1159 FPP_CATEG : HNAME HLABELSEPARATOR
1160 | HVALUE HLABELSEPARATOR
1161 | HVAR HLABELSEPARATOR
1164 FPP_PROC_DECL_IN_SPEC: MBEE_TYPE HPROCEDURE
1167 FPP_HEADING {} { /* Yes, two "final" actions. */ }
1169 IDENTIFIER_LISTV: HIDENTIFIER
1172 HPAREXPSEPARATOR IDENTIFIER_LISTV
1174 MBEE_MODE_PART : /*EMPT*/
1177 MODE_PART : NAME_PART
1180 | NAME_PART VALUE_PART
1181 | VALUE_PART NAME_PART
1182 | NAME_PART VAR_PART
1183 | VAR_PART NAME_PART
1184 | VALUE_PART VAR_PART
1185 | VAR_PART VALUE_PART
1186 | VAR_PART NAME_PART VALUE_PART
1187 | NAME_PART VAR_PART VALUE_PART
1188 | NAME_PART VALUE_PART VAR_PART
1189 | VAR_PART VALUE_PART NAME_PART
1190 | VALUE_PART VAR_PART NAME_PART
1191 | VALUE_PART NAME_PART VAR_PART
1193 NAME_PART : HNAME {}
1201 VALUE_PART : HVALUE {}
1202 IDENTIFIER_LISTV HSTATEMENTSEPARATOR
1204 MBEE_SPEC_PART : /*EMPT*/
1207 SPEC_PART : ONE_SPEC
1208 | SPEC_PART ONE_SPEC
1210 ONE_SPEC : SPECIFIER IDENTIFIER_LIST HSTATEMENTSEPARATOR
1211 | NO_TYPE HPROCEDURE HIDENTIFIER HOBJRELOPERATOR
1213 PROC_DECL_IN_SPEC HSTATEMENTSEPARATOR
1214 | FPP_PROC_DECL_IN_SPEC HSTATEMENTSEPARATOR
1215 | MBEE_TYPE HPROCEDURE HIDENTIFIER HSTATEMENTSEPARATOR
1216 | MBEE_TYPE HPROCEDURE HIDENTIFIER HPAREXPSEPARATOR
1217 IDENTIFIER_LIST HSTATEMENTSEPARATOR
1225 PROC_DECL_IN_SPEC: MBEE_TYPE HPROCEDURE
1232 MBEE_BEGIN_END : /* EMPTY */
1235 MBEE_PROT_PART : /*EMPT*/
1238 PROTECTION_PART : PROT_SPECIFIER IDENTIFIER_LIST
1240 | PROTECTION_PART PROT_SPECIFIER
1241 IDENTIFIER_LIST HSTATEMENTSEPARATOR
1243 PROT_SPECIFIER : HHIDDEN
1250 MBEE_VIRT_PART : /*EMPT*/
1253 VIRTUAL_PART : HVIRTUAL
1257 IDENTIFIER_LIST : HIDENTIFIER
1258 | IDENTIFIER_LIST HPAREXPSEPARATOR
1261 IDENTIFIER_LISTC: HIDENTIFIER
1263 | IDENTIFIER_LISTC HPAREXPSEPARATOR
1267 MBEE_CONSTANT : /* EMPTY */
1273 /* GRAMATIKK FOR UTTRYKK */
1274 EXPRESSION : EXPRESSION_SIMP
1282 EXPRESSION_SIMP : EXPRESSION_SIMP
1290 | EXPRESSION_SIMP HOR
1294 | EXPRESSION_SIMP HAND
1299 HEQV EXPRESSION_SIMP
1301 HIMP EXPRESSION_SIMP
1305 HAND EXPRESSION_SIMP
1306 | HNOT EXPRESSION_SIMP
1317 EXPRESSION_SIMP %prec UNEAR
1348 ARG_R_PT : /*EMPTY*/
1350 ARGUMENT_LIST HENDPAR
1352 MBEE_ARG_R_PT : /*EMPTY*/
1354 ARGUMENT_LIST HENDPAR
1356 ARGUMENT_LIST : EXPRESSION
1367 [AT_COND_CASE([[canonical LR]],
1368 [[input.y: conflicts: 1876 shift/reduce, 144 reduce/reduce]],
1369 [[input.y: conflicts: 78 shift/reduce, 10 reduce/reduce]])[
1373 [AT_COND_CASE([[canonical LR]], [[10425]], [[442]])],
1375 dnl LALR1-DIFF not used for canonical LR(1) because the diff is huge.
1379 [AT_COND_CASE([[canonical LR]], [[]],
1380 [AT_CHECK([[grep '^State.*conflicts:' input.output]], [[0]],
1381 [[State 64 conflicts: 14 shift/reduce
1382 State 164 conflicts: 1 shift/reduce
1383 State 201 conflicts: 33 shift/reduce, 4 reduce/reduce
1384 State 206 conflicts: 1 shift/reduce
1385 State 240 conflicts: 1 shift/reduce
1386 State 335 conflicts: 9 shift/reduce, 2 reduce/reduce
1387 State 356 conflicts: 1 shift/reduce
1388 State 360 conflicts: 9 shift/reduce, 2 reduce/reduce
1389 State 427 conflicts: 9 shift/reduce, 2 reduce/reduce
1392 ## -------------------------------- ##
1393 ## GNU pic (Groff 1.18.1) Grammar. ##
1394 ## -------------------------------- ##
1396 # GNU pic, part of groff.
1398 # Bison once reported shift/reduce conflicts that it shouldn't have.
1400 AT_TEST_EXISTING_GRAMMAR([[GNU pic (Groff 1.18.1) Grammar]],
1411 %token LEFT_ARROW_HEAD
1412 %token RIGHT_ARROW_HEAD
1413 %token DOUBLE_ARROW_HEAD
1523 /* this ensures that plot 17 "%g" parses as (plot 17 "%g") */
1527 /* give text adjustments higher precedence than TEXT, so that
1528 box "foo" above ljust == box ("foo" above ljust)
1531 %left LJUST RJUST ABOVE BELOW
1534 /* Give attributes that take an optional expression a higher
1535 precedence than left and right, so that eg `line chop left'
1537 %left CHOP SOLID DASHED DOTTED UP DOWN FILL COLORED OUTLINED
1540 %left VARIABLE NUMBER '(' SIN COS ATAN2 LOG EXP SQRT K_MAX K_MIN INT RAND SRAND LAST
1541 %left ORDINAL HERE '`'
1543 %left BOX CIRCLE ELLIPSE ARC LINE ARROW SPLINE '[' /* ] */
1545 /* these need to be lower than '-' */
1546 %left HEIGHT RADIUS WIDTH DIAMETER FROM TO AT THICKNESS
1548 /* these must have higher precedence than CHOP so that `label %prec CHOP'
1550 %left DOT_N DOT_E DOT_W DOT_S DOT_NE DOT_SE DOT_NW DOT_SW DOT_C
1551 %left DOT_START DOT_END TOP BOTTOM LEFT_CORNER RIGHT_CORNER
1552 %left UPPER LOWER NORTH SOUTH EAST WEST CENTER START END
1557 %left EQUALEQUAL NOTEQUAL
1558 %left '<' '>' LESSEQUAL GREATEREQUAL
1575 optional_separator middle_element_list optional_separator
1578 middle_element_list:
1580 | middle_element_list separator element
1594 VARIABLE '=' any_expr
1595 | VARIABLE ':' '=' any_expr
1601 | COMMAND print_args
1617 | FOR VARIABLE '=' expr TO expr optional_by DO
1630 | reset_variables VARIABLE
1631 | reset_variables ',' VARIABLE
1636 | print_args print_arg
1642 | position %prec ','
1662 text EQUALEQUAL text
1663 | text NOTEQUAL text
1664 | text_expr ANDAND text_expr
1665 | text_expr ANDAND expr
1666 | expr ANDAND text_expr
1667 | text_expr OROR text_expr
1668 | text_expr OROR expr
1669 | expr OROR text_expr
1681 | LABEL ':' optional_separator element
1682 | LABEL ':' optional_separator position_not_place
1683 | LABEL ':' optional_separator place
1684 | '{' {} element_list '}'
1710 | object_spec HEIGHT expr
1711 | object_spec RADIUS expr
1712 | object_spec WIDTH expr
1713 | object_spec DIAMETER expr
1714 | object_spec expr %prec HEIGHT
1716 | object_spec UP expr
1718 | object_spec DOWN expr
1720 | object_spec RIGHT expr
1722 | object_spec LEFT expr
1723 | object_spec FROM position
1724 | object_spec TO position
1725 | object_spec AT position
1726 | object_spec WITH path
1727 | object_spec WITH position %prec ','
1728 | object_spec BY expr_pair
1731 | object_spec DOTTED
1732 | object_spec DOTTED expr
1733 | object_spec DASHED
1734 | object_spec DASHED expr
1736 | object_spec FILL expr
1737 | object_spec SHADED text
1738 | object_spec COLORED text
1739 | object_spec OUTLINED text
1741 | object_spec CHOP expr
1743 | object_spec INVISIBLE
1744 | object_spec LEFT_ARROW_HEAD
1745 | object_spec RIGHT_ARROW_HEAD
1746 | object_spec DOUBLE_ARROW_HEAD
1749 | object_spec text %prec TEXT
1754 | object_spec THICKNESS expr
1755 | object_spec ALIGNED
1760 | SPRINTF '(' TEXT sprintf_args ')'
1765 | sprintf_args ',' expr
1775 | position '+' expr_pair
1776 | position '-' expr_pair
1777 | '(' position ',' position ')'
1778 | expr between position AND position
1779 | expr '<' position ',' position '>'
1784 | OF THE WAY BETWEEN
1793 /* line at A left == line (at A) left */
1812 optional_ordinal_last:
1819 | optional_ordinal_last object_type
1836 | label_path '.' LABEL
1841 /* give this a lower precedence than LEFT and RIGHT so that
1842 [A: box] with .A left == [A: box] with (.A left) */
1843 | label_path %prec TEXT
1849 | '(' relative_path ',' relative_path ')'
1851 /* The rest of these rules are a compatibility sop. */
1852 | ORDINAL LAST object_type relative_path
1853 | LAST object_type relative_path
1854 | ORDINAL object_type relative_path
1855 | LABEL relative_path
1882 | UPPER RIGHT_CORNER
1883 | LOWER RIGHT_CORNER
1907 | '-' expr %prec '!'
1909 | SIN '(' any_expr ')'
1910 | COS '(' any_expr ')'
1911 | ATAN2 '(' any_expr ',' any_expr ')'
1912 | LOG '(' any_expr ')'
1913 | EXP '(' any_expr ')'
1914 | SQRT '(' any_expr ')'
1915 | K_MAX '(' any_expr ',' any_expr ')'
1916 | K_MIN '(' any_expr ',' any_expr ')'
1917 | INT '(' any_expr ')'
1918 | RAND '(' any_expr ')'
1920 | SRAND '(' any_expr ')'
1922 | expr LESSEQUAL expr
1924 | expr GREATEREQUAL expr
1925 | expr EQUALEQUAL expr
1926 | expr NOTEQUAL expr
1935 dnl For example, in pic:
1943 dnl Even using groff 1.19.2, the 3rd line above is a syntax error. Change
1944 dnl "left" to "right", and it still is. However, add "upper" or "lower" before
1945 dnl "left or "right" and it's accepted to mean ".nw", ".ne", ".sw", or ".se".
1946 dnl (There seem to be no aliases for "north" and "south" that can stand alone
1947 dnl without being followed by "of".)
1948 [[VARIABLE, '=', LABEL, LEFT, DOT_X]],
1951 [[input.y:470.11-48: warning: rule useless in parser due to conflicts: path: ORDINAL LAST object_type relative_path
1955 [AT_COND_CASE([[LALR]], [[422]], [[canonical LR]], [[4833]], [[427]])],
1957 dnl LALR1-DIFF not used for canonical LR(1) because the diff is huge.
1958 dnl Isocore map from LALR(1) state number to new state number plus descriptions
1959 dnl of any change in the actions resulting in a change in accepted language:
1960 dnl - 102 -> 423: reduce -> shift on LEFT and RIGHT
1965 [AT_COND_CASE([[LALR]], [],
1966 [[@@ -1223,7 +1223,7 @@
1967 text_expr go to state 112
1968 text go to state 113
1969 place go to state 114
1970 - label go to state 102
1971 + label go to state 423
1972 ordinal go to state 103
1973 optional_ordinal_last go to state 104
1974 nth_primitive go to state 105
1975 @@ -1377,7 +1377,7 @@
1976 '!' shift, and go to state 94
1978 place go to state 114
1979 - label go to state 102
1980 + label go to state 423
1981 ordinal go to state 103
1982 optional_ordinal_last go to state 104
1983 nth_primitive go to state 105
1984 @@ -1854,7 +1854,7 @@
1986 text go to state 162
1987 place go to state 114
1988 - label go to state 102
1989 + label go to state 423
1990 ordinal go to state 103
1991 optional_ordinal_last go to state 104
1992 nth_primitive go to state 105
1993 @@ -2047,7 +2047,7 @@
1994 text_expr go to state 112
1995 text go to state 113
1996 place go to state 114
1997 - label go to state 102
1998 + label go to state 423
1999 ordinal go to state 103
2000 optional_ordinal_last go to state 104
2001 nth_primitive go to state 105
2002 @@ -2571,7 +2571,7 @@
2003 position_not_place go to state 99
2004 expr_pair go to state 191
2005 place go to state 101
2006 - label go to state 102
2007 + label go to state 423
2008 ordinal go to state 103
2009 optional_ordinal_last go to state 104
2010 nth_primitive go to state 105
2011 @@ -2732,7 +2732,7 @@
2012 text_expr go to state 112
2013 text go to state 113
2014 place go to state 114
2015 - label go to state 102
2016 + label go to state 423
2017 ordinal go to state 103
2018 optional_ordinal_last go to state 104
2019 nth_primitive go to state 105
2020 @@ -2875,7 +2875,7 @@
2021 '!' shift, and go to state 94
2023 place go to state 114
2024 - label go to state 102
2025 + label go to state 423
2026 ordinal go to state 103
2027 optional_ordinal_last go to state 104
2028 nth_primitive go to state 105
2029 @@ -3018,7 +3018,7 @@
2030 '!' shift, and go to state 94
2032 place go to state 114
2033 - label go to state 102
2034 + label go to state 423
2035 ordinal go to state 103
2036 optional_ordinal_last go to state 104
2037 nth_primitive go to state 105
2038 @@ -3256,7 +3256,7 @@
2042 - 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, '(', '`', ',', '>', '+', '-', '!', ';', '}', '@:>@', ')']
2043 + 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, '(', '`', '+', '-', '!', ';', '}', '@:>@']
2044 147 | label . corner
2045 153 label: label . '.' LABEL
2047 @@ -3645,7 +3645,7 @@
2048 text_expr go to state 112
2049 text go to state 113
2050 place go to state 114
2051 - label go to state 102
2052 + label go to state 423
2053 ordinal go to state 103
2054 optional_ordinal_last go to state 104
2055 nth_primitive go to state 105
2056 @@ -3804,7 +3804,7 @@
2057 text_expr go to state 239
2058 text go to state 113
2059 place go to state 114
2060 - label go to state 102
2061 + label go to state 423
2062 ordinal go to state 103
2063 optional_ordinal_last go to state 104
2064 nth_primitive go to state 105
2065 @@ -4481,7 +4481,7 @@
2066 $default reduce using rule 89 (object_spec)
2068 place go to state 114
2069 - label go to state 102
2070 + label go to state 423
2071 ordinal go to state 103
2072 optional_ordinal_last go to state 104
2073 nth_primitive go to state 105
2074 @@ -4673,7 +4673,7 @@
2075 $default reduce using rule 91 (object_spec)
2077 place go to state 114
2078 - label go to state 102
2079 + label go to state 423
2080 ordinal go to state 103
2081 optional_ordinal_last go to state 104
2082 nth_primitive go to state 105
2083 @@ -4867,7 +4867,7 @@
2084 $default reduce using rule 95 (object_spec)
2086 place go to state 114
2087 - label go to state 102
2088 + label go to state 423
2089 ordinal go to state 103
2090 optional_ordinal_last go to state 104
2091 nth_primitive go to state 105
2092 @@ -5065,7 +5065,7 @@
2093 $default reduce using rule 93 (object_spec)
2095 place go to state 114
2096 - label go to state 102
2097 + label go to state 423
2098 ordinal go to state 103
2099 optional_ordinal_last go to state 104
2100 nth_primitive go to state 105
2101 @@ -5260,7 +5260,7 @@
2102 '!' shift, and go to state 94
2104 place go to state 114
2105 - label go to state 102
2106 + label go to state 423
2107 ordinal go to state 103
2108 optional_ordinal_last go to state 104
2109 nth_primitive go to state 105
2110 @@ -5403,7 +5403,7 @@
2111 '!' shift, and go to state 94
2113 place go to state 114
2114 - label go to state 102
2115 + label go to state 423
2116 ordinal go to state 103
2117 optional_ordinal_last go to state 104
2118 nth_primitive go to state 105
2119 @@ -5546,7 +5546,7 @@
2120 '!' shift, and go to state 94
2122 place go to state 114
2123 - label go to state 102
2124 + label go to state 423
2125 ordinal go to state 103
2126 optional_ordinal_last go to state 104
2127 nth_primitive go to state 105
2128 @@ -5689,7 +5689,7 @@
2129 '!' shift, and go to state 94
2131 place go to state 114
2132 - label go to state 102
2133 + label go to state 423
2134 ordinal go to state 103
2135 optional_ordinal_last go to state 104
2136 nth_primitive go to state 105
2137 @@ -6475,7 +6475,7 @@
2139 expr_pair go to state 280
2140 place go to state 114
2141 - label go to state 102
2142 + label go to state 423
2143 ordinal go to state 103
2144 optional_ordinal_last go to state 104
2145 nth_primitive go to state 105
2146 @@ -6633,7 +6633,7 @@
2147 $default reduce using rule 105 (object_spec)
2149 place go to state 114
2150 - label go to state 102
2151 + label go to state 423
2152 ordinal go to state 103
2153 optional_ordinal_last go to state 104
2154 nth_primitive go to state 105
2155 @@ -6825,7 +6825,7 @@
2156 $default reduce using rule 107 (object_spec)
2158 place go to state 114
2159 - label go to state 102
2160 + label go to state 423
2161 ordinal go to state 103
2162 optional_ordinal_last go to state 104
2163 nth_primitive go to state 105
2164 @@ -7017,7 +7017,7 @@
2165 $default reduce using rule 114 (object_spec)
2167 place go to state 114
2168 - label go to state 102
2169 + label go to state 423
2170 ordinal go to state 103
2171 optional_ordinal_last go to state 104
2172 nth_primitive go to state 105
2173 @@ -7264,7 +7264,7 @@
2174 '!' shift, and go to state 94
2176 place go to state 114
2177 - label go to state 102
2178 + label go to state 423
2179 ordinal go to state 103
2180 optional_ordinal_last go to state 104
2181 nth_primitive go to state 105
2182 @@ -7408,7 +7408,7 @@
2183 $default reduce using rule 109 (object_spec)
2185 place go to state 114
2186 - label go to state 102
2187 + label go to state 423
2188 ordinal go to state 103
2189 optional_ordinal_last go to state 104
2190 nth_primitive go to state 105
2191 @@ -7819,12 +7819,12 @@
2192 position_not_place go to state 296
2193 expr_pair go to state 100
2194 place go to state 297
2195 - label go to state 102
2196 + label go to state 423
2197 ordinal go to state 103
2198 optional_ordinal_last go to state 104
2199 nth_primitive go to state 105
2200 corner go to state 106
2201 - expr go to state 266
2202 + expr go to state 424
2206 @@ -7987,7 +7987,7 @@
2207 text_expr go to state 112
2208 text go to state 113
2209 place go to state 114
2210 - label go to state 102
2211 + label go to state 423
2212 ordinal go to state 103
2213 optional_ordinal_last go to state 104
2214 nth_primitive go to state 105
2215 @@ -8172,7 +8172,7 @@
2216 text_expr go to state 112
2217 text go to state 113
2218 place go to state 114
2219 - label go to state 102
2220 + label go to state 423
2221 ordinal go to state 103
2222 optional_ordinal_last go to state 104
2223 nth_primitive go to state 105
2224 @@ -8333,7 +8333,7 @@
2225 text_expr go to state 112
2226 text go to state 113
2227 place go to state 114
2228 - label go to state 102
2229 + label go to state 423
2230 ordinal go to state 103
2231 optional_ordinal_last go to state 104
2232 nth_primitive go to state 105
2233 @@ -8494,7 +8494,7 @@
2234 text_expr go to state 112
2235 text go to state 113
2236 place go to state 114
2237 - label go to state 102
2238 + label go to state 423
2239 ordinal go to state 103
2240 optional_ordinal_last go to state 104
2241 nth_primitive go to state 105
2242 @@ -8655,7 +8655,7 @@
2243 text_expr go to state 112
2244 text go to state 113
2245 place go to state 114
2246 - label go to state 102
2247 + label go to state 423
2248 ordinal go to state 103
2249 optional_ordinal_last go to state 104
2250 nth_primitive go to state 105
2251 @@ -8816,7 +8816,7 @@
2252 text_expr go to state 112
2253 text go to state 113
2254 place go to state 114
2255 - label go to state 102
2256 + label go to state 423
2257 ordinal go to state 103
2258 optional_ordinal_last go to state 104
2259 nth_primitive go to state 105
2260 @@ -8977,7 +8977,7 @@
2261 text_expr go to state 112
2262 text go to state 113
2263 place go to state 114
2264 - label go to state 102
2265 + label go to state 423
2266 ordinal go to state 103
2267 optional_ordinal_last go to state 104
2268 nth_primitive go to state 105
2269 @@ -9138,7 +9138,7 @@
2270 text_expr go to state 112
2271 text go to state 113
2272 place go to state 114
2273 - label go to state 102
2274 + label go to state 423
2275 ordinal go to state 103
2276 optional_ordinal_last go to state 104
2277 nth_primitive go to state 105
2278 @@ -9299,7 +9299,7 @@
2279 text_expr go to state 112
2280 text go to state 113
2281 place go to state 114
2282 - label go to state 102
2283 + label go to state 423
2284 ordinal go to state 103
2285 optional_ordinal_last go to state 104
2286 nth_primitive go to state 105
2287 @@ -9460,7 +9460,7 @@
2288 text_expr go to state 112
2289 text go to state 113
2290 place go to state 114
2291 - label go to state 102
2292 + label go to state 423
2293 ordinal go to state 103
2294 optional_ordinal_last go to state 104
2295 nth_primitive go to state 105
2296 @@ -9623,7 +9623,7 @@
2297 text_expr go to state 112
2298 text go to state 113
2299 place go to state 114
2300 - label go to state 102
2301 + label go to state 423
2302 ordinal go to state 103
2303 optional_ordinal_last go to state 104
2304 nth_primitive go to state 105
2305 @@ -9784,7 +9784,7 @@
2306 text_expr go to state 112
2307 text go to state 113
2308 place go to state 114
2309 - label go to state 102
2310 + label go to state 423
2311 ordinal go to state 103
2312 optional_ordinal_last go to state 104
2313 nth_primitive go to state 105
2314 @@ -9921,7 +9921,7 @@
2316 $default reduce using rule 47 (any_expr)
2318 - between go to state 237
2319 + between go to state 425
2323 @@ -10152,7 +10152,7 @@
2325 expr_pair go to state 317
2326 place go to state 114
2327 - label go to state 102
2328 + label go to state 423
2329 ordinal go to state 103
2330 optional_ordinal_last go to state 104
2331 nth_primitive go to state 105
2332 @@ -10298,7 +10298,7 @@
2334 expr_pair go to state 318
2335 place go to state 114
2336 - label go to state 102
2337 + label go to state 423
2338 ordinal go to state 103
2339 optional_ordinal_last go to state 104
2340 nth_primitive go to state 105
2341 @@ -10622,7 +10622,7 @@
2342 '!' shift, and go to state 94
2344 place go to state 114
2345 - label go to state 102
2346 + label go to state 423
2347 ordinal go to state 103
2348 optional_ordinal_last go to state 104
2349 nth_primitive go to state 105
2350 @@ -10765,7 +10765,7 @@
2351 '!' shift, and go to state 94
2353 place go to state 114
2354 - label go to state 102
2355 + label go to state 423
2356 ordinal go to state 103
2357 optional_ordinal_last go to state 104
2358 nth_primitive go to state 105
2359 @@ -10908,7 +10908,7 @@
2360 '!' shift, and go to state 94
2362 place go to state 114
2363 - label go to state 102
2364 + label go to state 423
2365 ordinal go to state 103
2366 optional_ordinal_last go to state 104
2367 nth_primitive go to state 105
2368 @@ -11051,7 +11051,7 @@
2369 '!' shift, and go to state 94
2371 place go to state 114
2372 - label go to state 102
2373 + label go to state 423
2374 ordinal go to state 103
2375 optional_ordinal_last go to state 104
2376 nth_primitive go to state 105
2377 @@ -11194,7 +11194,7 @@
2378 '!' shift, and go to state 94
2380 place go to state 114
2381 - label go to state 102
2382 + label go to state 423
2383 ordinal go to state 103
2384 optional_ordinal_last go to state 104
2385 nth_primitive go to state 105
2386 @@ -11337,7 +11337,7 @@
2387 '!' shift, and go to state 94
2389 place go to state 114
2390 - label go to state 102
2391 + label go to state 423
2392 ordinal go to state 103
2393 optional_ordinal_last go to state 104
2394 nth_primitive go to state 105
2395 @@ -11480,7 +11480,7 @@
2396 '!' shift, and go to state 94
2398 place go to state 114
2399 - label go to state 102
2400 + label go to state 423
2401 ordinal go to state 103
2402 optional_ordinal_last go to state 104
2403 nth_primitive go to state 105
2404 @@ -11637,7 +11637,7 @@
2405 position_not_place go to state 99
2406 expr_pair go to state 100
2407 place go to state 101
2408 - label go to state 102
2409 + label go to state 423
2410 ordinal go to state 103
2411 optional_ordinal_last go to state 104
2412 nth_primitive go to state 105
2413 @@ -11780,7 +11780,7 @@
2414 '!' shift, and go to state 94
2416 place go to state 114
2417 - label go to state 102
2418 + label go to state 423
2419 ordinal go to state 103
2420 optional_ordinal_last go to state 104
2421 nth_primitive go to state 105
2422 @@ -11923,7 +11923,7 @@
2423 '!' shift, and go to state 94
2425 place go to state 114
2426 - label go to state 102
2427 + label go to state 423
2428 ordinal go to state 103
2429 optional_ordinal_last go to state 104
2430 nth_primitive go to state 105
2431 @@ -12066,7 +12066,7 @@
2432 '!' shift, and go to state 94
2434 place go to state 114
2435 - label go to state 102
2436 + label go to state 423
2437 ordinal go to state 103
2438 optional_ordinal_last go to state 104
2439 nth_primitive go to state 105
2440 @@ -12209,7 +12209,7 @@
2441 '!' shift, and go to state 94
2443 place go to state 114
2444 - label go to state 102
2445 + label go to state 423
2446 ordinal go to state 103
2447 optional_ordinal_last go to state 104
2448 nth_primitive go to state 105
2449 @@ -12352,7 +12352,7 @@
2450 '!' shift, and go to state 94
2452 place go to state 114
2453 - label go to state 102
2454 + label go to state 423
2455 ordinal go to state 103
2456 optional_ordinal_last go to state 104
2457 nth_primitive go to state 105
2458 @@ -12495,7 +12495,7 @@
2459 '!' shift, and go to state 94
2461 place go to state 114
2462 - label go to state 102
2463 + label go to state 423
2464 ordinal go to state 103
2465 optional_ordinal_last go to state 104
2466 nth_primitive go to state 105
2467 @@ -12638,7 +12638,7 @@
2468 '!' shift, and go to state 94
2470 place go to state 114
2471 - label go to state 102
2472 + label go to state 423
2473 ordinal go to state 103
2474 optional_ordinal_last go to state 104
2475 nth_primitive go to state 105
2476 @@ -12794,12 +12794,12 @@
2477 position_not_place go to state 99
2478 expr_pair go to state 100
2479 place go to state 101
2480 - label go to state 102
2481 + label go to state 423
2482 ordinal go to state 103
2483 optional_ordinal_last go to state 104
2484 nth_primitive go to state 105
2485 corner go to state 106
2486 - expr go to state 266
2487 + expr go to state 424
2491 @@ -12937,7 +12937,7 @@
2492 '!' shift, and go to state 94
2494 place go to state 114
2495 - label go to state 102
2496 + label go to state 423
2497 ordinal go to state 103
2498 optional_ordinal_last go to state 104
2499 nth_primitive go to state 105
2500 @@ -13160,7 +13160,7 @@
2501 text_expr go to state 342
2502 text go to state 113
2503 place go to state 114
2504 - label go to state 102
2505 + label go to state 423
2506 ordinal go to state 103
2507 optional_ordinal_last go to state 104
2508 nth_primitive go to state 105
2509 @@ -13319,7 +13319,7 @@
2510 text_expr go to state 344
2511 text go to state 113
2512 place go to state 114
2513 - label go to state 102
2514 + label go to state 423
2515 ordinal go to state 103
2516 optional_ordinal_last go to state 104
2517 nth_primitive go to state 105
2518 @@ -13502,7 +13502,7 @@
2519 text_expr go to state 348
2520 text go to state 113
2521 place go to state 114
2522 - label go to state 102
2523 + label go to state 423
2524 ordinal go to state 103
2525 optional_ordinal_last go to state 104
2526 nth_primitive go to state 105
2527 @@ -13661,7 +13661,7 @@
2528 text_expr go to state 350
2529 text go to state 113
2530 place go to state 114
2531 - label go to state 102
2532 + label go to state 423
2533 ordinal go to state 103
2534 optional_ordinal_last go to state 104
2535 nth_primitive go to state 105
2536 @@ -13804,7 +13804,7 @@
2537 '!' shift, and go to state 94
2539 place go to state 114
2540 - label go to state 102
2541 + label go to state 423
2542 ordinal go to state 103
2543 optional_ordinal_last go to state 104
2544 nth_primitive go to state 105
2545 @@ -14747,7 +14747,7 @@
2546 position_not_place go to state 99
2547 expr_pair go to state 191
2548 place go to state 101
2549 - label go to state 102
2550 + label go to state 423
2551 ordinal go to state 103
2552 optional_ordinal_last go to state 104
2553 nth_primitive go to state 105
2554 @@ -15074,7 +15074,7 @@
2555 text go to state 113
2556 expr_pair go to state 365
2557 place go to state 114
2558 - label go to state 102
2559 + label go to state 423
2560 ordinal go to state 103
2561 optional_ordinal_last go to state 104
2562 nth_primitive go to state 105
2563 @@ -15693,12 +15693,12 @@
2564 position_not_place go to state 99
2565 expr_pair go to state 100
2566 place go to state 101
2567 - label go to state 102
2568 + label go to state 423
2569 ordinal go to state 103
2570 optional_ordinal_last go to state 104
2571 nth_primitive go to state 105
2572 corner go to state 106
2573 - expr go to state 266
2574 + expr go to state 424
2578 @@ -16124,7 +16124,7 @@
2580 $default reduce using rule 239 (expr)
2582 - between go to state 237
2583 + between go to state 425
2585 Conflict between rule 239 and token OF resolved as shift ('<' < OF).
2586 Conflict between rule 239 and token BETWEEN resolved as shift ('<' < BETWEEN).
2587 @@ -17234,7 +17234,7 @@
2588 text_expr go to state 112
2589 text go to state 113
2590 place go to state 114
2591 - label go to state 102
2592 + label go to state 423
2593 ordinal go to state 103
2594 optional_ordinal_last go to state 104
2595 nth_primitive go to state 105
2596 @@ -17416,7 +17416,7 @@
2597 text_expr go to state 112
2598 text go to state 113
2599 place go to state 114
2600 - label go to state 102
2601 + label go to state 423
2602 ordinal go to state 103
2603 optional_ordinal_last go to state 104
2604 nth_primitive go to state 105
2605 @@ -17577,7 +17577,7 @@
2606 text_expr go to state 112
2607 text go to state 113
2608 place go to state 114
2609 - label go to state 102
2610 + label go to state 423
2611 ordinal go to state 103
2612 optional_ordinal_last go to state 104
2613 nth_primitive go to state 105
2614 @@ -17772,12 +17772,12 @@
2615 position_not_place go to state 99
2616 expr_pair go to state 100
2617 place go to state 101
2618 - label go to state 102
2619 + label go to state 423
2620 ordinal go to state 103
2621 optional_ordinal_last go to state 104
2622 nth_primitive go to state 105
2623 corner go to state 106
2624 - expr go to state 266
2625 + expr go to state 424
2629 @@ -18071,7 +18071,7 @@
2630 '!' shift, and go to state 94
2632 place go to state 114
2633 - label go to state 102
2634 + label go to state 423
2635 ordinal go to state 103
2636 optional_ordinal_last go to state 104
2637 nth_primitive go to state 105
2638 @@ -18221,7 +18221,7 @@
2639 '!' shift, and go to state 94
2641 place go to state 114
2642 - label go to state 102
2643 + label go to state 423
2644 ordinal go to state 103
2645 optional_ordinal_last go to state 104
2646 nth_primitive go to state 105
2647 @@ -18830,7 +18830,7 @@
2648 '!' shift, and go to state 94
2650 place go to state 114
2651 - label go to state 102
2652 + label go to state 423
2653 ordinal go to state 103
2654 optional_ordinal_last go to state 104
2655 nth_primitive go to state 105
2656 @@ -18987,7 +18987,7 @@
2657 '!' shift, and go to state 94
2659 place go to state 114
2660 - label go to state 102
2661 + label go to state 423
2662 ordinal go to state 103
2663 optional_ordinal_last go to state 104
2664 nth_primitive go to state 105
2665 @@ -19089,3 +19089,440 @@
2666 29 placeless_element: FOR VARIABLE '=' expr TO expr optional_by DO $@6 DELIMITED .
2668 $default reduce using rule 29 (placeless_element)
2673 + 146 place: label . [$end, AND, DOT_X, DOT_Y, DOT_HT, DOT_WID, DOT_RAD, ',', '>', '+', '-', ';', '}', '@:>@', ')']
2674 + 147 | label . corner
2675 + 153 label: label . '.' LABEL
2676 + 180 corner: . DOT_N
2691 + 195 | . UPPER LEFT
2692 + 196 | . LOWER LEFT
2693 + 197 | . UPPER RIGHT
2694 + 198 | . LOWER RIGHT
2695 + 199 | . LEFT_CORNER
2696 + 200 | . RIGHT_CORNER
2697 + 201 | . UPPER LEFT_CORNER
2698 + 202 | . LOWER LEFT_CORNER
2699 + 203 | . UPPER RIGHT_CORNER
2700 + 204 | . LOWER RIGHT_CORNER
2709 + LEFT shift, and go to state 53
2710 + RIGHT shift, and go to state 54
2711 + DOT_N shift, and go to state 56
2712 + DOT_E shift, and go to state 57
2713 + DOT_W shift, and go to state 58
2714 + DOT_S shift, and go to state 59
2715 + DOT_NE shift, and go to state 60
2716 + DOT_SE shift, and go to state 61
2717 + DOT_NW shift, and go to state 62
2718 + DOT_SW shift, and go to state 63
2719 + DOT_C shift, and go to state 64
2720 + DOT_START shift, and go to state 65
2721 + DOT_END shift, and go to state 66
2722 + TOP shift, and go to state 78
2723 + BOTTOM shift, and go to state 79
2724 + UPPER shift, and go to state 80
2725 + LOWER shift, and go to state 81
2726 + LEFT_CORNER shift, and go to state 82
2727 + RIGHT_CORNER shift, and go to state 83
2728 + NORTH shift, and go to state 84
2729 + SOUTH shift, and go to state 85
2730 + EAST shift, and go to state 86
2731 + WEST shift, and go to state 87
2732 + CENTER shift, and go to state 88
2733 + END shift, and go to state 89
2734 + START shift, and go to state 90
2735 + '.' shift, and go to state 204
2737 + $default reduce using rule 146 (place)
2739 + corner go to state 205
2744 + 140 position_not_place: expr . between position AND position
2745 + 141 | expr . '<' position ',' position '>'
2746 + 142 between: . BETWEEN
2747 + 143 | . OF THE WAY BETWEEN
2748 + 144 expr_pair: expr . ',' expr
2749 + 219 expr: expr . '+' expr
2750 + 220 | expr . '-' expr
2751 + 221 | expr . '*' expr
2752 + 222 | expr . '/' expr
2753 + 223 | expr . '%' expr
2754 + 224 | expr . '^' expr
2755 + 239 | expr . '<' expr
2756 + 240 | expr . LESSEQUAL expr
2757 + 241 | expr . '>' expr
2758 + 242 | expr . GREATEREQUAL expr
2759 + 243 | expr . EQUALEQUAL expr
2760 + 244 | expr . NOTEQUAL expr
2761 + 245 | expr . ANDAND expr
2762 + 246 | expr . OROR expr
2764 + OF shift, and go to state 220
2765 + BETWEEN shift, and go to state 221
2766 + ANDAND shift, and go to state 222
2767 + OROR shift, and go to state 223
2768 + NOTEQUAL shift, and go to state 224
2769 + EQUALEQUAL shift, and go to state 225
2770 + LESSEQUAL shift, and go to state 226
2771 + GREATEREQUAL shift, and go to state 227
2772 + ',' shift, and go to state 228
2773 + '<' shift, and go to state 229
2774 + '>' shift, and go to state 230
2775 + '+' shift, and go to state 231
2776 + '-' shift, and go to state 232
2777 + '*' shift, and go to state 233
2778 + '/' shift, and go to state 234
2779 + '%' shift, and go to state 235
2780 + '^' shift, and go to state 236
2782 + between go to state 425
2787 + 134 position: . position_not_place
2789 + 136 position_not_place: . expr_pair
2790 + 137 | . position '+' expr_pair
2791 + 138 | . position '-' expr_pair
2792 + 139 | . '(' position ',' position ')'
2793 + 140 | . expr between position AND position
2794 + 140 | expr between . position AND position
2795 + 141 | . expr '<' position ',' position '>'
2796 + 144 expr_pair: . expr ',' expr
2797 + 145 | . '(' expr_pair ')'
2798 + 146 place: . label
2799 + 147 | . label corner
2800 + 148 | . corner label
2801 + 149 | . corner OF label
2803 + 151 label: . LABEL
2804 + 152 | . nth_primitive
2805 + 153 | . label '.' LABEL
2806 + 154 ordinal: . ORDINAL
2807 + 155 | . '`' any_expr TH
2808 + 156 optional_ordinal_last: . LAST
2809 + 157 | . ordinal LAST
2810 + 158 nth_primitive: . ordinal object_type
2811 + 159 | . optional_ordinal_last object_type
2812 + 180 corner: . DOT_N
2827 + 195 | . UPPER LEFT
2828 + 196 | . LOWER LEFT
2829 + 197 | . UPPER RIGHT
2830 + 198 | . LOWER RIGHT
2831 + 199 | . LEFT_CORNER
2832 + 200 | . RIGHT_CORNER
2833 + 201 | . UPPER LEFT_CORNER
2834 + 202 | . LOWER LEFT_CORNER
2835 + 203 | . UPPER RIGHT_CORNER
2836 + 204 | . LOWER RIGHT_CORNER
2844 + 212 expr: . VARIABLE
2846 + 214 | . place DOT_X
2847 + 215 | . place DOT_Y
2848 + 216 | . place DOT_HT
2849 + 217 | . place DOT_WID
2850 + 218 | . place DOT_RAD
2851 + 219 | . expr '+' expr
2852 + 220 | . expr '-' expr
2853 + 221 | . expr '*' expr
2854 + 222 | . expr '/' expr
2855 + 223 | . expr '%' expr
2856 + 224 | . expr '^' expr
2858 + 226 | . '(' any_expr ')'
2859 + 227 | . SIN '(' any_expr ')'
2860 + 228 | . COS '(' any_expr ')'
2861 + 229 | . ATAN2 '(' any_expr ',' any_expr ')'
2862 + 230 | . LOG '(' any_expr ')'
2863 + 231 | . EXP '(' any_expr ')'
2864 + 232 | . SQRT '(' any_expr ')'
2865 + 233 | . K_MAX '(' any_expr ',' any_expr ')'
2866 + 234 | . K_MIN '(' any_expr ',' any_expr ')'
2867 + 235 | . INT '(' any_expr ')'
2868 + 236 | . RAND '(' any_expr ')'
2869 + 237 | . RAND '(' ')'
2870 + 238 | . SRAND '(' any_expr ')'
2871 + 239 | . expr '<' expr
2872 + 240 | . expr LESSEQUAL expr
2873 + 241 | . expr '>' expr
2874 + 242 | . expr GREATEREQUAL expr
2875 + 243 | . expr EQUALEQUAL expr
2876 + 244 | . expr NOTEQUAL expr
2877 + 245 | . expr ANDAND expr
2878 + 246 | . expr OROR expr
2881 + LABEL shift, and go to state 48
2882 + VARIABLE shift, and go to state 49
2883 + NUMBER shift, and go to state 50
2884 + ORDINAL shift, and go to state 51
2885 + LAST shift, and go to state 52
2886 + LEFT shift, and go to state 53
2887 + RIGHT shift, and go to state 54
2888 + HERE shift, and go to state 55
2889 + DOT_N shift, and go to state 56
2890 + DOT_E shift, and go to state 57
2891 + DOT_W shift, and go to state 58
2892 + DOT_S shift, and go to state 59
2893 + DOT_NE shift, and go to state 60
2894 + DOT_SE shift, and go to state 61
2895 + DOT_NW shift, and go to state 62
2896 + DOT_SW shift, and go to state 63
2897 + DOT_C shift, and go to state 64
2898 + DOT_START shift, and go to state 65
2899 + DOT_END shift, and go to state 66
2900 + SIN shift, and go to state 67
2901 + COS shift, and go to state 68
2902 + ATAN2 shift, and go to state 69
2903 + LOG shift, and go to state 70
2904 + EXP shift, and go to state 71
2905 + SQRT shift, and go to state 72
2906 + K_MAX shift, and go to state 73
2907 + K_MIN shift, and go to state 74
2908 + INT shift, and go to state 75
2909 + RAND shift, and go to state 76
2910 + SRAND shift, and go to state 77
2911 + TOP shift, and go to state 78
2912 + BOTTOM shift, and go to state 79
2913 + UPPER shift, and go to state 80
2914 + LOWER shift, and go to state 81
2915 + LEFT_CORNER shift, and go to state 82
2916 + RIGHT_CORNER shift, and go to state 83
2917 + NORTH shift, and go to state 84
2918 + SOUTH shift, and go to state 85
2919 + EAST shift, and go to state 86
2920 + WEST shift, and go to state 87
2921 + CENTER shift, and go to state 88
2922 + END shift, and go to state 89
2923 + START shift, and go to state 90
2924 + '(' shift, and go to state 91
2925 + '`' shift, and go to state 92
2926 + '-' shift, and go to state 93
2927 + '!' shift, and go to state 94
2929 + position go to state 426
2930 + position_not_place go to state 99
2931 + expr_pair go to state 100
2932 + place go to state 101
2933 + label go to state 423
2934 + ordinal go to state 103
2935 + optional_ordinal_last go to state 104
2936 + nth_primitive go to state 105
2937 + corner go to state 106
2938 + expr go to state 424
2943 + 137 position_not_place: position . '+' expr_pair
2944 + 138 | position . '-' expr_pair
2945 + 140 | expr between position . AND position
2947 + AND shift, and go to state 427
2948 + '+' shift, and go to state 197
2949 + '-' shift, and go to state 198
2954 + 134 position: . position_not_place
2956 + 136 position_not_place: . expr_pair
2957 + 137 | . position '+' expr_pair
2958 + 138 | . position '-' expr_pair
2959 + 139 | . '(' position ',' position ')'
2960 + 140 | . expr between position AND position
2961 + 140 | expr between position AND . position
2962 + 141 | . expr '<' position ',' position '>'
2963 + 144 expr_pair: . expr ',' expr
2964 + 145 | . '(' expr_pair ')'
2965 + 146 place: . label
2966 + 147 | . label corner
2967 + 148 | . corner label
2968 + 149 | . corner OF label
2970 + 151 label: . LABEL
2971 + 152 | . nth_primitive
2972 + 153 | . label '.' LABEL
2973 + 154 ordinal: . ORDINAL
2974 + 155 | . '`' any_expr TH
2975 + 156 optional_ordinal_last: . LAST
2976 + 157 | . ordinal LAST
2977 + 158 nth_primitive: . ordinal object_type
2978 + 159 | . optional_ordinal_last object_type
2979 + 180 corner: . DOT_N
2994 + 195 | . UPPER LEFT
2995 + 196 | . LOWER LEFT
2996 + 197 | . UPPER RIGHT
2997 + 198 | . LOWER RIGHT
2998 + 199 | . LEFT_CORNER
2999 + 200 | . RIGHT_CORNER
3000 + 201 | . UPPER LEFT_CORNER
3001 + 202 | . LOWER LEFT_CORNER
3002 + 203 | . UPPER RIGHT_CORNER
3003 + 204 | . LOWER RIGHT_CORNER
3011 + 212 expr: . VARIABLE
3013 + 214 | . place DOT_X
3014 + 215 | . place DOT_Y
3015 + 216 | . place DOT_HT
3016 + 217 | . place DOT_WID
3017 + 218 | . place DOT_RAD
3018 + 219 | . expr '+' expr
3019 + 220 | . expr '-' expr
3020 + 221 | . expr '*' expr
3021 + 222 | . expr '/' expr
3022 + 223 | . expr '%' expr
3023 + 224 | . expr '^' expr
3025 + 226 | . '(' any_expr ')'
3026 + 227 | . SIN '(' any_expr ')'
3027 + 228 | . COS '(' any_expr ')'
3028 + 229 | . ATAN2 '(' any_expr ',' any_expr ')'
3029 + 230 | . LOG '(' any_expr ')'
3030 + 231 | . EXP '(' any_expr ')'
3031 + 232 | . SQRT '(' any_expr ')'
3032 + 233 | . K_MAX '(' any_expr ',' any_expr ')'
3033 + 234 | . K_MIN '(' any_expr ',' any_expr ')'
3034 + 235 | . INT '(' any_expr ')'
3035 + 236 | . RAND '(' any_expr ')'
3036 + 237 | . RAND '(' ')'
3037 + 238 | . SRAND '(' any_expr ')'
3038 + 239 | . expr '<' expr
3039 + 240 | . expr LESSEQUAL expr
3040 + 241 | . expr '>' expr
3041 + 242 | . expr GREATEREQUAL expr
3042 + 243 | . expr EQUALEQUAL expr
3043 + 244 | . expr NOTEQUAL expr
3044 + 245 | . expr ANDAND expr
3045 + 246 | . expr OROR expr
3048 + LABEL shift, and go to state 48
3049 + VARIABLE shift, and go to state 49
3050 + NUMBER shift, and go to state 50
3051 + ORDINAL shift, and go to state 51
3052 + LAST shift, and go to state 52
3053 + LEFT shift, and go to state 53
3054 + RIGHT shift, and go to state 54
3055 + HERE shift, and go to state 55
3056 + DOT_N shift, and go to state 56
3057 + DOT_E shift, and go to state 57
3058 + DOT_W shift, and go to state 58
3059 + DOT_S shift, and go to state 59
3060 + DOT_NE shift, and go to state 60
3061 + DOT_SE shift, and go to state 61
3062 + DOT_NW shift, and go to state 62
3063 + DOT_SW shift, and go to state 63
3064 + DOT_C shift, and go to state 64
3065 + DOT_START shift, and go to state 65
3066 + DOT_END shift, and go to state 66
3067 + SIN shift, and go to state 67
3068 + COS shift, and go to state 68
3069 + ATAN2 shift, and go to state 69
3070 + LOG shift, and go to state 70
3071 + EXP shift, and go to state 71
3072 + SQRT shift, and go to state 72
3073 + K_MAX shift, and go to state 73
3074 + K_MIN shift, and go to state 74
3075 + INT shift, and go to state 75
3076 + RAND shift, and go to state 76
3077 + SRAND shift, and go to state 77
3078 + TOP shift, and go to state 78
3079 + BOTTOM shift, and go to state 79
3080 + UPPER shift, and go to state 80
3081 + LOWER shift, and go to state 81
3082 + LEFT_CORNER shift, and go to state 82
3083 + RIGHT_CORNER shift, and go to state 83
3084 + NORTH shift, and go to state 84
3085 + SOUTH shift, and go to state 85
3086 + EAST shift, and go to state 86
3087 + WEST shift, and go to state 87
3088 + CENTER shift, and go to state 88
3089 + END shift, and go to state 89
3090 + START shift, and go to state 90
3091 + '(' shift, and go to state 91
3092 + '`' shift, and go to state 92
3093 + '-' shift, and go to state 93
3094 + '!' shift, and go to state 94
3096 + position go to state 402
3097 + position_not_place go to state 99
3098 + expr_pair go to state 100
3099 + place go to state 101
3100 + label go to state 423
3101 + ordinal go to state 103
3102 + optional_ordinal_last go to state 104
3103 + nth_primitive go to state 105
3104 + corner go to state 106
3105 + expr go to state 424
3111 dnl PARSER-EXIT-VALUE, PARSER-STDOUT, PARSER-STDERR
3112 [AT_COND_CASE([[LALR]], [[1]], [[0]])],
3114 [AT_COND_CASE([[LALR]],
3115 [[syntax error, unexpected LEFT