1 # Exercising Bison on actual grammars. -*- Autotest -*-
3 # Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2003, 2004,
4 # 2005, 2007, 2009 Free Software Foundation, Inc.
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]],
784 HACTIVATE HAFTER /*HAND*/ HARRAY HAT
785 HBEFORE HBEGIN HBOOLEAN
786 HCHARACTER HCLASS /*HCOMMENT*/ HCONC
788 HELSE HEND HEQ /*HEQV*/ HEXTERNAL
792 HIF /*HIMP*/ HIN HINNER HINSPECT HINTEGER HIS
794 HNAME HNE HNEW HNONE /*HNOT*/ HNOTEXT
796 HPRIOR HPROCEDURE HPROTECTED
798 HREACTIVATE HREAL HREF
800 HTEXT HTHEN HTHIS HTO
805 HASSIGNVALUE HASSIGNREF
806 /*HDOT*/ HPAREXPSEPARATOR HLABELSEPARATOR HSTATEMENTSEPARATOR
809 HADD HSUB HMUL HDIV HINTDIV HEXP
813 %token HBOOLEANKONST HINTEGERKONST HCHARACTERKONST
828 %left HVALRELOPERATOR HREFRELOPERATOR HOBJRELOPERATOR
834 %left HFACTOROPERATOR
835 %left HPRIMARYOPERATOR
844 /* GRAMATIKK FOR PROGRAM MODULES */
847 | error HSTATEMENTSEPARATOR MBEE_DECLSTMS
849 EXT_DECLARATION : HEXTERNAL
867 EXTERNAL_KIND_ITEM: EXT_IDENT
880 MBEE_REST_EXT_LIST: /* EMPTY
881 | HPAREXPSEPARATOR EXT_KIND_LIST
883 EXT_KIND_LIST : EXT_KIND_ITEM
884 | EXT_KIND_LIST HPAREXPSEPARATOR EXT_KIND_ITEM
886 EXT_KIND_ITEM : HIDENTIFIER
890 EMPTY_BLOCK : /*EMPT*/
894 | EXT_LIST HPAREXPSEPARATOR EXT_ITEM
896 EXT_ITEM : HIDENTIFIER
899 EXT_IDENT : /* EMPTY */
903 /* GRAMATIKK FOR TYPER */
922 /* GRAMATIKK FOR DEL AV SETNINGER */
923 MBEE_ELSE_PART : /*EMPT*/
933 FOR_LIST : FOR_LIST_ELEMENT
938 FOR_LIST_ELEMENT: EXPRESSION
941 MBEE_F_L_EL_R_PT: /*EMPT*/
953 CONN_STATE_R_PT : WHEN_CLAUSE_LIST
957 WHEN_CLAUSE_LIST: HWHEN
967 MBEE_OTWI_CLAUS : /*EMPT*/
972 ACTIVATOR : HACTIVATE
976 | ATDELAY EXPRESSION {}
984 BEFOREAFTER : HBEFORE
990 /* GRAMATIKK FOR SETNINGER OG DEKLARASJONER */
991 MODULSTATEMENT : HWHILE
1025 | EXPRESSION_SIMP HBEGIN error HSTATEMENTSEPARATOR
1027 | EXPRESSION_SIMP HBEGIN error HEND
1029 | ACTIVATOR EXPRESSION SCHEDULE
1034 | MBEE_TYPE HPROCEDURE
1058 DECLSTATEMENT : MODULSTATEMENT
1076 BLOCK : DECLSTATEMENT
1077 | HBEGIN MBEE_DECLSTMS HEND
1078 | HBEGIN error HSTATEMENTSEPARATOR MBEE_DECLSTMS HEND
1081 MBEE_DECLSTMS : MBEE_DECLSTMSU
1083 MBEE_DECLSTMSU : DECLSTATEMENT
1088 MODULS : MODULSTATEMENT
1089 | MODULS HSTATEMENTSEPARATOR MODULSTATEMENT
1091 /* GRAMATIKK FOR DEL AV DEKLARASJONER */
1092 ARR_SEGMENT_LIST: ARR_SEGMENT
1097 ARR_SEGMENT : ARRAY_SEGMENT
1099 BAUND_PAIR_LIST HENDPAR
1101 ARRAY_SEGMENT : ARRAY_SEGMENT_EL {}
1107 ARRAY_SEGMENT_EL: HIDENTIFIER
1109 BAUND_PAIR_LIST : BAUND_PAIR
1114 BAUND_PAIR : EXPRESSION
1118 SWITCH_LIST : EXPRESSION
1123 HEADING : MBEE_FMAL_PAR_P HSTATEMENTSEPARATOR {}
1129 MBEE_FMAL_PAR_P : /*EMPT*/
1132 FMAL_PAR_PART : HBEGPAR NO_TYPE
1135 MBEE_LISTV : /*EMPT*/
1139 | FPP_CATEG HDOTDOTDOT
1141 HPAREXPSEPARATOR LISTV
1144 HPAREXPSEPARATOR LISTV
1146 FPP_HEADING : HBEGPAR NO_TYPE
1147 FPP_MBEE_LISTV HENDPAR
1149 FPP_MBEE_LISTV : /*EMPT*/
1152 FPP_LISTV : FPP_CATEG HDOTDOTDOT
1155 HPAREXPSEPARATOR LISTV
1157 FPP_SPEC : FPP_CATEG SPECIFIER HIDENTIFIER
1158 | FPP_CATEG FPP_PROC_DECL_IN_SPEC
1160 FPP_CATEG : HNAME HLABELSEPARATOR
1161 | HVALUE HLABELSEPARATOR
1162 | HVAR HLABELSEPARATOR
1165 FPP_PROC_DECL_IN_SPEC: MBEE_TYPE HPROCEDURE
1168 FPP_HEADING {} { /* Yes, two "final" actions. */ }
1170 IDENTIFIER_LISTV: HIDENTIFIER
1173 HPAREXPSEPARATOR IDENTIFIER_LISTV
1175 MBEE_MODE_PART : /*EMPT*/
1178 MODE_PART : NAME_PART
1181 | NAME_PART VALUE_PART
1182 | VALUE_PART NAME_PART
1183 | NAME_PART VAR_PART
1184 | VAR_PART NAME_PART
1185 | VALUE_PART VAR_PART
1186 | VAR_PART VALUE_PART
1187 | VAR_PART NAME_PART VALUE_PART
1188 | NAME_PART VAR_PART VALUE_PART
1189 | NAME_PART VALUE_PART VAR_PART
1190 | VAR_PART VALUE_PART NAME_PART
1191 | VALUE_PART VAR_PART NAME_PART
1192 | VALUE_PART NAME_PART VAR_PART
1194 NAME_PART : HNAME {}
1202 VALUE_PART : HVALUE {}
1203 IDENTIFIER_LISTV HSTATEMENTSEPARATOR
1205 MBEE_SPEC_PART : /*EMPT*/
1208 SPEC_PART : ONE_SPEC
1209 | SPEC_PART ONE_SPEC
1211 ONE_SPEC : SPECIFIER IDENTIFIER_LIST HSTATEMENTSEPARATOR
1212 | NO_TYPE HPROCEDURE HIDENTIFIER HOBJRELOPERATOR
1214 PROC_DECL_IN_SPEC HSTATEMENTSEPARATOR
1215 | FPP_PROC_DECL_IN_SPEC HSTATEMENTSEPARATOR
1216 | MBEE_TYPE HPROCEDURE HIDENTIFIER HSTATEMENTSEPARATOR
1217 | MBEE_TYPE HPROCEDURE HIDENTIFIER HPAREXPSEPARATOR
1218 IDENTIFIER_LIST HSTATEMENTSEPARATOR
1226 PROC_DECL_IN_SPEC: MBEE_TYPE HPROCEDURE
1233 MBEE_BEGIN_END : /* EMPTY */
1236 MBEE_PROT_PART : /*EMPT*/
1239 PROTECTION_PART : PROT_SPECIFIER IDENTIFIER_LIST
1241 | PROTECTION_PART PROT_SPECIFIER
1242 IDENTIFIER_LIST HSTATEMENTSEPARATOR
1244 PROT_SPECIFIER : HHIDDEN
1251 MBEE_VIRT_PART : /*EMPT*/
1254 VIRTUAL_PART : HVIRTUAL
1258 IDENTIFIER_LIST : HIDENTIFIER
1259 | IDENTIFIER_LIST HPAREXPSEPARATOR
1262 IDENTIFIER_LISTC: HIDENTIFIER
1264 | IDENTIFIER_LISTC HPAREXPSEPARATOR
1268 MBEE_CONSTANT : /* EMPTY */
1274 /* GRAMATIKK FOR UTTRYKK */
1275 EXPRESSION : EXPRESSION_SIMP
1283 EXPRESSION_SIMP : EXPRESSION_SIMP
1291 | EXPRESSION_SIMP HOR
1295 | EXPRESSION_SIMP HAND
1300 HEQV EXPRESSION_SIMP
1302 HIMP EXPRESSION_SIMP
1306 HAND EXPRESSION_SIMP
1307 | HNOT EXPRESSION_SIMP
1318 EXPRESSION_SIMP %prec UNEAR
1349 ARG_R_PT : /*EMPTY*/
1351 ARGUMENT_LIST HENDPAR
1353 MBEE_ARG_R_PT : /*EMPTY*/
1355 ARGUMENT_LIST HENDPAR
1357 ARGUMENT_LIST : EXPRESSION
1368 [AT_COND_CASE([[canonical LR]],
1369 [[input.y: conflicts: 1876 shift/reduce, 144 reduce/reduce]],
1370 [[input.y: conflicts: 78 shift/reduce, 10 reduce/reduce]])[
1374 [AT_COND_CASE([[canonical LR]], [[10425]], [[442]])],
1376 dnl LALR1-DIFF not used for canonical LR(1) because the diff is huge.
1380 [AT_COND_CASE([[canonical LR]], [[]],
1381 [AT_CHECK([[grep '^State.*conflicts:' input.output]], [[0]],
1382 [[State 64 conflicts: 14 shift/reduce
1383 State 164 conflicts: 1 shift/reduce
1384 State 201 conflicts: 33 shift/reduce, 4 reduce/reduce
1385 State 206 conflicts: 1 shift/reduce
1386 State 240 conflicts: 1 shift/reduce
1387 State 335 conflicts: 9 shift/reduce, 2 reduce/reduce
1388 State 356 conflicts: 1 shift/reduce
1389 State 360 conflicts: 9 shift/reduce, 2 reduce/reduce
1390 State 427 conflicts: 9 shift/reduce, 2 reduce/reduce
1393 ## -------------------------------- ##
1394 ## GNU pic (Groff 1.18.1) Grammar. ##
1395 ## -------------------------------- ##
1397 # GNU pic, part of groff.
1399 # Bison once reported shift/reduce conflicts that it shouldn't have.
1401 AT_TEST_EXISTING_GRAMMAR([[GNU pic (Groff 1.18.1) Grammar]],
1413 %token LEFT_ARROW_HEAD
1414 %token RIGHT_ARROW_HEAD
1415 %token DOUBLE_ARROW_HEAD
1525 /* this ensures that plot 17 "%g" parses as (plot 17 "%g") */
1529 /* give text adjustments higher precedence than TEXT, so that
1530 box "foo" above ljust == box ("foo" above ljust)
1533 %left LJUST RJUST ABOVE BELOW
1536 /* Give attributes that take an optional expression a higher
1537 precedence than left and right, so that eg `line chop left'
1539 %left CHOP SOLID DASHED DOTTED UP DOWN FILL COLORED OUTLINED
1542 %left VARIABLE NUMBER '(' SIN COS ATAN2 LOG EXP SQRT K_MAX K_MIN INT RAND SRAND LAST
1543 %left ORDINAL HERE '`'
1545 %left BOX CIRCLE ELLIPSE ARC LINE ARROW SPLINE '[' /* ] */
1547 /* these need to be lower than '-' */
1548 %left HEIGHT RADIUS WIDTH DIAMETER FROM TO AT THICKNESS
1550 /* these must have higher precedence than CHOP so that `label %prec CHOP'
1552 %left DOT_N DOT_E DOT_W DOT_S DOT_NE DOT_SE DOT_NW DOT_SW DOT_C
1553 %left DOT_START DOT_END TOP BOTTOM LEFT_CORNER RIGHT_CORNER
1554 %left UPPER LOWER NORTH SOUTH EAST WEST CENTER START END
1559 %left EQUALEQUAL NOTEQUAL
1560 %left '<' '>' LESSEQUAL GREATEREQUAL
1577 optional_separator middle_element_list optional_separator
1580 middle_element_list:
1582 | middle_element_list separator element
1596 VARIABLE '=' any_expr
1597 | VARIABLE ':' '=' any_expr
1603 | COMMAND print_args
1619 | FOR VARIABLE '=' expr TO expr optional_by DO
1632 | reset_variables VARIABLE
1633 | reset_variables ',' VARIABLE
1638 | print_args print_arg
1644 | position %prec ','
1664 text EQUALEQUAL text
1665 | text NOTEQUAL text
1666 | text_expr ANDAND text_expr
1667 | text_expr ANDAND expr
1668 | expr ANDAND text_expr
1669 | text_expr OROR text_expr
1670 | text_expr OROR expr
1671 | expr OROR text_expr
1683 | LABEL ':' optional_separator element
1684 | LABEL ':' optional_separator position_not_place
1685 | LABEL ':' optional_separator place
1686 | '{' {} element_list '}'
1712 | object_spec HEIGHT expr
1713 | object_spec RADIUS expr
1714 | object_spec WIDTH expr
1715 | object_spec DIAMETER expr
1716 | object_spec expr %prec HEIGHT
1718 | object_spec UP expr
1720 | object_spec DOWN expr
1722 | object_spec RIGHT expr
1724 | object_spec LEFT expr
1725 | object_spec FROM position
1726 | object_spec TO position
1727 | object_spec AT position
1728 | object_spec WITH path
1729 | object_spec WITH position %prec ','
1730 | object_spec BY expr_pair
1733 | object_spec DOTTED
1734 | object_spec DOTTED expr
1735 | object_spec DASHED
1736 | object_spec DASHED expr
1738 | object_spec FILL expr
1739 | object_spec SHADED text
1740 | object_spec COLORED text
1741 | object_spec OUTLINED text
1743 | object_spec CHOP expr
1745 | object_spec INVISIBLE
1746 | object_spec LEFT_ARROW_HEAD
1747 | object_spec RIGHT_ARROW_HEAD
1748 | object_spec DOUBLE_ARROW_HEAD
1751 | object_spec text %prec TEXT
1756 | object_spec THICKNESS expr
1757 | object_spec ALIGNED
1762 | SPRINTF '(' TEXT sprintf_args ')'
1767 | sprintf_args ',' expr
1777 | position '+' expr_pair
1778 | position '-' expr_pair
1779 | '(' position ',' position ')'
1780 | expr between position AND position
1781 | expr '<' position ',' position '>'
1786 | OF THE WAY BETWEEN
1795 /* line at A left == line (at A) left */
1814 optional_ordinal_last:
1821 | optional_ordinal_last object_type
1838 | label_path '.' LABEL
1843 /* give this a lower precedence than LEFT and RIGHT so that
1844 [A: box] with .A left == [A: box] with (.A left) */
1845 | label_path %prec TEXT
1851 | '(' relative_path ',' relative_path ')'
1853 /* The rest of these rules are a compatibility sop. */
1854 | ORDINAL LAST object_type relative_path
1855 | LAST object_type relative_path
1856 | ORDINAL object_type relative_path
1857 | LABEL relative_path
1884 | UPPER RIGHT_CORNER
1885 | LOWER RIGHT_CORNER
1909 | '-' expr %prec '!'
1911 | SIN '(' any_expr ')'
1912 | COS '(' any_expr ')'
1913 | ATAN2 '(' any_expr ',' any_expr ')'
1914 | LOG '(' any_expr ')'
1915 | EXP '(' any_expr ')'
1916 | SQRT '(' any_expr ')'
1917 | K_MAX '(' any_expr ',' any_expr ')'
1918 | K_MIN '(' any_expr ',' any_expr ')'
1919 | INT '(' any_expr ')'
1920 | RAND '(' any_expr ')'
1922 | SRAND '(' any_expr ')'
1924 | expr LESSEQUAL expr
1926 | expr GREATEREQUAL expr
1927 | expr EQUALEQUAL expr
1928 | expr NOTEQUAL expr
1937 dnl For example, in pic:
1945 dnl Even using groff 1.19.2, the 3rd line above is a syntax error. Change
1946 dnl "left" to "right", and it still is. However, add "upper" or "lower" before
1947 dnl "left or "right" and it's accepted to mean ".nw", ".ne", ".sw", or ".se".
1948 dnl (There seem to be no aliases for "north" and "south" that can stand alone
1949 dnl without being followed by "of".)
1950 [[VARIABLE, '=', LABEL, LEFT, DOT_X]],
1953 [[input.y:471.11-48: warning: rule useless in parser due to conflicts: path: ORDINAL LAST object_type relative_path
1957 [AT_COND_CASE([[LALR]], [[422]], [[canonical LR]], [[4833]], [[427]])],
1959 dnl LALR1-DIFF not used for canonical LR(1) because the diff is huge.
1960 dnl Isocore map from LALR(1) state number to new state number plus descriptions
1961 dnl of any change in the actions resulting in a change in accepted language:
1962 dnl - 102 -> 423: reduce -> shift on LEFT and RIGHT
1967 [AT_COND_CASE([[LALR]], [],
1968 [[@@ -1223,7 +1223,7 @@
1969 text_expr go to state 112
1970 text go to state 113
1971 place go to state 114
1972 - label go to state 102
1973 + label go to state 423
1974 ordinal go to state 103
1975 optional_ordinal_last go to state 104
1976 nth_primitive go to state 105
1977 @@ -1377,7 +1377,7 @@
1978 '!' shift, and go to state 94
1980 place go to state 114
1981 - label go to state 102
1982 + label go to state 423
1983 ordinal go to state 103
1984 optional_ordinal_last go to state 104
1985 nth_primitive go to state 105
1986 @@ -1854,7 +1854,7 @@
1988 text go to state 162
1989 place go to state 114
1990 - label go to state 102
1991 + label go to state 423
1992 ordinal go to state 103
1993 optional_ordinal_last go to state 104
1994 nth_primitive go to state 105
1995 @@ -2047,7 +2047,7 @@
1996 text_expr go to state 112
1997 text go to state 113
1998 place go to state 114
1999 - label go to state 102
2000 + label go to state 423
2001 ordinal go to state 103
2002 optional_ordinal_last go to state 104
2003 nth_primitive go to state 105
2004 @@ -2571,7 +2571,7 @@
2005 position_not_place go to state 99
2006 expr_pair go to state 191
2007 place go to state 101
2008 - label go to state 102
2009 + label go to state 423
2010 ordinal go to state 103
2011 optional_ordinal_last go to state 104
2012 nth_primitive go to state 105
2013 @@ -2732,7 +2732,7 @@
2014 text_expr go to state 112
2015 text go to state 113
2016 place go to state 114
2017 - label go to state 102
2018 + label go to state 423
2019 ordinal go to state 103
2020 optional_ordinal_last go to state 104
2021 nth_primitive go to state 105
2022 @@ -2875,7 +2875,7 @@
2023 '!' shift, and go to state 94
2025 place go to state 114
2026 - label go to state 102
2027 + label go to state 423
2028 ordinal go to state 103
2029 optional_ordinal_last go to state 104
2030 nth_primitive go to state 105
2031 @@ -3018,7 +3018,7 @@
2032 '!' shift, and go to state 94
2034 place go to state 114
2035 - label go to state 102
2036 + label go to state 423
2037 ordinal go to state 103
2038 optional_ordinal_last go to state 104
2039 nth_primitive go to state 105
2040 @@ -3256,7 +3256,7 @@
2044 - 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, '(', '`', ',', '>', '+', '-', '!', ';', '}', '@:>@', ')']
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, 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 147 | label . corner
2047 153 label: label . '.' LABEL
2049 @@ -3645,7 +3645,7 @@
2050 text_expr go to state 112
2051 text go to state 113
2052 place go to state 114
2053 - label go to state 102
2054 + label go to state 423
2055 ordinal go to state 103
2056 optional_ordinal_last go to state 104
2057 nth_primitive go to state 105
2058 @@ -3804,7 +3804,7 @@
2059 text_expr go to state 239
2060 text go to state 113
2061 place go to state 114
2062 - label go to state 102
2063 + label go to state 423
2064 ordinal go to state 103
2065 optional_ordinal_last go to state 104
2066 nth_primitive go to state 105
2067 @@ -4481,7 +4481,7 @@
2068 $default reduce using rule 89 (object_spec)
2070 place go to state 114
2071 - label go to state 102
2072 + label go to state 423
2073 ordinal go to state 103
2074 optional_ordinal_last go to state 104
2075 nth_primitive go to state 105
2076 @@ -4673,7 +4673,7 @@
2077 $default reduce using rule 91 (object_spec)
2079 place go to state 114
2080 - label go to state 102
2081 + label go to state 423
2082 ordinal go to state 103
2083 optional_ordinal_last go to state 104
2084 nth_primitive go to state 105
2085 @@ -4867,7 +4867,7 @@
2086 $default reduce using rule 95 (object_spec)
2088 place go to state 114
2089 - label go to state 102
2090 + label go to state 423
2091 ordinal go to state 103
2092 optional_ordinal_last go to state 104
2093 nth_primitive go to state 105
2094 @@ -5065,7 +5065,7 @@
2095 $default reduce using rule 93 (object_spec)
2097 place go to state 114
2098 - label go to state 102
2099 + label go to state 423
2100 ordinal go to state 103
2101 optional_ordinal_last go to state 104
2102 nth_primitive go to state 105
2103 @@ -5260,7 +5260,7 @@
2104 '!' shift, and go to state 94
2106 place go to state 114
2107 - label go to state 102
2108 + label go to state 423
2109 ordinal go to state 103
2110 optional_ordinal_last go to state 104
2111 nth_primitive go to state 105
2112 @@ -5403,7 +5403,7 @@
2113 '!' shift, and go to state 94
2115 place go to state 114
2116 - label go to state 102
2117 + label go to state 423
2118 ordinal go to state 103
2119 optional_ordinal_last go to state 104
2120 nth_primitive go to state 105
2121 @@ -5546,7 +5546,7 @@
2122 '!' shift, and go to state 94
2124 place go to state 114
2125 - label go to state 102
2126 + label go to state 423
2127 ordinal go to state 103
2128 optional_ordinal_last go to state 104
2129 nth_primitive go to state 105
2130 @@ -5689,7 +5689,7 @@
2131 '!' shift, and go to state 94
2133 place go to state 114
2134 - label go to state 102
2135 + label go to state 423
2136 ordinal go to state 103
2137 optional_ordinal_last go to state 104
2138 nth_primitive go to state 105
2139 @@ -6475,7 +6475,7 @@
2141 expr_pair go to state 280
2142 place go to state 114
2143 - label go to state 102
2144 + label go to state 423
2145 ordinal go to state 103
2146 optional_ordinal_last go to state 104
2147 nth_primitive go to state 105
2148 @@ -6633,7 +6633,7 @@
2149 $default reduce using rule 105 (object_spec)
2151 place go to state 114
2152 - label go to state 102
2153 + label go to state 423
2154 ordinal go to state 103
2155 optional_ordinal_last go to state 104
2156 nth_primitive go to state 105
2157 @@ -6825,7 +6825,7 @@
2158 $default reduce using rule 107 (object_spec)
2160 place go to state 114
2161 - label go to state 102
2162 + label go to state 423
2163 ordinal go to state 103
2164 optional_ordinal_last go to state 104
2165 nth_primitive go to state 105
2166 @@ -7017,7 +7017,7 @@
2167 $default reduce using rule 114 (object_spec)
2169 place go to state 114
2170 - label go to state 102
2171 + label go to state 423
2172 ordinal go to state 103
2173 optional_ordinal_last go to state 104
2174 nth_primitive go to state 105
2175 @@ -7264,7 +7264,7 @@
2176 '!' shift, and go to state 94
2178 place go to state 114
2179 - label go to state 102
2180 + label go to state 423
2181 ordinal go to state 103
2182 optional_ordinal_last go to state 104
2183 nth_primitive go to state 105
2184 @@ -7408,7 +7408,7 @@
2185 $default reduce using rule 109 (object_spec)
2187 place go to state 114
2188 - label go to state 102
2189 + label go to state 423
2190 ordinal go to state 103
2191 optional_ordinal_last go to state 104
2192 nth_primitive go to state 105
2193 @@ -7819,12 +7819,12 @@
2194 position_not_place go to state 296
2195 expr_pair go to state 100
2196 place go to state 297
2197 - label go to state 102
2198 + label go to state 423
2199 ordinal go to state 103
2200 optional_ordinal_last go to state 104
2201 nth_primitive go to state 105
2202 corner go to state 106
2203 - expr go to state 266
2204 + expr go to state 424
2208 @@ -7987,7 +7987,7 @@
2209 text_expr go to state 112
2210 text go to state 113
2211 place go to state 114
2212 - label go to state 102
2213 + label go to state 423
2214 ordinal go to state 103
2215 optional_ordinal_last go to state 104
2216 nth_primitive go to state 105
2217 @@ -8172,7 +8172,7 @@
2218 text_expr go to state 112
2219 text go to state 113
2220 place go to state 114
2221 - label go to state 102
2222 + label go to state 423
2223 ordinal go to state 103
2224 optional_ordinal_last go to state 104
2225 nth_primitive go to state 105
2226 @@ -8333,7 +8333,7 @@
2227 text_expr go to state 112
2228 text go to state 113
2229 place go to state 114
2230 - label go to state 102
2231 + label go to state 423
2232 ordinal go to state 103
2233 optional_ordinal_last go to state 104
2234 nth_primitive go to state 105
2235 @@ -8494,7 +8494,7 @@
2236 text_expr go to state 112
2237 text go to state 113
2238 place go to state 114
2239 - label go to state 102
2240 + label go to state 423
2241 ordinal go to state 103
2242 optional_ordinal_last go to state 104
2243 nth_primitive go to state 105
2244 @@ -8655,7 +8655,7 @@
2245 text_expr go to state 112
2246 text go to state 113
2247 place go to state 114
2248 - label go to state 102
2249 + label go to state 423
2250 ordinal go to state 103
2251 optional_ordinal_last go to state 104
2252 nth_primitive go to state 105
2253 @@ -8816,7 +8816,7 @@
2254 text_expr go to state 112
2255 text go to state 113
2256 place go to state 114
2257 - label go to state 102
2258 + label go to state 423
2259 ordinal go to state 103
2260 optional_ordinal_last go to state 104
2261 nth_primitive go to state 105
2262 @@ -8977,7 +8977,7 @@
2263 text_expr go to state 112
2264 text go to state 113
2265 place go to state 114
2266 - label go to state 102
2267 + label go to state 423
2268 ordinal go to state 103
2269 optional_ordinal_last go to state 104
2270 nth_primitive go to state 105
2271 @@ -9138,7 +9138,7 @@
2272 text_expr go to state 112
2273 text go to state 113
2274 place go to state 114
2275 - label go to state 102
2276 + label go to state 423
2277 ordinal go to state 103
2278 optional_ordinal_last go to state 104
2279 nth_primitive go to state 105
2280 @@ -9299,7 +9299,7 @@
2281 text_expr go to state 112
2282 text go to state 113
2283 place go to state 114
2284 - label go to state 102
2285 + label go to state 423
2286 ordinal go to state 103
2287 optional_ordinal_last go to state 104
2288 nth_primitive go to state 105
2289 @@ -9460,7 +9460,7 @@
2290 text_expr go to state 112
2291 text go to state 113
2292 place go to state 114
2293 - label go to state 102
2294 + label go to state 423
2295 ordinal go to state 103
2296 optional_ordinal_last go to state 104
2297 nth_primitive go to state 105
2298 @@ -9623,7 +9623,7 @@
2299 text_expr go to state 112
2300 text go to state 113
2301 place go to state 114
2302 - label go to state 102
2303 + label go to state 423
2304 ordinal go to state 103
2305 optional_ordinal_last go to state 104
2306 nth_primitive go to state 105
2307 @@ -9784,7 +9784,7 @@
2308 text_expr go to state 112
2309 text go to state 113
2310 place go to state 114
2311 - label go to state 102
2312 + label go to state 423
2313 ordinal go to state 103
2314 optional_ordinal_last go to state 104
2315 nth_primitive go to state 105
2316 @@ -9921,7 +9921,7 @@
2318 $default reduce using rule 47 (any_expr)
2320 - between go to state 237
2321 + between go to state 425
2325 @@ -10152,7 +10152,7 @@
2327 expr_pair go to state 317
2328 place go to state 114
2329 - label go to state 102
2330 + label go to state 423
2331 ordinal go to state 103
2332 optional_ordinal_last go to state 104
2333 nth_primitive go to state 105
2334 @@ -10298,7 +10298,7 @@
2336 expr_pair go to state 318
2337 place go to state 114
2338 - label go to state 102
2339 + label go to state 423
2340 ordinal go to state 103
2341 optional_ordinal_last go to state 104
2342 nth_primitive go to state 105
2343 @@ -10622,7 +10622,7 @@
2344 '!' shift, and go to state 94
2346 place go to state 114
2347 - label go to state 102
2348 + label go to state 423
2349 ordinal go to state 103
2350 optional_ordinal_last go to state 104
2351 nth_primitive go to state 105
2352 @@ -10765,7 +10765,7 @@
2353 '!' shift, and go to state 94
2355 place go to state 114
2356 - label go to state 102
2357 + label go to state 423
2358 ordinal go to state 103
2359 optional_ordinal_last go to state 104
2360 nth_primitive go to state 105
2361 @@ -10908,7 +10908,7 @@
2362 '!' shift, and go to state 94
2364 place go to state 114
2365 - label go to state 102
2366 + label go to state 423
2367 ordinal go to state 103
2368 optional_ordinal_last go to state 104
2369 nth_primitive go to state 105
2370 @@ -11051,7 +11051,7 @@
2371 '!' shift, and go to state 94
2373 place go to state 114
2374 - label go to state 102
2375 + label go to state 423
2376 ordinal go to state 103
2377 optional_ordinal_last go to state 104
2378 nth_primitive go to state 105
2379 @@ -11194,7 +11194,7 @@
2380 '!' shift, and go to state 94
2382 place go to state 114
2383 - label go to state 102
2384 + label go to state 423
2385 ordinal go to state 103
2386 optional_ordinal_last go to state 104
2387 nth_primitive go to state 105
2388 @@ -11337,7 +11337,7 @@
2389 '!' shift, and go to state 94
2391 place go to state 114
2392 - label go to state 102
2393 + label go to state 423
2394 ordinal go to state 103
2395 optional_ordinal_last go to state 104
2396 nth_primitive go to state 105
2397 @@ -11480,7 +11480,7 @@
2398 '!' shift, and go to state 94
2400 place go to state 114
2401 - label go to state 102
2402 + label go to state 423
2403 ordinal go to state 103
2404 optional_ordinal_last go to state 104
2405 nth_primitive go to state 105
2406 @@ -11637,7 +11637,7 @@
2407 position_not_place go to state 99
2408 expr_pair go to state 100
2409 place go to state 101
2410 - label go to state 102
2411 + label go to state 423
2412 ordinal go to state 103
2413 optional_ordinal_last go to state 104
2414 nth_primitive go to state 105
2415 @@ -11780,7 +11780,7 @@
2416 '!' shift, and go to state 94
2418 place go to state 114
2419 - label go to state 102
2420 + label go to state 423
2421 ordinal go to state 103
2422 optional_ordinal_last go to state 104
2423 nth_primitive go to state 105
2424 @@ -11923,7 +11923,7 @@
2425 '!' shift, and go to state 94
2427 place go to state 114
2428 - label go to state 102
2429 + label go to state 423
2430 ordinal go to state 103
2431 optional_ordinal_last go to state 104
2432 nth_primitive go to state 105
2433 @@ -12066,7 +12066,7 @@
2434 '!' shift, and go to state 94
2436 place go to state 114
2437 - label go to state 102
2438 + label go to state 423
2439 ordinal go to state 103
2440 optional_ordinal_last go to state 104
2441 nth_primitive go to state 105
2442 @@ -12209,7 +12209,7 @@
2443 '!' shift, and go to state 94
2445 place go to state 114
2446 - label go to state 102
2447 + label go to state 423
2448 ordinal go to state 103
2449 optional_ordinal_last go to state 104
2450 nth_primitive go to state 105
2451 @@ -12352,7 +12352,7 @@
2452 '!' shift, and go to state 94
2454 place go to state 114
2455 - label go to state 102
2456 + label go to state 423
2457 ordinal go to state 103
2458 optional_ordinal_last go to state 104
2459 nth_primitive go to state 105
2460 @@ -12495,7 +12495,7 @@
2461 '!' shift, and go to state 94
2463 place go to state 114
2464 - label go to state 102
2465 + label go to state 423
2466 ordinal go to state 103
2467 optional_ordinal_last go to state 104
2468 nth_primitive go to state 105
2469 @@ -12638,7 +12638,7 @@
2470 '!' shift, and go to state 94
2472 place go to state 114
2473 - label go to state 102
2474 + label go to state 423
2475 ordinal go to state 103
2476 optional_ordinal_last go to state 104
2477 nth_primitive go to state 105
2478 @@ -12794,12 +12794,12 @@
2479 position_not_place go to state 99
2480 expr_pair go to state 100
2481 place go to state 101
2482 - label go to state 102
2483 + label go to state 423
2484 ordinal go to state 103
2485 optional_ordinal_last go to state 104
2486 nth_primitive go to state 105
2487 corner go to state 106
2488 - expr go to state 266
2489 + expr go to state 424
2493 @@ -12937,7 +12937,7 @@
2494 '!' shift, and go to state 94
2496 place go to state 114
2497 - label go to state 102
2498 + label go to state 423
2499 ordinal go to state 103
2500 optional_ordinal_last go to state 104
2501 nth_primitive go to state 105
2502 @@ -13160,7 +13160,7 @@
2503 text_expr go to state 342
2504 text go to state 113
2505 place go to state 114
2506 - label go to state 102
2507 + label go to state 423
2508 ordinal go to state 103
2509 optional_ordinal_last go to state 104
2510 nth_primitive go to state 105
2511 @@ -13319,7 +13319,7 @@
2512 text_expr go to state 344
2513 text go to state 113
2514 place go to state 114
2515 - label go to state 102
2516 + label go to state 423
2517 ordinal go to state 103
2518 optional_ordinal_last go to state 104
2519 nth_primitive go to state 105
2520 @@ -13502,7 +13502,7 @@
2521 text_expr go to state 348
2522 text go to state 113
2523 place go to state 114
2524 - label go to state 102
2525 + label go to state 423
2526 ordinal go to state 103
2527 optional_ordinal_last go to state 104
2528 nth_primitive go to state 105
2529 @@ -13661,7 +13661,7 @@
2530 text_expr go to state 350
2531 text go to state 113
2532 place go to state 114
2533 - label go to state 102
2534 + label go to state 423
2535 ordinal go to state 103
2536 optional_ordinal_last go to state 104
2537 nth_primitive go to state 105
2538 @@ -13804,7 +13804,7 @@
2539 '!' shift, and go to state 94
2541 place go to state 114
2542 - label go to state 102
2543 + label go to state 423
2544 ordinal go to state 103
2545 optional_ordinal_last go to state 104
2546 nth_primitive go to state 105
2547 @@ -14747,7 +14747,7 @@
2548 position_not_place go to state 99
2549 expr_pair go to state 191
2550 place go to state 101
2551 - label go to state 102
2552 + label go to state 423
2553 ordinal go to state 103
2554 optional_ordinal_last go to state 104
2555 nth_primitive go to state 105
2556 @@ -15074,7 +15074,7 @@
2557 text go to state 113
2558 expr_pair go to state 365
2559 place go to state 114
2560 - label go to state 102
2561 + label go to state 423
2562 ordinal go to state 103
2563 optional_ordinal_last go to state 104
2564 nth_primitive go to state 105
2565 @@ -15693,12 +15693,12 @@
2566 position_not_place go to state 99
2567 expr_pair go to state 100
2568 place go to state 101
2569 - label go to state 102
2570 + label go to state 423
2571 ordinal go to state 103
2572 optional_ordinal_last go to state 104
2573 nth_primitive go to state 105
2574 corner go to state 106
2575 - expr go to state 266
2576 + expr go to state 424
2580 @@ -16124,7 +16124,7 @@
2582 $default reduce using rule 239 (expr)
2584 - between go to state 237
2585 + between go to state 425
2587 Conflict between rule 239 and token OF resolved as shift ('<' < OF).
2588 Conflict between rule 239 and token BETWEEN resolved as shift ('<' < BETWEEN).
2589 @@ -17234,7 +17234,7 @@
2590 text_expr go to state 112
2591 text go to state 113
2592 place go to state 114
2593 - label go to state 102
2594 + label go to state 423
2595 ordinal go to state 103
2596 optional_ordinal_last go to state 104
2597 nth_primitive go to state 105
2598 @@ -17416,7 +17416,7 @@
2599 text_expr go to state 112
2600 text go to state 113
2601 place go to state 114
2602 - label go to state 102
2603 + label go to state 423
2604 ordinal go to state 103
2605 optional_ordinal_last go to state 104
2606 nth_primitive go to state 105
2607 @@ -17577,7 +17577,7 @@
2608 text_expr go to state 112
2609 text go to state 113
2610 place go to state 114
2611 - label go to state 102
2612 + label go to state 423
2613 ordinal go to state 103
2614 optional_ordinal_last go to state 104
2615 nth_primitive go to state 105
2616 @@ -17772,12 +17772,12 @@
2617 position_not_place go to state 99
2618 expr_pair go to state 100
2619 place go to state 101
2620 - label go to state 102
2621 + label go to state 423
2622 ordinal go to state 103
2623 optional_ordinal_last go to state 104
2624 nth_primitive go to state 105
2625 corner go to state 106
2626 - expr go to state 266
2627 + expr go to state 424
2631 @@ -18071,7 +18071,7 @@
2632 '!' shift, and go to state 94
2634 place go to state 114
2635 - label go to state 102
2636 + label go to state 423
2637 ordinal go to state 103
2638 optional_ordinal_last go to state 104
2639 nth_primitive go to state 105
2640 @@ -18221,7 +18221,7 @@
2641 '!' shift, and go to state 94
2643 place go to state 114
2644 - label go to state 102
2645 + label go to state 423
2646 ordinal go to state 103
2647 optional_ordinal_last go to state 104
2648 nth_primitive go to state 105
2649 @@ -18830,7 +18830,7 @@
2650 '!' shift, and go to state 94
2652 place go to state 114
2653 - label go to state 102
2654 + label go to state 423
2655 ordinal go to state 103
2656 optional_ordinal_last go to state 104
2657 nth_primitive go to state 105
2658 @@ -18987,7 +18987,7 @@
2659 '!' shift, and go to state 94
2661 place go to state 114
2662 - label go to state 102
2663 + label go to state 423
2664 ordinal go to state 103
2665 optional_ordinal_last go to state 104
2666 nth_primitive go to state 105
2667 @@ -19089,3 +19089,440 @@
2668 29 placeless_element: FOR VARIABLE '=' expr TO expr optional_by DO $@6 DELIMITED .
2670 $default reduce using rule 29 (placeless_element)
2675 + 146 place: label . [$end, AND, DOT_X, DOT_Y, DOT_HT, DOT_WID, DOT_RAD, ',', '>', '+', '-', ';', '}', '@:>@', ')']
2676 + 147 | label . corner
2677 + 153 label: label . '.' LABEL
2678 + 180 corner: . DOT_N
2693 + 195 | . UPPER LEFT
2694 + 196 | . LOWER LEFT
2695 + 197 | . UPPER RIGHT
2696 + 198 | . LOWER RIGHT
2697 + 199 | . LEFT_CORNER
2698 + 200 | . RIGHT_CORNER
2699 + 201 | . UPPER LEFT_CORNER
2700 + 202 | . LOWER LEFT_CORNER
2701 + 203 | . UPPER RIGHT_CORNER
2702 + 204 | . LOWER RIGHT_CORNER
2711 + LEFT shift, and go to state 53
2712 + RIGHT shift, and go to state 54
2713 + DOT_N shift, and go to state 56
2714 + DOT_E shift, and go to state 57
2715 + DOT_W shift, and go to state 58
2716 + DOT_S shift, and go to state 59
2717 + DOT_NE shift, and go to state 60
2718 + DOT_SE shift, and go to state 61
2719 + DOT_NW shift, and go to state 62
2720 + DOT_SW shift, and go to state 63
2721 + DOT_C shift, and go to state 64
2722 + DOT_START shift, and go to state 65
2723 + DOT_END shift, and go to state 66
2724 + TOP shift, and go to state 78
2725 + BOTTOM shift, and go to state 79
2726 + UPPER shift, and go to state 80
2727 + LOWER shift, and go to state 81
2728 + LEFT_CORNER shift, and go to state 82
2729 + RIGHT_CORNER shift, and go to state 83
2730 + NORTH shift, and go to state 84
2731 + SOUTH shift, and go to state 85
2732 + EAST shift, and go to state 86
2733 + WEST shift, and go to state 87
2734 + CENTER shift, and go to state 88
2735 + END shift, and go to state 89
2736 + START shift, and go to state 90
2737 + '.' shift, and go to state 204
2739 + $default reduce using rule 146 (place)
2741 + corner go to state 205
2746 + 140 position_not_place: expr . between position AND position
2747 + 141 | expr . '<' position ',' position '>'
2748 + 142 between: . BETWEEN
2749 + 143 | . OF THE WAY BETWEEN
2750 + 144 expr_pair: expr . ',' expr
2751 + 219 expr: expr . '+' expr
2752 + 220 | expr . '-' expr
2753 + 221 | expr . '*' expr
2754 + 222 | expr . '/' expr
2755 + 223 | expr . '%' expr
2756 + 224 | expr . '^' expr
2757 + 239 | expr . '<' expr
2758 + 240 | expr . LESSEQUAL expr
2759 + 241 | expr . '>' expr
2760 + 242 | expr . GREATEREQUAL expr
2761 + 243 | expr . EQUALEQUAL expr
2762 + 244 | expr . NOTEQUAL expr
2763 + 245 | expr . ANDAND expr
2764 + 246 | expr . OROR expr
2766 + OF shift, and go to state 220
2767 + BETWEEN shift, and go to state 221
2768 + ANDAND shift, and go to state 222
2769 + OROR shift, and go to state 223
2770 + NOTEQUAL shift, and go to state 224
2771 + EQUALEQUAL shift, and go to state 225
2772 + LESSEQUAL shift, and go to state 226
2773 + GREATEREQUAL shift, and go to state 227
2774 + ',' shift, and go to state 228
2775 + '<' shift, and go to state 229
2776 + '>' shift, and go to state 230
2777 + '+' shift, and go to state 231
2778 + '-' shift, and go to state 232
2779 + '*' shift, and go to state 233
2780 + '/' shift, and go to state 234
2781 + '%' shift, and go to state 235
2782 + '^' shift, and go to state 236
2784 + between go to state 425
2789 + 134 position: . position_not_place
2791 + 136 position_not_place: . expr_pair
2792 + 137 | . position '+' expr_pair
2793 + 138 | . position '-' expr_pair
2794 + 139 | . '(' position ',' position ')'
2795 + 140 | . expr between position AND position
2796 + 140 | expr between . position AND position
2797 + 141 | . expr '<' position ',' position '>'
2798 + 144 expr_pair: . expr ',' expr
2799 + 145 | . '(' expr_pair ')'
2800 + 146 place: . label
2801 + 147 | . label corner
2802 + 148 | . corner label
2803 + 149 | . corner OF label
2805 + 151 label: . LABEL
2806 + 152 | . nth_primitive
2807 + 153 | . label '.' LABEL
2808 + 154 ordinal: . ORDINAL
2809 + 155 | . '`' any_expr TH
2810 + 156 optional_ordinal_last: . LAST
2811 + 157 | . ordinal LAST
2812 + 158 nth_primitive: . ordinal object_type
2813 + 159 | . optional_ordinal_last object_type
2814 + 180 corner: . DOT_N
2829 + 195 | . UPPER LEFT
2830 + 196 | . LOWER LEFT
2831 + 197 | . UPPER RIGHT
2832 + 198 | . LOWER RIGHT
2833 + 199 | . LEFT_CORNER
2834 + 200 | . RIGHT_CORNER
2835 + 201 | . UPPER LEFT_CORNER
2836 + 202 | . LOWER LEFT_CORNER
2837 + 203 | . UPPER RIGHT_CORNER
2838 + 204 | . LOWER RIGHT_CORNER
2846 + 212 expr: . VARIABLE
2848 + 214 | . place DOT_X
2849 + 215 | . place DOT_Y
2850 + 216 | . place DOT_HT
2851 + 217 | . place DOT_WID
2852 + 218 | . place DOT_RAD
2853 + 219 | . expr '+' expr
2854 + 220 | . expr '-' expr
2855 + 221 | . expr '*' expr
2856 + 222 | . expr '/' expr
2857 + 223 | . expr '%' expr
2858 + 224 | . expr '^' expr
2860 + 226 | . '(' any_expr ')'
2861 + 227 | . SIN '(' any_expr ')'
2862 + 228 | . COS '(' any_expr ')'
2863 + 229 | . ATAN2 '(' any_expr ',' any_expr ')'
2864 + 230 | . LOG '(' any_expr ')'
2865 + 231 | . EXP '(' any_expr ')'
2866 + 232 | . SQRT '(' any_expr ')'
2867 + 233 | . K_MAX '(' any_expr ',' any_expr ')'
2868 + 234 | . K_MIN '(' any_expr ',' any_expr ')'
2869 + 235 | . INT '(' any_expr ')'
2870 + 236 | . RAND '(' any_expr ')'
2871 + 237 | . RAND '(' ')'
2872 + 238 | . SRAND '(' any_expr ')'
2873 + 239 | . expr '<' expr
2874 + 240 | . expr LESSEQUAL expr
2875 + 241 | . expr '>' expr
2876 + 242 | . expr GREATEREQUAL expr
2877 + 243 | . expr EQUALEQUAL expr
2878 + 244 | . expr NOTEQUAL expr
2879 + 245 | . expr ANDAND expr
2880 + 246 | . expr OROR expr
2883 + LABEL shift, and go to state 48
2884 + VARIABLE shift, and go to state 49
2885 + NUMBER shift, and go to state 50
2886 + ORDINAL shift, and go to state 51
2887 + LAST shift, and go to state 52
2888 + LEFT shift, and go to state 53
2889 + RIGHT shift, and go to state 54
2890 + HERE shift, and go to state 55
2891 + DOT_N shift, and go to state 56
2892 + DOT_E shift, and go to state 57
2893 + DOT_W shift, and go to state 58
2894 + DOT_S shift, and go to state 59
2895 + DOT_NE shift, and go to state 60
2896 + DOT_SE shift, and go to state 61
2897 + DOT_NW shift, and go to state 62
2898 + DOT_SW shift, and go to state 63
2899 + DOT_C shift, and go to state 64
2900 + DOT_START shift, and go to state 65
2901 + DOT_END shift, and go to state 66
2902 + SIN shift, and go to state 67
2903 + COS shift, and go to state 68
2904 + ATAN2 shift, and go to state 69
2905 + LOG shift, and go to state 70
2906 + EXP shift, and go to state 71
2907 + SQRT shift, and go to state 72
2908 + K_MAX shift, and go to state 73
2909 + K_MIN shift, and go to state 74
2910 + INT shift, and go to state 75
2911 + RAND shift, and go to state 76
2912 + SRAND shift, and go to state 77
2913 + TOP shift, and go to state 78
2914 + BOTTOM shift, and go to state 79
2915 + UPPER shift, and go to state 80
2916 + LOWER shift, and go to state 81
2917 + LEFT_CORNER shift, and go to state 82
2918 + RIGHT_CORNER shift, and go to state 83
2919 + NORTH shift, and go to state 84
2920 + SOUTH shift, and go to state 85
2921 + EAST shift, and go to state 86
2922 + WEST shift, and go to state 87
2923 + CENTER shift, and go to state 88
2924 + END shift, and go to state 89
2925 + START shift, and go to state 90
2926 + '(' shift, and go to state 91
2927 + '`' shift, and go to state 92
2928 + '-' shift, and go to state 93
2929 + '!' shift, and go to state 94
2931 + position go to state 426
2932 + position_not_place go to state 99
2933 + expr_pair go to state 100
2934 + place go to state 101
2935 + label go to state 423
2936 + ordinal go to state 103
2937 + optional_ordinal_last go to state 104
2938 + nth_primitive go to state 105
2939 + corner go to state 106
2940 + expr go to state 424
2945 + 137 position_not_place: position . '+' expr_pair
2946 + 138 | position . '-' expr_pair
2947 + 140 | expr between position . AND position
2949 + AND shift, and go to state 427
2950 + '+' shift, and go to state 197
2951 + '-' shift, and go to state 198
2956 + 134 position: . position_not_place
2958 + 136 position_not_place: . expr_pair
2959 + 137 | . position '+' expr_pair
2960 + 138 | . position '-' expr_pair
2961 + 139 | . '(' position ',' position ')'
2962 + 140 | . expr between position AND position
2963 + 140 | expr between position AND . position
2964 + 141 | . expr '<' position ',' position '>'
2965 + 144 expr_pair: . expr ',' expr
2966 + 145 | . '(' expr_pair ')'
2967 + 146 place: . label
2968 + 147 | . label corner
2969 + 148 | . corner label
2970 + 149 | . corner OF label
2972 + 151 label: . LABEL
2973 + 152 | . nth_primitive
2974 + 153 | . label '.' LABEL
2975 + 154 ordinal: . ORDINAL
2976 + 155 | . '`' any_expr TH
2977 + 156 optional_ordinal_last: . LAST
2978 + 157 | . ordinal LAST
2979 + 158 nth_primitive: . ordinal object_type
2980 + 159 | . optional_ordinal_last object_type
2981 + 180 corner: . DOT_N
2996 + 195 | . UPPER LEFT
2997 + 196 | . LOWER LEFT
2998 + 197 | . UPPER RIGHT
2999 + 198 | . LOWER RIGHT
3000 + 199 | . LEFT_CORNER
3001 + 200 | . RIGHT_CORNER
3002 + 201 | . UPPER LEFT_CORNER
3003 + 202 | . LOWER LEFT_CORNER
3004 + 203 | . UPPER RIGHT_CORNER
3005 + 204 | . LOWER RIGHT_CORNER
3013 + 212 expr: . VARIABLE
3015 + 214 | . place DOT_X
3016 + 215 | . place DOT_Y
3017 + 216 | . place DOT_HT
3018 + 217 | . place DOT_WID
3019 + 218 | . place DOT_RAD
3020 + 219 | . expr '+' expr
3021 + 220 | . expr '-' expr
3022 + 221 | . expr '*' expr
3023 + 222 | . expr '/' expr
3024 + 223 | . expr '%' expr
3025 + 224 | . expr '^' expr
3027 + 226 | . '(' any_expr ')'
3028 + 227 | . SIN '(' any_expr ')'
3029 + 228 | . COS '(' any_expr ')'
3030 + 229 | . ATAN2 '(' any_expr ',' any_expr ')'
3031 + 230 | . LOG '(' any_expr ')'
3032 + 231 | . EXP '(' any_expr ')'
3033 + 232 | . SQRT '(' any_expr ')'
3034 + 233 | . K_MAX '(' any_expr ',' any_expr ')'
3035 + 234 | . K_MIN '(' any_expr ',' any_expr ')'
3036 + 235 | . INT '(' any_expr ')'
3037 + 236 | . RAND '(' any_expr ')'
3038 + 237 | . RAND '(' ')'
3039 + 238 | . SRAND '(' any_expr ')'
3040 + 239 | . expr '<' expr
3041 + 240 | . expr LESSEQUAL expr
3042 + 241 | . expr '>' expr
3043 + 242 | . expr GREATEREQUAL expr
3044 + 243 | . expr EQUALEQUAL expr
3045 + 244 | . expr NOTEQUAL expr
3046 + 245 | . expr ANDAND expr
3047 + 246 | . expr OROR expr
3050 + LABEL shift, and go to state 48
3051 + VARIABLE shift, and go to state 49
3052 + NUMBER shift, and go to state 50
3053 + ORDINAL shift, and go to state 51
3054 + LAST shift, and go to state 52
3055 + LEFT shift, and go to state 53
3056 + RIGHT shift, and go to state 54
3057 + HERE shift, and go to state 55
3058 + DOT_N shift, and go to state 56
3059 + DOT_E shift, and go to state 57
3060 + DOT_W shift, and go to state 58
3061 + DOT_S shift, and go to state 59
3062 + DOT_NE shift, and go to state 60
3063 + DOT_SE shift, and go to state 61
3064 + DOT_NW shift, and go to state 62
3065 + DOT_SW shift, and go to state 63
3066 + DOT_C shift, and go to state 64
3067 + DOT_START shift, and go to state 65
3068 + DOT_END shift, and go to state 66
3069 + SIN shift, and go to state 67
3070 + COS shift, and go to state 68
3071 + ATAN2 shift, and go to state 69
3072 + LOG shift, and go to state 70
3073 + EXP shift, and go to state 71
3074 + SQRT shift, and go to state 72
3075 + K_MAX shift, and go to state 73
3076 + K_MIN shift, and go to state 74
3077 + INT shift, and go to state 75
3078 + RAND shift, and go to state 76
3079 + SRAND shift, and go to state 77
3080 + TOP shift, and go to state 78
3081 + BOTTOM shift, and go to state 79
3082 + UPPER shift, and go to state 80
3083 + LOWER shift, and go to state 81
3084 + LEFT_CORNER shift, and go to state 82
3085 + RIGHT_CORNER shift, and go to state 83
3086 + NORTH shift, and go to state 84
3087 + SOUTH shift, and go to state 85
3088 + EAST shift, and go to state 86
3089 + WEST shift, and go to state 87
3090 + CENTER shift, and go to state 88
3091 + END shift, and go to state 89
3092 + START shift, and go to state 90
3093 + '(' shift, and go to state 91
3094 + '`' shift, and go to state 92
3095 + '-' shift, and go to state 93
3096 + '!' shift, and go to state 94
3098 + position go to state 402
3099 + position_not_place go to state 99
3100 + expr_pair go to state 100
3101 + place go to state 101
3102 + label go to state 423
3103 + ordinal go to state 103
3104 + optional_ordinal_last go to state 104
3105 + nth_primitive go to state 105
3106 + corner go to state 106
3107 + expr go to state 424
3113 dnl PARSER-EXIT-VALUE, PARSER-STDOUT, PARSER-STDERR
3114 [AT_COND_CASE([[LALR]], [[1]], [[0]])],
3116 [AT_COND_CASE([[LALR]],
3117 [[syntax error, unexpected LEFT