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