• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
19AT_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# --------------------------------------------------------------
28m4_define([AT_TEST_EXISTING_GRAMMAR], [_AT_TEST_EXISTING_GRAMMAR([$][1], $@)])
29
30m4_define([_AT_TEST_EXISTING_GRAMMAR],
31[
32dnl See how the parser tables have changed.  As the .output format evolves, the
33dnl diff comments with line numbers might be a pain to maintain.  When that
34dnl time comes, just use sed to drop the line numbers.  For now, as LR(1)
35dnl support is rapidly evolving, let's keep that information to be careful.
36dnl However, we don't do diffs for canonical LR(1) because the diff is huge.
37m4_pushdef([AT_LALR1_DIFF_CHECK],
38[dnl We need diff -u, which is not portable.
39AT_CHECK([diff -u /dev/null /dev/null || exit 77], [0], [ignore])
40
41AT_CHECK([[sed 's/^%define lr.type .*$//' input.y > input-lalr.y]])
42AT_BISON_CHECK([[--report=all input-lalr.y]], [[0]], [ignore], [ignore])
43AT_CHECK([[diff -u input-lalr.output input.output \
44           | sed -n '/^@@/,$p' | sed 's/^ $//']],
45         [[0]], [$1])])
46
47AT_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])
52AT_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])
57AT_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
64m4_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
79AT_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[[
117start
118	: opt_nls program opt_nls
119	;
120
121program
122	: rule
123	| program rule
124	| error
125	| program error
126	| /* empty */
127	;
128
129rule
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
140func_name
141	: NAME
142	| FUNC_CALL
143	| lex_builtin
144	;
145
146lex_builtin
147	: LEX_BUILTIN
148	| LEX_LENGTH
149	;
150
151function_prologue
152	: LEX_FUNCTION {} func_name '(' opt_param_list r_paren opt_nls
153	;
154
155function_body
156	: l_brace statements r_brace opt_semi opt_nls
157	| l_brace r_brace opt_semi opt_nls
158	;
159
160pattern
161	: exp
162	| exp ',' exp
163	;
164
165regexp
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
173action
174	: l_brace statements r_brace opt_semi opt_nls
175	| l_brace r_brace opt_semi opt_nls
176	;
177
178statements
179	: statement
180	| statements statement
181	| error
182	| statements error
183	;
184
185statement_term
186	: nls
187	| semi opt_nls
188	;
189
190statement
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
213print
214	: LEX_PRINT
215	| LEX_PRINTF
216	;
217
218if_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
224nls
225	: NEWLINE
226	| nls NEWLINE
227	;
228
229opt_nls
230	: /* empty */
231	| nls
232	;
233
234input_redir
235	: /* empty */
236	| '<' simp_exp
237	;
238
239output_redir
240	: /* empty */
241	| '>' exp
242	| APPEND_OP exp
243	| '|' exp
244	| TWOWAYIO exp
245	;
246
247opt_param_list
248	: /* empty */
249	| param_list
250	;
251
252param_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 */
261opt_exp
262	: /* empty */
263	| exp
264	;
265
266opt_rexpression_list
267	: /* empty */
268	| rexpression_list
269	;
270
271rexpression_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
280opt_expression_list
281	: /* empty */
282	| expression_list
283	;
284
285expression_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.  */
295exp	: 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
314rexp
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
329simp_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
342non_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
359opt_variable
360	: /* empty */
361	| variable
362	;
363
364variable
365	: NAME
366	| NAME '[' expression_list ']'
367	| '$' non_post_simp_exp
368	;
369
370l_brace
371	: '{' opt_nls
372	;
373
374r_brace
375	: '}' opt_nls
376	;
377
378r_paren
379	: ')'
380	;
381
382opt_semi
383	: /* empty */
384	| semi
385	;
386
387semi
388	: ';'
389	;
390
391comma	: ',' opt_nls
392	;
393]],
394
395dnl INPUT
396dnl
397dnl For example, in AWK:
398dnl
399dnl   getline $!4*0;
400dnl
401dnl The grammar below (from GNU AWK 3.1.0) using canonical LR(1) or IELR(1)
402dnl parses it as:
403dnl
404dnl   getline $!(4*0);
405dnl
406dnl That is, they shift `*' immediately and make it part of the getline
407dnl argument.
408dnl
409dnl The grammar below using LALR(1) parses it as a syntax error.  So does
410dnl GNU AWK 3.0.6, 3.1.0, and 3.1.1.  They reduce the full getline expression
411dnl before shifting `*' even though `*' is not a valid lookahead.
412dnl
413dnl GNU AWK 3.1.2, 3.1.3, 3.1.4, and 3.1.5 parse it as:
414dnl
415dnl   (getline $!4)*0;
416dnl
417dnl That is, like the other versions of GNU AWK, they reduce the full getline
418dnl expression before shifting `*'.  However, because of a different LHS on the
419dnl getline rule, `*' actually is a valid lookahead.  Solaris /usr/xpg4/bin/awk
420dnl and the Open Group awk specification seem to agree:
421dnl
422dnl   http://www.opengroup.org/pubs/online/7908799/xcu/awk.html
423dnl
424dnl /bin/nawk and /bin/awk on Solaris 10 report it as a syntax error, but they
425dnl don't like even `print $!4;'.
426[[LEX_GETLINE, '$', '!', YNUMBER, '*', YNUMBER, ';']],
427
428dnl BISON-STDERR
429[AT_COND_CASE([[canonical LR]],
430[[input.y: conflicts: 265 shift/reduce]],
431[[input.y: conflicts: 65 shift/reduce]])[
432]],
433
434dnl LAST-STATE
435[AT_COND_CASE([[LALR]], [[319]], [[canonical LR]], [[2358]], [[328]])],
436
437dnl LALR1-DIFF not used for canonical LR(1) because the diff is huge.
438dnl Isocore map from LALR(1) state number to new state number plus descriptions
439dnl of any change in the actions resulting in a change in accepted language:
440dnl   - 24 -> 320
441dnl   - 16 -> 321
442dnl   - 17 -> 322
443dnl   - 20 -> 323
444dnl   - 21 -> 324
445dnl   - 54 -> 325
446dnl   - 56 -> 326: reduce -> shift on '*', '/', and '%'
447dnl   - 58 -> 327: reduce -> shift on '*', '/', and '%'
448dnl   - 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
763dnl OTHER-CHECKS
764[],
765
766dnl PARSER-EXIT-VALUE, PARSER-STDOUT, PARSER-STDERR
767dnl 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
783AT_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 */
847MAIN_MODULE     :       {}
848			MODULS
849		|	error HSTATEMENTSEPARATOR MBEE_DECLSTMS
850		;
851EXT_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		;
869EXTERNAL_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		;
882MBEE_REST_EXT_LIST:	/* EMPTY
883		|	HPAREXPSEPARATOR EXT_KIND_LIST
884		;
885EXT_KIND_LIST	:	EXT_KIND_ITEM
886		|	EXT_KIND_LIST HPAREXPSEPARATOR EXT_KIND_ITEM
887		;
888EXT_KIND_ITEM	:	HIDENTIFIER
889			EXT_IDENT
890				{}*/
891		;
892EMPTY_BLOCK	:	/*EMPT*/
893		|	HBEGIN HEND
894		;
895EXT_LIST	:	EXT_ITEM
896		|	EXT_LIST HPAREXPSEPARATOR EXT_ITEM
897		;
898EXT_ITEM	:	HIDENTIFIER
899			EXT_IDENT
900		;
901EXT_IDENT	:	/* EMPTY */
902		|	HVALRELOPERATOR {}
903			HTEXTKONST
904		;
905/* GRAMATIKK FOR TYPER */
906NO_TYPE         :       /*EMPT*/
907		;
908MBEE_TYPE       :       NO_TYPE
909		|       TYPE
910		;
911TYPE            :       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 */
925MBEE_ELSE_PART  :       /*EMPT*/
926/*		|	HELSE
927			HIF
928			EXPRESSION
929			HTHEN   {}
930			BLOCK   {}
931			MBEE_ELSE_PART          {}*/
932		|       HELSE   {}
933			BLOCK
934		;
935FOR_LIST        :       FOR_LIST_ELEMENT
936		|       FOR_LIST_ELEMENT
937			HPAREXPSEPARATOR
938			FOR_LIST
939		;
940FOR_LIST_ELEMENT:       EXPRESSION
941			MBEE_F_L_EL_R_PT
942		;
943MBEE_F_L_EL_R_PT:       /*EMPT*/
944		|       HWHILE
945			EXPRESSION
946		|       HSTEP
947			EXPRESSION
948			HUNTIL
949			EXPRESSION
950		;
951GOTO            :       HGO
952			HTO
953		|       HGOTO
954		;
955CONN_STATE_R_PT :       WHEN_CLAUSE_LIST
956		|       HDO   {}
957			BLOCK
958		;
959WHEN_CLAUSE_LIST:       HWHEN
960			HIDENTIFIER
961			HDO    {}
962			BLOCK
963		|       WHEN_CLAUSE_LIST
964			HWHEN
965			HIDENTIFIER
966			HDO    {}
967			BLOCK
968		;
969MBEE_OTWI_CLAUS :       /*EMPT*/
970		|       HOTHERWISE {}
971
972			BLOCK
973		;
974ACTIVATOR	:	HACTIVATE
975		|	HREACTIVATE
976		;
977SCHEDULE	:	/*EMPT*/
978		|	ATDELAY EXPRESSION	{}
979			PRIOR
980		|	BEFOREAFTER		{}
981			EXPRESSION
982		;
983ATDELAY		:	HAT
984		|	HDELAY
985		;
986BEFOREAFTER	:	HBEFORE
987		|	HAFTER
988		;
989PRIOR		:	/*EMPT*/
990		|	HPRIOR
991		;
992/* GRAMATIKK FOR SETNINGER OG DEKLARASJONER */
993MODULSTATEMENT  :       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		;
1058IMPORT_SPEC_MODULE:
1059		;
1060DECLSTATEMENT	:	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		;
1078BLOCK           :       DECLSTATEMENT
1079		|       HBEGIN MBEE_DECLSTMS HEND
1080		|	HBEGIN error HSTATEMENTSEPARATOR MBEE_DECLSTMS HEND
1081		|	HBEGIN error HEND
1082		;
1083MBEE_DECLSTMS   :       MBEE_DECLSTMSU
1084		;
1085MBEE_DECLSTMSU  :       DECLSTATEMENT
1086		|       MBEE_DECLSTMSU
1087			HSTATEMENTSEPARATOR
1088			DECLSTATEMENT
1089		;
1090MODULS		:	MODULSTATEMENT
1091		|	MODULS HSTATEMENTSEPARATOR MODULSTATEMENT
1092		;
1093/* GRAMATIKK FOR DEL AV DEKLARASJONER */
1094ARR_SEGMENT_LIST:       ARR_SEGMENT
1095		|       ARR_SEGMENT_LIST
1096			HPAREXPSEPARATOR
1097			ARR_SEGMENT
1098		;
1099ARR_SEGMENT	:       ARRAY_SEGMENT
1100			HBEGPAR
1101			BAUND_PAIR_LIST HENDPAR
1102		;
1103ARRAY_SEGMENT   :       ARRAY_SEGMENT_EL        {}
1104
1105		|       ARRAY_SEGMENT_EL
1106			HPAREXPSEPARATOR
1107			ARRAY_SEGMENT
1108		;
1109ARRAY_SEGMENT_EL:       HIDENTIFIER
1110		;
1111BAUND_PAIR_LIST :       BAUND_PAIR
1112		|       BAUND_PAIR
1113			HPAREXPSEPARATOR
1114			BAUND_PAIR_LIST
1115		;
1116BAUND_PAIR      :       EXPRESSION
1117			HLABELSEPARATOR
1118			EXPRESSION
1119		;
1120SWITCH_LIST     :       EXPRESSION
1121		|       EXPRESSION
1122			HPAREXPSEPARATOR
1123			SWITCH_LIST
1124		;
1125HEADING         :       MBEE_FMAL_PAR_P HSTATEMENTSEPARATOR {}
1126			MBEE_MODE_PART  {}
1127			MBEE_SPEC_PART  {}
1128			MBEE_PROT_PART  {}
1129			MBEE_VIRT_PART
1130		;
1131MBEE_FMAL_PAR_P :       /*EMPT*/
1132		|       FMAL_PAR_PART
1133		;
1134FMAL_PAR_PART   :       HBEGPAR NO_TYPE
1135			MBEE_LISTV HENDPAR
1136		;
1137MBEE_LISTV      :       /*EMPT*/
1138		|       LISTV
1139		;
1140LISTV           :       HIDENTIFIER
1141		|	FPP_CATEG HDOTDOTDOT
1142		|       HIDENTIFIER     {}
1143			HPAREXPSEPARATOR LISTV
1144		|       FPP_SPEC
1145		|       FPP_SPEC
1146			HPAREXPSEPARATOR LISTV
1147		;
1148FPP_HEADING     :       HBEGPAR NO_TYPE
1149			FPP_MBEE_LISTV HENDPAR
1150		;
1151FPP_MBEE_LISTV  :       /*EMPT*/
1152		|       FPP_LISTV
1153		;
1154FPP_LISTV       :	FPP_CATEG HDOTDOTDOT
1155		|       FPP_SPEC
1156		|       FPP_SPEC
1157			HPAREXPSEPARATOR LISTV
1158		;
1159FPP_SPEC        :       FPP_CATEG SPECIFIER HIDENTIFIER
1160		|	FPP_CATEG FPP_PROC_DECL_IN_SPEC
1161		;
1162FPP_CATEG       :       HNAME HLABELSEPARATOR
1163		|       HVALUE HLABELSEPARATOR
1164		|       HVAR HLABELSEPARATOR
1165		|       /*EMPT*/
1166		;
1167FPP_PROC_DECL_IN_SPEC:	MBEE_TYPE HPROCEDURE
1168			HIDENTIFIER
1169					{}
1170			FPP_HEADING {} { /* Yes, two "final" actions. */ }
1171		;
1172IDENTIFIER_LISTV:       HIDENTIFIER
1173		|	HDOTDOTDOT
1174		|       HIDENTIFIER     {}
1175			HPAREXPSEPARATOR IDENTIFIER_LISTV
1176		;
1177MBEE_MODE_PART  :       /*EMPT*/
1178		|       MODE_PART
1179		;
1180MODE_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		;
1196NAME_PART       :       HNAME           {}
1197			IDENTIFIER_LISTV
1198			HSTATEMENTSEPARATOR
1199		;
1200VAR_PART        :       HVAR            {}
1201			IDENTIFIER_LISTV
1202			HSTATEMENTSEPARATOR
1203		;
1204VALUE_PART      :       HVALUE          {}
1205			IDENTIFIER_LISTV HSTATEMENTSEPARATOR
1206		;
1207MBEE_SPEC_PART  :       /*EMPT*/
1208		|       SPEC_PART
1209		;
1210SPEC_PART       :       ONE_SPEC
1211		|       SPEC_PART ONE_SPEC
1212		;
1213ONE_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		;
1222SPECIFIER       :       TYPE
1223		|       MBEE_TYPE
1224			HARRAY
1225		|       HLABEL
1226		|       HSWITCH
1227		;
1228PROC_DECL_IN_SPEC:	MBEE_TYPE HPROCEDURE
1229			HIDENTIFIER
1230					{}
1231			HEADING
1232					{}
1233			MBEE_BEGIN_END
1234		;
1235MBEE_BEGIN_END	:	/* EMPTY */
1236		|	HBEGIN HEND
1237		;
1238MBEE_PROT_PART  :       /*EMPT*/
1239		|       PROTECTION_PART
1240		;
1241PROTECTION_PART :       PROT_SPECIFIER IDENTIFIER_LIST
1242			HSTATEMENTSEPARATOR
1243		|       PROTECTION_PART  PROT_SPECIFIER
1244			IDENTIFIER_LIST HSTATEMENTSEPARATOR
1245		;
1246PROT_SPECIFIER  :       HHIDDEN
1247		|       HPROTECTED
1248		|       HHIDDEN
1249			HPROTECTED
1250		|       HPROTECTED
1251			HHIDDEN
1252		;
1253MBEE_VIRT_PART  :       /*EMPT*/
1254		|       VIRTUAL_PART
1255		;
1256VIRTUAL_PART    :       HVIRTUAL
1257			HLABELSEPARATOR
1258			MBEE_SPEC_PART
1259		;
1260IDENTIFIER_LIST :       HIDENTIFIER
1261		|       IDENTIFIER_LIST HPAREXPSEPARATOR
1262			HIDENTIFIER
1263		;
1264IDENTIFIER_LISTC:       HIDENTIFIER
1265			MBEE_CONSTANT
1266		|       IDENTIFIER_LISTC HPAREXPSEPARATOR
1267			HIDENTIFIER
1268			MBEE_CONSTANT
1269		;
1270MBEE_CONSTANT	:	/* EMPTY */
1271		|	HVALRELOPERATOR
1272				{}
1273			EXPRESSION
1274		;
1275
1276/* GRAMATIKK FOR UTTRYKK */
1277EXPRESSION      :       EXPRESSION_SIMP
1278		|       HIF
1279			EXPRESSION
1280			HTHEN
1281			EXPRESSION
1282			HELSE
1283			EXPRESSION
1284		;
1285EXPRESSION_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		;
1351ARG_R_PT        :       /*EMPTY*/
1352		|       HBEGPAR
1353			ARGUMENT_LIST HENDPAR
1354		;
1355MBEE_ARG_R_PT   :       /*EMPTY*/
1356		|       HBEGPAR
1357			ARGUMENT_LIST HENDPAR
1358		;
1359ARGUMENT_LIST   :       EXPRESSION
1360		|       EXPRESSION
1361			HPAREXPSEPARATOR
1362			ARGUMENT_LIST
1363		;
1364]],
1365
1366dnl INPUT
1367[[]],
1368
1369dnl 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
1375dnl LAST-STATE
1376[AT_COND_CASE([[canonical LR]], [[10425]], [[442]])],
1377
1378dnl LALR1-DIFF not used for canonical LR(1) because the diff is huge.
1379[],
1380
1381dnl OTHER-CHECKS
1382[AT_COND_CASE([[canonical LR]], [[]],
1383[AT_CHECK([[grep '^State.*conflicts:' input.output]], [[0]],
1384[[State 64 conflicts: 14 shift/reduce
1385State 164 conflicts: 1 shift/reduce
1386State 201 conflicts: 33 shift/reduce, 4 reduce/reduce
1387State 206 conflicts: 1 shift/reduce
1388State 240 conflicts: 1 shift/reduce
1389State 335 conflicts: 9 shift/reduce, 2 reduce/reduce
1390State 356 conflicts: 1 shift/reduce
1391State 360 conflicts: 9 shift/reduce, 2 reduce/reduce
1392State 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
1403AT_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
1531box "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
1538precedence than left and right, so that eg `line chop left'
1539parses 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'
1552works */
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[[
1572top:
1573	optional_separator
1574	| element_list
1575	;
1576
1577element_list:
1578	optional_separator middle_element_list optional_separator
1579	;
1580
1581middle_element_list:
1582	element
1583	| middle_element_list separator element
1584	;
1585
1586optional_separator:
1587	/* empty */
1588	| separator
1589	;
1590
1591separator:
1592	';'
1593	| separator ';'
1594	;
1595
1596placeless_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
1631reset_variables:
1632	RESET VARIABLE
1633	| reset_variables VARIABLE
1634	| reset_variables ',' VARIABLE
1635	;
1636
1637print_args:
1638	print_arg
1639	| print_args print_arg
1640	;
1641
1642print_arg:
1643	expr							%prec ','
1644	| text
1645	| position						%prec ','
1646	;
1647
1648simple_if:
1649	IF any_expr THEN
1650		{}
1651	DELIMITED
1652	;
1653
1654until:
1655	/* empty */
1656	| UNTIL TEXT
1657	;
1658
1659any_expr:
1660	expr
1661	| text_expr
1662	;
1663
1664text_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
1676optional_by:
1677	/* empty */
1678	| BY expr
1679	| BY '*' expr
1680	;
1681
1682element:
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
1693optional_element:
1694	/* empty */
1695	| element
1696	;
1697
1698object_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
1761text:
1762	TEXT
1763	| SPRINTF '(' TEXT sprintf_args ')'
1764	;
1765
1766sprintf_args:
1767	/* empty */
1768	| sprintf_args ',' expr
1769	;
1770
1771position:
1772	position_not_place
1773	| place
1774	;
1775
1776position_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
1785between:
1786	BETWEEN
1787	| OF THE WAY BETWEEN
1788	;
1789
1790expr_pair:
1791	expr ',' expr
1792	| '(' expr_pair ')'
1793	;
1794
1795place:
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
1804label:
1805	LABEL
1806	| nth_primitive
1807	| label '.' LABEL
1808	;
1809
1810ordinal:
1811	ORDINAL
1812	| '`' any_expr TH
1813	;
1814
1815optional_ordinal_last:
1816	LAST
1817	| ordinal LAST
1818	;
1819
1820nth_primitive:
1821	ordinal object_type
1822	| optional_ordinal_last object_type
1823	;
1824
1825object_type:
1826	BOX
1827	| CIRCLE
1828	| ELLIPSE
1829	| ARC
1830	| LINE
1831	| ARROW
1832	| SPLINE
1833	| '[' ']'
1834	| TEXT
1835	;
1836
1837label_path:
1838	'.' LABEL
1839	| label_path '.' LABEL
1840	;
1841
1842relative_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
1850path:
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
1861corner:
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
1896expr:
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
1936dnl INPUT
1937dnl
1938dnl For example, in pic:
1939dnl
1940dnl   .PS
1941dnl   A: circle "A"
1942dnl   B: A left
1943dnl   circle "B" at B
1944dnl   .PE
1945dnl
1946dnl Even using groff 1.19.2, the 3rd line above is a syntax error.  Change
1947dnl "left" to "right", and it still is.  However, add "upper" or "lower" before
1948dnl "left or "right" and it's accepted to mean ".nw", ".ne", ".sw", or ".se".
1949dnl (There seem to be no aliases for "north" and "south" that can stand alone
1950dnl without being followed by "of".)
1951[[VARIABLE, '=', LABEL, LEFT, DOT_X]],
1952
1953dnl 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
1957dnl LAST-STATE
1958[AT_COND_CASE([[LALR]], [[422]], [[canonical LR]], [[4833]], [[427]])],
1959
1960dnl LALR1-DIFF not used for canonical LR(1) because the diff is huge.
1961dnl Isocore map from LALR(1) state number to new state number plus descriptions
1962dnl of any change in the actions resulting in a change in accepted language:
1963dnl   - 102 -> 423: reduce -> shift on LEFT and RIGHT
1964dnl   - 237 -> 425
1965dnl   - 266 -> 424
1966dnl   - 339 -> 426
1967dnl   - 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
3111dnl OTHER-CHECKS
3112[],
3113
3114dnl 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