1 # Exercising Bison on actual grammars. -*- Autotest -*-
3 # Copyright (C) 1989-1992, 2000-2005, 2007, 2009-2013 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 [dnl We need diff -u, which is not portable.
39 AT_CHECK([diff -u /dev/null /dev/null || exit 77], [0], [ignore])
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/^ $//']],
47 AT_TEST_TABLES_AND_PARSE([$2[: LALR(1)]], [[LALR]], [[last-state]],
48 [[%define lr.type lalr
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
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
61 [$4], [$5], [$6], [$7],
62 [$9], [$10], [$11], [$12])
64 m4_popdef([AT_LALR1_DIFF_CHECK])
69 ## ----------------------- ##
70 ## GNU AWK 3.1.0 Grammar. ##
71 ## ----------------------- ##
73 # We have been careful to strip all the actions excepts the
76 # There are 65 SR conflicts. Bison was once wrong, due to an incorrect
77 # computation of nullable. It reported 485 SR conflicts!
79 AT_TEST_EXISTING_GRAMMAR([[GNU AWK 3.1.0 Grammar]],
82 %token FUNC_CALL NAME REGEXP
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
92 %token LEX_AND LEX_OR INCREMENT DECREMENT
93 %token LEX_BUILTIN LEX_LENGTH
95 /* Lowest to highest */
102 %left FUNC_CALL LEX_BUILTIN LEX_LENGTH
105 %nonassoc RELOP '<' '>' '|' APPEND_OP TWOWAYIO
107 %left YSTRING YNUMBER
112 %left INCREMENT DECREMENT
118 : opt_nls program opt_nls
130 : LEX_BEGIN {} action
132 | LEX_BEGIN statement_term
133 | LEX_END statement_term
136 | pattern statement_term
137 | function_prologue function_body
152 : LEX_FUNCTION {} func_name '(' opt_param_list r_paren opt_nls
156 : l_brace statements r_brace opt_semi opt_nls
157 | l_brace r_brace opt_semi opt_nls
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.
174 : l_brace statements r_brace opt_semi opt_nls
175 | l_brace r_brace opt_semi opt_nls
180 | statements statement
193 | l_brace statements r_brace
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
219 : LEX_IF '(' exp r_paren opt_nls statement
220 | LEX_IF '(' exp r_paren opt_nls statement
221 LEX_ELSE opt_nls statement
254 | param_list comma NAME
257 | param_list comma error
260 /* optional expression, as in for loop */
273 | rexpression_list comma rexp
275 | rexpression_list error
276 | rexpression_list error rexp
277 | rexpression_list comma error
287 | expression_list comma exp
289 | expression_list error
290 | expression_list error exp
291 | expression_list comma error
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
304 | '!' regexp %prec UNARY
309 | exp '?' exp ':' exp
311 | exp simp_exp %prec CONCAT_OP
315 : variable ASSIGNOP {} rexp
318 | LEX_GETLINE opt_variable input_redir
320 | '!' regexp %prec UNARY
324 | rexp '?' rexp ':' rexp
326 | rexp simp_exp %prec CONCAT_OP
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
343 : '!' simp_exp %prec UNARY
346 '(' opt_expression_list r_paren
347 | LEX_LENGTH '(' opt_expression_list r_paren
349 | FUNC_CALL '(' opt_expression_list r_paren
355 | '-' simp_exp %prec UNARY
356 | '+' simp_exp %prec UNARY
366 | NAME '[' expression_list ']'
367 | '$' non_post_simp_exp
397 dnl For example, in AWK:
401 dnl The grammar below (from GNU AWK 3.1.0) using canonical LR(1) or IELR(1)
406 dnl That is, they shift `*' immediately and make it part of the getline
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.
413 dnl GNU AWK 3.1.2, 3.1.3, 3.1.4, and 3.1.5 parse it as:
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:
422 dnl http://www.opengroup.org/pubs/online/7908799/xcu/awk.html
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, ';']],
429 [AT_COND_CASE([[canonical LR]],
430 [[input.y: conflicts: 265 shift/reduce]],
431 [[input.y: conflicts: 65 shift/reduce]])[
435 [AT_COND_CASE([[LALR]], [[319]], [[canonical LR]], [[2358]], [[328]])],
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:
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
453 NAME shift, and go to state 9
454 - '$' shift, and go to state 24
455 + '$' shift, and go to state 320
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
462 NAME shift, and go to state 9
463 - '$' shift, and go to state 24
464 + '$' shift, and go to state 320
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
471 NAME shift, and go to state 9
472 - '$' shift, and go to state 24
473 + '$' shift, and go to state 320
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
480 NAME shift, and go to state 9
481 - '$' shift, and go to state 24
482 + '$' shift, and go to state 320
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 .
489 $default reduce using rule 45 (statement)
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
499 + 144 | . FUNC_CALL '(' opt_expression_list r_paren
501 + 146 | . INCREMENT variable
502 + 147 | . DECREMENT variable
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
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
526 + non_post_simp_exp go to state 62
527 + variable go to state 63
532 + 146 non_post_simp_exp: INCREMENT . variable
533 + 154 variable: . NAME
534 + 155 | . NAME '[' expression_list ']'
535 + 156 | . '$' non_post_simp_exp
537 + NAME shift, and go to state 9
538 + '$' shift, and go to state 320
540 + variable go to state 50
545 + 147 non_post_simp_exp: DECREMENT . variable
546 + 154 variable: . NAME
547 + 155 | . NAME '[' expression_list ']'
548 + 156 | . '$' non_post_simp_exp
550 + NAME shift, and go to state 9
551 + '$' shift, and go to state 320
553 + variable go to state 51
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
572 + 144 | . FUNC_CALL '(' opt_expression_list r_paren
574 + 146 | . INCREMENT variable
575 + 147 | . DECREMENT variable
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
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
599 + simp_exp go to state 326
600 + non_post_simp_exp go to state 35
601 + variable go to state 57
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
620 + 144 | . FUNC_CALL '(' opt_expression_list r_paren
622 + 146 | . INCREMENT variable
623 + 147 | . DECREMENT variable
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
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
647 + simp_exp go to state 327
648 + non_post_simp_exp go to state 35
649 + variable go to state 57
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
669 + 144 | . FUNC_CALL '(' opt_expression_list r_paren
671 + 146 | . INCREMENT variable
672 + 147 | . DECREMENT variable
675 + 150 | . '-' simp_exp
676 + 151 | . '+' simp_exp
677 + 154 variable: . NAME
678 + 155 | . NAME '[' expression_list ']'
679 + 156 | . '$' non_post_simp_exp
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
695 + simp_exp go to state 328
696 + non_post_simp_exp go to state 35
697 + variable go to state 57
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, '+', '-', '!', '$', '(', ')', '@:>@', '{', ';']
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
715 + $default reduce using rule 151 (non_post_simp_exp)
717 + Conflict between rule 151 and token '+' resolved as reduce ('+' < UNARY).
718 + Conflict between rule 151 and token '-' resolved as reduce ('-' < UNARY).
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, '+', '-', '!', '$', '(', ')', '@:>@', '{', ';']
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
736 + $default reduce using rule 150 (non_post_simp_exp)
738 + Conflict between rule 150 and token '+' resolved as reduce ('+' < UNARY).
739 + Conflict between rule 150 and token '-' resolved as reduce ('-' < UNARY).
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, '+', '-', '!', '$', '(', ')', '@:>@', '{', ';']
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
757 + $default reduce using rule 139 (non_post_simp_exp)
759 + Conflict between rule 139 and token '+' resolved as reduce ('+' < UNARY).
760 + Conflict between rule 139 and token '-' resolved as reduce ('-' < UNARY).
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.
770 [AT_COND_CASE([[LALR]],
771 [[syntax error, unexpected '*', expecting NEWLINE or '{' or ';'
774 ## ----------------- ##
775 ## GNU Cim Grammar. ##
776 ## ----------------- ##
778 # GNU Cim, the GNU Simula 87 Compiler.
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!!!
783 AT_TEST_EXISTING_GRAMMAR([[GNU Cim Grammar]],
786 HACTIVATE HAFTER /*HAND*/ HARRAY HAT
787 HBEFORE HBEGIN HBOOLEAN
788 HCHARACTER HCLASS /*HCOMMENT*/ HCONC
790 HELSE HEND HEQ /*HEQV*/ HEXTERNAL
794 HIF /*HIMP*/ HIN HINNER HINSPECT HINTEGER HIS
796 HNAME HNE HNEW HNONE /*HNOT*/ HNOTEXT
798 HPRIOR HPROCEDURE HPROTECTED
800 HREACTIVATE HREAL HREF
802 HTEXT HTHEN HTHIS HTO
807 HASSIGNVALUE HASSIGNREF
808 /*HDOT*/ HPAREXPSEPARATOR HLABELSEPARATOR HSTATEMENTSEPARATOR
811 HADD HSUB HMUL HDIV HINTDIV HEXP
815 %token HBOOLEANKONST HINTEGERKONST HCHARACTERKONST
830 %left HVALRELOPERATOR HREFRELOPERATOR HOBJRELOPERATOR
836 %left HFACTOROPERATOR
837 %left HPRIMARYOPERATOR
846 /* GRAMATIKK FOR PROGRAM MODULES */
849 | error HSTATEMENTSEPARATOR MBEE_DECLSTMS
851 EXT_DECLARATION : HEXTERNAL
869 EXTERNAL_KIND_ITEM: EXT_IDENT
882 MBEE_REST_EXT_LIST: /* EMPTY
883 | HPAREXPSEPARATOR EXT_KIND_LIST
885 EXT_KIND_LIST : EXT_KIND_ITEM
886 | EXT_KIND_LIST HPAREXPSEPARATOR EXT_KIND_ITEM
888 EXT_KIND_ITEM : HIDENTIFIER
892 EMPTY_BLOCK : /*EMPT*/
896 | EXT_LIST HPAREXPSEPARATOR EXT_ITEM
898 EXT_ITEM : HIDENTIFIER
901 EXT_IDENT : /* EMPTY */
905 /* GRAMATIKK FOR TYPER */
924 /* GRAMATIKK FOR DEL AV SETNINGER */
925 MBEE_ELSE_PART : /*EMPT*/
935 FOR_LIST : FOR_LIST_ELEMENT
940 FOR_LIST_ELEMENT: EXPRESSION
943 MBEE_F_L_EL_R_PT: /*EMPT*/
955 CONN_STATE_R_PT : WHEN_CLAUSE_LIST
959 WHEN_CLAUSE_LIST: HWHEN
969 MBEE_OTWI_CLAUS : /*EMPT*/
974 ACTIVATOR : HACTIVATE
978 | ATDELAY EXPRESSION {}
986 BEFOREAFTER : HBEFORE
992 /* GRAMATIKK FOR SETNINGER OG DEKLARASJONER */
993 MODULSTATEMENT : HWHILE
1027 | EXPRESSION_SIMP HBEGIN error HSTATEMENTSEPARATOR
1029 | EXPRESSION_SIMP HBEGIN error HEND
1031 | ACTIVATOR EXPRESSION SCHEDULE
1036 | MBEE_TYPE HPROCEDURE
1060 DECLSTATEMENT : MODULSTATEMENT
1078 BLOCK : DECLSTATEMENT
1079 | HBEGIN MBEE_DECLSTMS HEND
1080 | HBEGIN error HSTATEMENTSEPARATOR MBEE_DECLSTMS HEND
1083 MBEE_DECLSTMS : MBEE_DECLSTMSU
1085 MBEE_DECLSTMSU : DECLSTATEMENT
1090 MODULS : MODULSTATEMENT
1091 | MODULS HSTATEMENTSEPARATOR MODULSTATEMENT
1093 /* GRAMATIKK FOR DEL AV DEKLARASJONER */
1094 ARR_SEGMENT_LIST: ARR_SEGMENT
1099 ARR_SEGMENT : ARRAY_SEGMENT
1101 BAUND_PAIR_LIST HENDPAR
1103 ARRAY_SEGMENT : ARRAY_SEGMENT_EL {}
1109 ARRAY_SEGMENT_EL: HIDENTIFIER
1111 BAUND_PAIR_LIST : BAUND_PAIR
1116 BAUND_PAIR : EXPRESSION
1120 SWITCH_LIST : EXPRESSION
1125 HEADING : MBEE_FMAL_PAR_P HSTATEMENTSEPARATOR {}
1131 MBEE_FMAL_PAR_P : /*EMPT*/
1134 FMAL_PAR_PART : HBEGPAR NO_TYPE
1137 MBEE_LISTV : /*EMPT*/
1141 | FPP_CATEG HDOTDOTDOT
1143 HPAREXPSEPARATOR LISTV
1146 HPAREXPSEPARATOR LISTV
1148 FPP_HEADING : HBEGPAR NO_TYPE
1149 FPP_MBEE_LISTV HENDPAR
1151 FPP_MBEE_LISTV : /*EMPT*/
1154 FPP_LISTV : FPP_CATEG HDOTDOTDOT
1157 HPAREXPSEPARATOR LISTV
1159 FPP_SPEC : FPP_CATEG SPECIFIER HIDENTIFIER
1160 | FPP_CATEG FPP_PROC_DECL_IN_SPEC
1162 FPP_CATEG : HNAME HLABELSEPARATOR
1163 | HVALUE HLABELSEPARATOR
1164 | HVAR HLABELSEPARATOR
1167 FPP_PROC_DECL_IN_SPEC: MBEE_TYPE HPROCEDURE
1170 FPP_HEADING {} { /* Yes, two "final" actions. */ }
1172 IDENTIFIER_LISTV: HIDENTIFIER
1175 HPAREXPSEPARATOR IDENTIFIER_LISTV
1177 MBEE_MODE_PART : /*EMPT*/
1180 MODE_PART : NAME_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
1196 NAME_PART : HNAME {}
1204 VALUE_PART : HVALUE {}
1205 IDENTIFIER_LISTV HSTATEMENTSEPARATOR
1207 MBEE_SPEC_PART : /*EMPT*/
1210 SPEC_PART : ONE_SPEC
1211 | SPEC_PART ONE_SPEC
1213 ONE_SPEC : SPECIFIER IDENTIFIER_LIST HSTATEMENTSEPARATOR
1214 | NO_TYPE HPROCEDURE HIDENTIFIER HOBJRELOPERATOR
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
1228 PROC_DECL_IN_SPEC: MBEE_TYPE HPROCEDURE
1235 MBEE_BEGIN_END : /* EMPTY */
1238 MBEE_PROT_PART : /*EMPT*/
1241 PROTECTION_PART : PROT_SPECIFIER IDENTIFIER_LIST
1243 | PROTECTION_PART PROT_SPECIFIER
1244 IDENTIFIER_LIST HSTATEMENTSEPARATOR
1246 PROT_SPECIFIER : HHIDDEN
1253 MBEE_VIRT_PART : /*EMPT*/
1256 VIRTUAL_PART : HVIRTUAL
1260 IDENTIFIER_LIST : HIDENTIFIER
1261 | IDENTIFIER_LIST HPAREXPSEPARATOR
1264 IDENTIFIER_LISTC: HIDENTIFIER
1266 | IDENTIFIER_LISTC HPAREXPSEPARATOR
1270 MBEE_CONSTANT : /* EMPTY */
1276 /* GRAMATIKK FOR UTTRYKK */
1277 EXPRESSION : EXPRESSION_SIMP
1285 EXPRESSION_SIMP : EXPRESSION_SIMP
1293 | EXPRESSION_SIMP HOR
1297 | EXPRESSION_SIMP HAND
1302 HEQV EXPRESSION_SIMP
1304 HIMP EXPRESSION_SIMP
1308 HAND EXPRESSION_SIMP
1309 | HNOT EXPRESSION_SIMP
1320 EXPRESSION_SIMP %prec UNEAR
1351 ARG_R_PT : /*EMPTY*/
1353 ARGUMENT_LIST HENDPAR
1355 MBEE_ARG_R_PT : /*EMPTY*/
1357 ARGUMENT_LIST HENDPAR
1359 ARGUMENT_LIST : EXPRESSION
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]])[
1376 [AT_COND_CASE([[canonical LR]], [[10425]], [[442]])],
1378 dnl LALR1-DIFF not used for canonical LR(1) because the diff is huge.
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
1395 ## -------------------------------- ##
1396 ## GNU pic (Groff 1.18.1) Grammar. ##
1397 ## -------------------------------- ##
1399 # GNU pic, part of groff.
1401 # Bison once reported shift/reduce conflicts that it shouldn't have.
1403 AT_TEST_EXISTING_GRAMMAR([[GNU pic (Groff 1.18.1) Grammar]],
1414 %token LEFT_ARROW_HEAD
1415 %token RIGHT_ARROW_HEAD
1416 %token DOUBLE_ARROW_HEAD
1526 /* this ensures that plot 17 "%g" parses as (plot 17 "%g") */
1530 /* give text adjustments higher precedence than TEXT, so that
1531 box "foo" above ljust == box ("foo" above ljust)
1534 %left LJUST RJUST ABOVE BELOW
1537 /* Give attributes that take an optional expression a higher
1538 precedence than left and right, so that eg `line chop left'
1540 %left CHOP SOLID DASHED DOTTED UP DOWN FILL COLORED OUTLINED
1543 %left VARIABLE NUMBER '(' SIN COS ATAN2 LOG EXP SQRT K_MAX K_MIN INT RAND SRAND LAST
1544 %left ORDINAL HERE '`'
1546 %left BOX CIRCLE ELLIPSE ARC LINE ARROW SPLINE '[' /* ] */
1548 /* these need to be lower than '-' */
1549 %left HEIGHT RADIUS WIDTH DIAMETER FROM TO AT THICKNESS
1551 /* these must have higher precedence than CHOP so that `label %prec CHOP'
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
1560 %left EQUALEQUAL NOTEQUAL
1561 %left '<' '>' LESSEQUAL GREATEREQUAL
1578 optional_separator middle_element_list optional_separator
1581 middle_element_list:
1583 | middle_element_list separator element
1597 VARIABLE '=' any_expr
1598 | VARIABLE ':' '=' any_expr
1604 | COMMAND print_args
1620 | FOR VARIABLE '=' expr TO expr optional_by DO
1633 | reset_variables VARIABLE
1634 | reset_variables ',' VARIABLE
1639 | print_args print_arg
1645 | position %prec ','
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
1684 | LABEL ':' optional_separator element
1685 | LABEL ':' optional_separator position_not_place
1686 | LABEL ':' optional_separator place
1687 | '{' {} 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
1719 | object_spec UP expr
1721 | object_spec DOWN expr
1723 | object_spec RIGHT expr
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
1734 | object_spec DOTTED
1735 | object_spec DOTTED expr
1736 | object_spec DASHED
1737 | object_spec DASHED expr
1739 | object_spec FILL expr
1740 | object_spec SHADED text
1741 | object_spec COLORED text
1742 | object_spec OUTLINED text
1744 | object_spec CHOP expr
1746 | object_spec INVISIBLE
1747 | object_spec LEFT_ARROW_HEAD
1748 | object_spec RIGHT_ARROW_HEAD
1749 | object_spec DOUBLE_ARROW_HEAD
1752 | object_spec text %prec TEXT
1757 | object_spec THICKNESS expr
1758 | object_spec ALIGNED
1763 | SPRINTF '(' TEXT sprintf_args ')'
1768 | sprintf_args ',' expr
1778 | position '+' expr_pair
1779 | position '-' expr_pair
1780 | '(' position ',' position ')'
1781 | expr between position AND position
1782 | expr '<' position ',' position '>'
1787 | OF THE WAY BETWEEN
1796 /* line at A left == line (at A) left */
1815 optional_ordinal_last:
1822 | optional_ordinal_last object_type
1839 | label_path '.' LABEL
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
1852 | '(' relative_path ',' relative_path ')'
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
1885 | UPPER RIGHT_CORNER
1886 | LOWER RIGHT_CORNER
1910 | '-' expr %prec '!'
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 ')'
1923 | SRAND '(' any_expr ')'
1925 | expr LESSEQUAL expr
1927 | expr GREATEREQUAL expr
1928 | expr EQUALEQUAL expr
1929 | expr NOTEQUAL expr
1938 dnl For example, in pic:
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]],
1954 [[input.y:470.11-48: warning: rule useless in parser due to conflicts: path: ORDINAL LAST object_type relative_path
1958 [AT_COND_CASE([[LALR]], [[422]], [[canonical LR]], [[4833]], [[427]])],
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
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
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 @@
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
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
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 @@
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
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)
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)
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)
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)
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
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
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
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
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 @@
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)
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)
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)
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
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)
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
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 @@
2319 $default reduce using rule 47 (any_expr)
2321 - between go to state 237
2322 + between go to state 425
2326 @@ -10152,7 +10152,7 @@
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 @@
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
2494 @@ -12937,7 +12937,7 @@
2495 '!' shift, and go to state 94
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
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
2581 @@ -16124,7 +16124,7 @@
2583 $default reduce using rule 239 (expr)
2585 - between go to state 237
2586 + between go to state 425
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
2632 @@ -18071,7 +18071,7 @@
2633 '!' shift, and go to state 94
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
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
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
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 .
2671 $default reduce using rule 29 (placeless_element)
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
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
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
2740 + $default reduce using rule 146 (place)
2742 + corner go to state 205
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
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
2785 + between go to state 425
2790 + 134 position: . position_not_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
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
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
2847 + 212 expr: . VARIABLE
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
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
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
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
2946 + 137 position_not_place: position . '+' expr_pair
2947 + 138 | position . '-' expr_pair
2948 + 140 | expr between position . AND position
2950 + AND shift, and go to state 427
2951 + '+' shift, and go to state 197
2952 + '-' shift, and go to state 198
2957 + 134 position: . position_not_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
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
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
3014 + 212 expr: . VARIABLE
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
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
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
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
3114 dnl PARSER-EXIT-VALUE, PARSER-STDOUT, PARSER-STDERR
3115 [AT_COND_CASE([[LALR]], [[1]], [[0]])],
3117 [AT_COND_CASE([[LALR]],
3118 [[syntax error, unexpected LEFT