]> git.saurik.com Git - bison.git/blame - tests/existing.at
Merge branch 'branch-2.6' into maint
[bison.git] / tests / existing.at
CommitLineData
817e9f41 1# Exercising Bison on actual grammars. -*- Autotest -*-
2740f169 2
c932d613 3# Copyright (C) 1989-1992, 2000-2005, 2007, 2009-2012 Free Software
ea0a7676 4# Foundation, Inc.
817e9f41 5
f16b0819 6# This program is free software: you can redistribute it and/or modify
817e9f41 7# it under the terms of the GNU General Public License as published by
f16b0819
PE
8# the Free Software Foundation, either version 3 of the License, or
9# (at your option) any later version.
10#
817e9f41
AD
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.
f16b0819 15#
817e9f41 16# You should have received a copy of the GNU General Public License
f16b0819 17# along with this program. If not, see <http://www.gnu.org/licenses/>.
817e9f41
AD
18
19AT_BANNER([[Existing Grammars.]])
817e9f41 20
f805dfcb
JD
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],
a1a77e1f
AD
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]])
f805dfcb
JD
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]],
f37495f6 48 [[%define lr.type lalr
f805dfcb
JD
49]$3],
50 [$4], [$5], [$6], [$7],
cba97506 51 [AT_LALR1_DIFF_CHECK([$8])$9], [$10], [$11], [$12])
f805dfcb 52AT_TEST_TABLES_AND_PARSE([$2[: IELR(1)]], [[IELR]], [[last-state]],
f37495f6 53 [[%define lr.type ielr
f805dfcb
JD
54]$3],
55 [$4], [$5], [$6], [$7],
cba97506 56 [AT_LALR1_DIFF_CHECK([$8])$9], [$10], [$11], [$12])
f805dfcb
JD
57AT_TEST_TABLES_AND_PARSE([$2[: Canonical LR(1)]], [[canonical LR]],
58 [[last-state,no-xml]],
f37495f6 59 [[%define lr.type canonical-lr
f805dfcb
JD
60]$3],
61 [$4], [$5], [$6], [$7],
cba97506 62 [$9], [$10], [$11], [$12])
f805dfcb
JD
63
64m4_popdef([AT_LALR1_DIFF_CHECK])
65])
66
67
68
69## ----------------------- ##
70## GNU AWK 3.1.0 Grammar. ##
71## ----------------------- ##
817e9f41
AD
72
73# We have been careful to strip all the actions excepts the
f805dfcb 74# mid-rule actions.
817e9f41 75#
f805dfcb
JD
76# There are 65 SR conflicts. Bison was once wrong, due to an incorrect
77# computation of nullable. It reported 485 SR conflicts!
817e9f41 78
f805dfcb
JD
79AT_TEST_EXISTING_GRAMMAR([[GNU AWK 3.1.0 Grammar]],
80[[%error-verbose
817e9f41
AD
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 '(' ')'
f805dfcb
JD
115]],
116[[
817e9f41
AD
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
817e9f41
AD
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
f0064700
PE
371 : '{' opt_nls
372 ;
817e9f41
AD
373
374r_brace
f0064700 375 : '}' opt_nls
817e9f41
AD
376 ;
377
378r_paren
379 : ')'
380 ;
381
382opt_semi
383 : /* empty */
384 | semi
385 ;
386
387semi
388 : ';'
389 ;
390
391comma : ',' opt_nls
392 ;
f805dfcb
JD
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]])])
817e9f41 773
817e9f41
AD
774## ----------------- ##
775## GNU Cim Grammar. ##
776## ----------------- ##
777
817e9f41
AD
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
f805dfcb 783AT_TEST_EXISTING_GRAMMAR([[GNU Cim Grammar]],
74516381 784[[
817e9f41 785%token
f0064700
PE
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
04098407 812 HDOTDOTDOT
817e9f41 813
affac613
AD
814%token HIDENTIFIER
815%token HBOOLEANKONST HINTEGERKONST HCHARACTERKONST
816%token HREALKONST
817%token HTEXTKONST
817e9f41 818
817e9f41 819
affac613 820%right HASSIGN
817e9f41
AD
821%left HORELSE
822%left HANDTHEN
823%left HEQV
824%left HIMP
825%left HOR
826%left HAND
827
828%left HNOT
829
affac613 830%left HVALRELOPERATOR HREFRELOPERATOR HOBJRELOPERATOR
817e9f41
AD
831
832%left HCONC
833
affac613
AD
834%left HTERMOPERATOR
835%left UNEAR
836%left HFACTOROPERATOR
817e9f41
AD
837%left HPRIMARYOPERATOR
838
839%left HQUA
840
841%left HDOT
842
843%start MAIN_MODULE
f805dfcb
JD
844]],
845[[
817e9f41 846/* GRAMATIKK FOR PROGRAM MODULES */
affac613
AD
847MAIN_MODULE : {}
848 MODULS
04098407 849 | error HSTATEMENTSEPARATOR MBEE_DECLSTMS
817e9f41
AD
850 ;
851EXT_DECLARATION : HEXTERNAL
852 MBEE_TYPE
853 HPROCEDURE
affac613 854 {}
817e9f41
AD
855 EXT_LIST
856 |
857 HEXTERNAL
858 HIDENTIFIER
859 HPROCEDURE
affac613
AD
860 {}
861 HIDENTIFIER {}
817e9f41 862 EXTERNAL_KIND_ITEM
817e9f41
AD
863 | HEXTERNAL
864 HCLASS
affac613 865 {}
817e9f41
AD
866 EXT_LIST
867
868 ;
869EXTERNAL_KIND_ITEM: EXT_IDENT
870 HOBJRELOPERATOR
affac613 871 {}
f0064700 872 MBEE_TYPE HPROCEDURE
817e9f41 873 HIDENTIFIER
affac613 874 {}
f0064700 875 HEADING EMPTY_BLOCK
affac613 876 {}
817e9f41
AD
877/* |
878 EXT_IDENT
affac613 879 {}
817e9f41 880 MBEE_REST_EXT_LIST
817e9f41
AD
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
affac613 890 {}*/
817e9f41
AD
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
817e9f41 900 ;
affac613
AD
901EXT_IDENT : /* EMPTY */
902 | HVALRELOPERATOR {}
903 HTEXTKONST
817e9f41
AD
904 ;
905/* GRAMATIKK FOR TYPER */
affac613 906NO_TYPE : /*EMPT*/
f0064700 907 ;
817e9f41 908MBEE_TYPE : NO_TYPE
f0064700
PE
909 | TYPE
910 ;
817e9f41 911TYPE : HREF HBEGPAR
f0064700
PE
912 HIDENTIFIER
913 {}
914 HENDPAR
915 | HTEXT
916 | HBOOLEAN
917 | HCHARACTER
918 | HSHORT HINTEGER
919 | HINTEGER
920 | HREAL
921 | HLONG HREAL
922 ;
817e9f41
AD
923
924/* GRAMATIKK FOR DEL AV SETNINGER */
925MBEE_ELSE_PART : /*EMPT*/
926/* | HELSE
927 HIF
f0064700
PE
928 EXPRESSION
929 HTHEN {}
930 BLOCK {}
931 MBEE_ELSE_PART {}*/
932 | HELSE {}
933 BLOCK
934 ;
affac613 935FOR_LIST : FOR_LIST_ELEMENT
f0064700
PE
936 | FOR_LIST_ELEMENT
937 HPAREXPSEPARATOR
938 FOR_LIST
939 ;
817e9f41 940FOR_LIST_ELEMENT: EXPRESSION
f0064700
PE
941 MBEE_F_L_EL_R_PT
942 ;
817e9f41 943MBEE_F_L_EL_R_PT: /*EMPT*/
f0064700
PE
944 | HWHILE
945 EXPRESSION
946 | HSTEP
947 EXPRESSION
948 HUNTIL
949 EXPRESSION
950 ;
817e9f41 951GOTO : HGO
f0064700
PE
952 HTO
953 | HGOTO
954 ;
817e9f41 955CONN_STATE_R_PT : WHEN_CLAUSE_LIST
f0064700
PE
956 | HDO {}
957 BLOCK
958 ;
817e9f41 959WHEN_CLAUSE_LIST: HWHEN
f0064700
PE
960 HIDENTIFIER
961 HDO {}
962 BLOCK
963 | WHEN_CLAUSE_LIST
964 HWHEN
965 HIDENTIFIER
966 HDO {}
967 BLOCK
968 ;
817e9f41 969MBEE_OTWI_CLAUS : /*EMPT*/
f0064700 970 | HOTHERWISE {}
817e9f41 971
f0064700
PE
972 BLOCK
973 ;
affac613
AD
974ACTIVATOR : HACTIVATE
975 | HREACTIVATE
817e9f41 976 ;
affac613
AD
977SCHEDULE : /*EMPT*/
978 | ATDELAY EXPRESSION {}
817e9f41 979 PRIOR
affac613
AD
980 | BEFOREAFTER {}
981 EXPRESSION
817e9f41 982 ;
affac613
AD
983ATDELAY : HAT
984 | HDELAY
817e9f41 985 ;
affac613
AD
986BEFOREAFTER : HBEFORE
987 | HAFTER
817e9f41 988 ;
affac613
AD
989PRIOR : /*EMPT*/
990 | HPRIOR
817e9f41
AD
991 ;
992/* GRAMATIKK FOR SETNINGER OG DEKLARASJONER */
993MODULSTATEMENT : HWHILE
f0064700
PE
994 EXPRESSION
995 HDO {}
996 BLOCK
04098407 997 | HIF
f0064700
PE
998 EXPRESSION
999 HTHEN {}
1000 BLOCK {}
1001 MBEE_ELSE_PART
817e9f41 1002 | HFOR
f0064700
PE
1003 HIDENTIFIER
1004 HASSIGN {}
1005 FOR_LIST
1006 HDO {}
1007 BLOCK
817e9f41 1008 | GOTO
f0064700 1009 EXPRESSION
817e9f41 1010 | HINSPECT
f0064700
PE
1011 EXPRESSION {}
1012 CONN_STATE_R_PT
1013 {}
1014 MBEE_OTWI_CLAUS
affac613 1015 | HINNER
f0064700
PE
1016 | HIDENTIFIER
1017 HLABELSEPARATOR
1018 {}
1019 DECLSTATEMENT
1020 | EXPRESSION_SIMP
1021 HBEGIN
1022 {}
817e9f41 1023 IMPORT_SPEC_MODULE
affac613 1024 {}
f0064700
PE
1025 MBEE_DECLSTMS
1026 HEND
817e9f41 1027 | EXPRESSION_SIMP HBEGIN error HSTATEMENTSEPARATOR
f0064700 1028 MBEE_DECLSTMS HEND
817e9f41 1029 | EXPRESSION_SIMP HBEGIN error HEND
f0064700 1030 | EXPRESSION_SIMP
817e9f41 1031 | ACTIVATOR EXPRESSION SCHEDULE
f0064700
PE
1032 | HBEGIN
1033 {}
1034 MBEE_DECLSTMS
1035 HEND
817e9f41 1036 | MBEE_TYPE HPROCEDURE
f0064700
PE
1037 HIDENTIFIER
1038 {}
1039 HEADING BLOCK
817e9f41
AD
1040 | HIDENTIFIER
1041 HCLASS
f0064700 1042 NO_TYPE
affac613 1043 {}
817e9f41 1044 IMPORT_SPEC_MODULE
f0064700 1045 HIDENTIFIER
affac613 1046 {}
f0064700
PE
1047 HEADING
1048 BLOCK
1049 | HCLASS
1050 NO_TYPE
1051 HIDENTIFIER
1052 {}
1053 HEADING
1054 BLOCK
1055 | EXT_DECLARATION
affac613 1056 | /*EMPT*/
f0064700 1057 ;
affac613 1058IMPORT_SPEC_MODULE:
817e9f41
AD
1059 ;
1060DECLSTATEMENT : MODULSTATEMENT
1061 | TYPE
f0064700 1062 HIDENTIFIER
817e9f41 1063 MBEE_CONSTANT
f0064700
PE
1064 HPAREXPSEPARATOR
1065 {}
1066 IDENTIFIER_LISTC
1067 | TYPE
1068 HIDENTIFIER
817e9f41 1069 MBEE_CONSTANT
f0064700
PE
1070 | MBEE_TYPE
1071 HARRAY {}
1072 ARR_SEGMENT_LIST
1073 | HSWITCH
1074 HIDENTIFIER
1075 HASSIGN {}
1076 SWITCH_LIST
1077 ;
affac613 1078BLOCK : DECLSTATEMENT
f0064700 1079 | HBEGIN MBEE_DECLSTMS HEND
817e9f41
AD
1080 | HBEGIN error HSTATEMENTSEPARATOR MBEE_DECLSTMS HEND
1081 | HBEGIN error HEND
1082 ;
affac613 1083MBEE_DECLSTMS : MBEE_DECLSTMSU
f0064700 1084 ;
affac613 1085MBEE_DECLSTMSU : DECLSTATEMENT
f0064700
PE
1086 | MBEE_DECLSTMSU
1087 HSTATEMENTSEPARATOR
1088 DECLSTATEMENT
1089 ;
affac613 1090MODULS : MODULSTATEMENT
04098407 1091 | MODULS HSTATEMENTSEPARATOR MODULSTATEMENT
817e9f41
AD
1092 ;
1093/* GRAMATIKK FOR DEL AV DEKLARASJONER */
1094ARR_SEGMENT_LIST: ARR_SEGMENT
f0064700
PE
1095 | ARR_SEGMENT_LIST
1096 HPAREXPSEPARATOR
1097 ARR_SEGMENT
1098 ;
817e9f41 1099ARR_SEGMENT : ARRAY_SEGMENT
f0064700
PE
1100 HBEGPAR
1101 BAUND_PAIR_LIST HENDPAR
1102 ;
affac613 1103ARRAY_SEGMENT : ARRAY_SEGMENT_EL {}
817e9f41 1104
f0064700
PE
1105 | ARRAY_SEGMENT_EL
1106 HPAREXPSEPARATOR
1107 ARRAY_SEGMENT
1108 ;
affac613 1109ARRAY_SEGMENT_EL: HIDENTIFIER
f0064700 1110 ;
affac613 1111BAUND_PAIR_LIST : BAUND_PAIR
f0064700
PE
1112 | BAUND_PAIR
1113 HPAREXPSEPARATOR
1114 BAUND_PAIR_LIST
1115 ;
817e9f41 1116BAUND_PAIR : EXPRESSION
f0064700
PE
1117 HLABELSEPARATOR
1118 EXPRESSION
1119 ;
affac613 1120SWITCH_LIST : EXPRESSION
f0064700
PE
1121 | EXPRESSION
1122 HPAREXPSEPARATOR
1123 SWITCH_LIST
1124 ;
affac613 1125HEADING : MBEE_FMAL_PAR_P HSTATEMENTSEPARATOR {}
f0064700
PE
1126 MBEE_MODE_PART {}
1127 MBEE_SPEC_PART {}
1128 MBEE_PROT_PART {}
1129 MBEE_VIRT_PART
1130 ;
817e9f41 1131MBEE_FMAL_PAR_P : /*EMPT*/
f0064700
PE
1132 | FMAL_PAR_PART
1133 ;
817e9f41 1134FMAL_PAR_PART : HBEGPAR NO_TYPE
f0064700
PE
1135 MBEE_LISTV HENDPAR
1136 ;
817e9f41 1137MBEE_LISTV : /*EMPT*/
f0064700
PE
1138 | LISTV
1139 ;
affac613 1140LISTV : HIDENTIFIER
f0064700
PE
1141 | FPP_CATEG HDOTDOTDOT
1142 | HIDENTIFIER {}
1143 HPAREXPSEPARATOR LISTV
1144 | FPP_SPEC
1145 | FPP_SPEC
1146 HPAREXPSEPARATOR LISTV
1147 ;
817e9f41 1148FPP_HEADING : HBEGPAR NO_TYPE
f0064700
PE
1149 FPP_MBEE_LISTV HENDPAR
1150 ;
817e9f41 1151FPP_MBEE_LISTV : /*EMPT*/
f0064700
PE
1152 | FPP_LISTV
1153 ;
affac613 1154FPP_LISTV : FPP_CATEG HDOTDOTDOT
f0064700
PE
1155 | FPP_SPEC
1156 | FPP_SPEC
1157 HPAREXPSEPARATOR LISTV
1158 ;
817e9f41 1159FPP_SPEC : FPP_CATEG SPECIFIER HIDENTIFIER
817e9f41
AD
1160 | FPP_CATEG FPP_PROC_DECL_IN_SPEC
1161 ;
1162FPP_CATEG : HNAME HLABELSEPARATOR
f0064700
PE
1163 | HVALUE HLABELSEPARATOR
1164 | HVAR HLABELSEPARATOR
1165 | /*EMPT*/
1166 ;
817e9f41 1167FPP_PROC_DECL_IN_SPEC: MBEE_TYPE HPROCEDURE
f0064700 1168 HIDENTIFIER
affac613 1169 {}
f0064700 1170 FPP_HEADING {} { /* Yes, two "final" actions. */ }
817e9f41 1171 ;
affac613 1172IDENTIFIER_LISTV: HIDENTIFIER
f0064700
PE
1173 | HDOTDOTDOT
1174 | HIDENTIFIER {}
1175 HPAREXPSEPARATOR IDENTIFIER_LISTV
1176 ;
817e9f41 1177MBEE_MODE_PART : /*EMPT*/
f0064700
PE
1178 | MODE_PART
1179 ;
817e9f41 1180MODE_PART : NAME_PART
f0064700
PE
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 ;
affac613 1196NAME_PART : HNAME {}
f0064700
PE
1197 IDENTIFIER_LISTV
1198 HSTATEMENTSEPARATOR
1199 ;
affac613 1200VAR_PART : HVAR {}
f0064700
PE
1201 IDENTIFIER_LISTV
1202 HSTATEMENTSEPARATOR
1203 ;
affac613 1204VALUE_PART : HVALUE {}
f0064700
PE
1205 IDENTIFIER_LISTV HSTATEMENTSEPARATOR
1206 ;
817e9f41 1207MBEE_SPEC_PART : /*EMPT*/
f0064700
PE
1208 | SPEC_PART
1209 ;
817e9f41 1210SPEC_PART : ONE_SPEC
f0064700
PE
1211 | SPEC_PART ONE_SPEC
1212 ;
817e9f41
AD
1213ONE_SPEC : SPECIFIER IDENTIFIER_LIST HSTATEMENTSEPARATOR
1214 | NO_TYPE HPROCEDURE HIDENTIFIER HOBJRELOPERATOR
affac613 1215 {}
817e9f41 1216 PROC_DECL_IN_SPEC HSTATEMENTSEPARATOR
f0064700
PE
1217 | FPP_PROC_DECL_IN_SPEC HSTATEMENTSEPARATOR
1218 | MBEE_TYPE HPROCEDURE HIDENTIFIER HSTATEMENTSEPARATOR
1219 | MBEE_TYPE HPROCEDURE HIDENTIFIER HPAREXPSEPARATOR
1220 IDENTIFIER_LIST HSTATEMENTSEPARATOR
817e9f41 1221 ;
affac613 1222SPECIFIER : TYPE
f0064700
PE
1223 | MBEE_TYPE
1224 HARRAY
1225 | HLABEL
1226 | HSWITCH
1227 ;
817e9f41 1228PROC_DECL_IN_SPEC: MBEE_TYPE HPROCEDURE
f0064700 1229 HIDENTIFIER
affac613 1230 {}
f0064700 1231 HEADING
affac613 1232 {}
817e9f41 1233 MBEE_BEGIN_END
817e9f41
AD
1234 ;
1235MBEE_BEGIN_END : /* EMPTY */
1236 | HBEGIN HEND
1237 ;
1238MBEE_PROT_PART : /*EMPT*/
f0064700
PE
1239 | PROTECTION_PART
1240 ;
817e9f41 1241PROTECTION_PART : PROT_SPECIFIER IDENTIFIER_LIST
f0064700
PE
1242 HSTATEMENTSEPARATOR
1243 | PROTECTION_PART PROT_SPECIFIER
1244 IDENTIFIER_LIST HSTATEMENTSEPARATOR
1245 ;
affac613 1246PROT_SPECIFIER : HHIDDEN
f0064700
PE
1247 | HPROTECTED
1248 | HHIDDEN
1249 HPROTECTED
1250 | HPROTECTED
1251 HHIDDEN
1252 ;
817e9f41 1253MBEE_VIRT_PART : /*EMPT*/
f0064700
PE
1254 | VIRTUAL_PART
1255 ;
817e9f41 1256VIRTUAL_PART : HVIRTUAL
f0064700
PE
1257 HLABELSEPARATOR
1258 MBEE_SPEC_PART
1259 ;
affac613 1260IDENTIFIER_LIST : HIDENTIFIER
f0064700
PE
1261 | IDENTIFIER_LIST HPAREXPSEPARATOR
1262 HIDENTIFIER
1263 ;
817e9f41 1264IDENTIFIER_LISTC: HIDENTIFIER
affac613 1265 MBEE_CONSTANT
f0064700
PE
1266 | IDENTIFIER_LISTC HPAREXPSEPARATOR
1267 HIDENTIFIER
affac613 1268 MBEE_CONSTANT
f0064700 1269 ;
817e9f41
AD
1270MBEE_CONSTANT : /* EMPTY */
1271 | HVALRELOPERATOR
affac613
AD
1272 {}
1273 EXPRESSION
817e9f41
AD
1274 ;
1275
1276/* GRAMATIKK FOR UTTRYKK */
affac613 1277EXPRESSION : EXPRESSION_SIMP
f0064700
PE
1278 | HIF
1279 EXPRESSION
1280 HTHEN
1281 EXPRESSION
1282 HELSE
1283 EXPRESSION
1284 ;
817e9f41
AD
1285EXPRESSION_SIMP : EXPRESSION_SIMP
1286 HASSIGN
affac613 1287 EXPRESSION
817e9f41
AD
1288 |
1289
1290 EXPRESSION_SIMP
f0064700
PE
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 ;
affac613 1351ARG_R_PT : /*EMPTY*/
f0064700
PE
1352 | HBEGPAR
1353 ARGUMENT_LIST HENDPAR
1354 ;
affac613 1355MBEE_ARG_R_PT : /*EMPTY*/
f0064700
PE
1356 | HBEGPAR
1357 ARGUMENT_LIST HENDPAR
1358 ;
affac613 1359ARGUMENT_LIST : EXPRESSION
f0064700
PE
1360 | EXPRESSION
1361 HPAREXPSEPARATOR
1362 ARGUMENT_LIST
1363 ;
f805dfcb
JD
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]])],
817e9f41 1377
f805dfcb
JD
1378dnl LALR1-DIFF not used for canonical LR(1) because the diff is huge.
1379[],
817e9f41 1380
f805dfcb
JD
1381dnl OTHER-CHECKS
1382[AT_COND_CASE([[canonical LR]], [[]],
1383[AT_CHECK([[grep '^State.*conflicts:' input.output]], [[0]],
a4b746ea
PE
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
f805dfcb 1393]])])])
817e9f41 1394
f805dfcb
JD
1395## -------------------------------- ##
1396## GNU pic (Groff 1.18.1) Grammar. ##
1397## -------------------------------- ##
2740f169
PE
1398
1399# GNU pic, part of groff.
1400
1401# Bison once reported shift/reduce conflicts that it shouldn't have.
1402
f805dfcb
JD
1403AT_TEST_EXISTING_GRAMMAR([[GNU pic (Groff 1.18.1) Grammar]],
1404[[%error-verbose
affac613
AD
1405
1406%token LABEL
1407%token VARIABLE
1408%token NUMBER
1409%token TEXT
1410%token COMMAND_LINE
1411%token DELIMITED
1412%token ORDINAL
2740f169
PE
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
04098407 1457%token DOT_E
2740f169
PE
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
cbdb6d91 1484%token THROUGH
2740f169
PE
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
04098407 1543%left VARIABLE NUMBER '(' SIN COS ATAN2 LOG EXP SQRT K_MAX K_MIN INT RAND SRAND LAST
2740f169
PE
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 '^'
f805dfcb
JD
1570]],
1571[[
2740f169
PE
1572top:
1573 optional_separator
1574 | element_list
2740f169
PE
1575 ;
1576
2740f169
PE
1577element_list:
1578 optional_separator middle_element_list optional_separator
2740f169
PE
1579 ;
1580
1581middle_element_list:
1582 element
2740f169 1583 | middle_element_list separator element
2740f169
PE
1584 ;
1585
1586optional_separator:
1587 /* empty */
1588 | separator
1589 ;
1590
1591separator:
1592 ';'
1593 | separator ';'
1594 ;
1595
1596placeless_element:
1597 VARIABLE '=' any_expr
2740f169 1598 | VARIABLE ':' '=' any_expr
2740f169 1599 | UP
2740f169 1600 | DOWN
2740f169 1601 | LEFT
2740f169 1602 | RIGHT
2740f169 1603 | COMMAND_LINE
2740f169 1604 | COMMAND print_args
2740f169 1605 | PRINT print_args
2740f169 1606 | SH
affac613 1607 {}
2740f169 1608 DELIMITED
2740f169 1609 | COPY TEXT
cbdb6d91 1610 | COPY TEXT THROUGH
affac613 1611 {}
04098407 1612 DELIMITED
affac613 1613 {}
2740f169 1614 until
cbdb6d91 1615 | COPY THROUGH
affac613 1616 {}
2740f169 1617 DELIMITED
affac613 1618 {}
2740f169 1619 until
2740f169 1620 | FOR VARIABLE '=' expr TO expr optional_by DO
affac613 1621 {}
2740f169 1622 DELIMITED
2740f169 1623 | simple_if
2740f169 1624 | simple_if ELSE
affac613 1625 {}
2740f169 1626 DELIMITED
2740f169
PE
1627 | reset_variables
1628 | RESET
2740f169
PE
1629 ;
1630
1631reset_variables:
1632 RESET VARIABLE
2740f169 1633 | reset_variables VARIABLE
2740f169 1634 | reset_variables ',' VARIABLE
2740f169
PE
1635 ;
1636
1637print_args:
1638 print_arg
2740f169 1639 | print_args print_arg
2740f169
PE
1640 ;
1641
1642print_arg:
04098407 1643 expr %prec ','
2740f169 1644 | text
2740f169 1645 | position %prec ','
2740f169
PE
1646 ;
1647
1648simple_if:
1649 IF any_expr THEN
affac613 1650 {}
2740f169 1651 DELIMITED
2740f169
PE
1652 ;
1653
1654until:
1655 /* empty */
2740f169 1656 | UNTIL TEXT
2740f169 1657 ;
04098407 1658
2740f169
PE
1659any_expr:
1660 expr
2740f169 1661 | text_expr
2740f169 1662 ;
04098407 1663
2740f169
PE
1664text_expr:
1665 text EQUALEQUAL text
2740f169 1666 | text NOTEQUAL text
2740f169 1667 | text_expr ANDAND text_expr
2740f169 1668 | text_expr ANDAND expr
2740f169 1669 | expr ANDAND text_expr
2740f169 1670 | text_expr OROR text_expr
2740f169 1671 | text_expr OROR expr
2740f169 1672 | expr OROR text_expr
2740f169 1673 | '!' text_expr
2740f169
PE
1674 ;
1675
2740f169
PE
1676optional_by:
1677 /* empty */
2740f169 1678 | BY expr
2740f169 1679 | BY '*' expr
2740f169
PE
1680 ;
1681
1682element:
1683 object_spec
2740f169 1684 | LABEL ':' optional_separator element
2740f169 1685 | LABEL ':' optional_separator position_not_place
2740f169 1686 | LABEL ':' optional_separator place
408476bc 1687 | '{' {} element_list '}'
affac613 1688 {}
2740f169 1689 optional_element
2740f169 1690 | placeless_element
2740f169
PE
1691 ;
1692
1693optional_element:
1694 /* empty */
2740f169 1695 | element
2740f169
PE
1696 ;
1697
1698object_spec:
1699 BOX
2740f169 1700 | CIRCLE
2740f169 1701 | ELLIPSE
2740f169 1702 | ARC
2740f169 1703 | LINE
2740f169 1704 | ARROW
2740f169 1705 | MOVE
2740f169 1706 | SPLINE
2740f169 1707 | text %prec TEXT
2740f169 1708 | PLOT expr
2740f169 1709 | PLOT expr text
04098407 1710 | '['
affac613 1711 {}
2740f169 1712 element_list ']'
2740f169 1713 | object_spec HEIGHT expr
2740f169 1714 | object_spec RADIUS expr
2740f169 1715 | object_spec WIDTH expr
2740f169 1716 | object_spec DIAMETER expr
2740f169 1717 | object_spec expr %prec HEIGHT
2740f169 1718 | object_spec UP
2740f169 1719 | object_spec UP expr
2740f169 1720 | object_spec DOWN
2740f169 1721 | object_spec DOWN expr
2740f169 1722 | object_spec RIGHT
2740f169 1723 | object_spec RIGHT expr
2740f169 1724 | object_spec LEFT
2740f169 1725 | object_spec LEFT expr
2740f169 1726 | object_spec FROM position
2740f169 1727 | object_spec TO position
2740f169 1728 | object_spec AT position
2740f169 1729 | object_spec WITH path
2740f169 1730 | object_spec WITH position %prec ','
2740f169 1731 | object_spec BY expr_pair
2740f169 1732 | object_spec THEN
2740f169 1733 | object_spec SOLID
2740f169 1734 | object_spec DOTTED
2740f169 1735 | object_spec DOTTED expr
2740f169 1736 | object_spec DASHED
2740f169 1737 | object_spec DASHED expr
2740f169 1738 | object_spec FILL
2740f169 1739 | object_spec FILL expr
2740f169 1740 | object_spec SHADED text
2740f169 1741 | object_spec COLORED text
2740f169 1742 | object_spec OUTLINED text
2740f169 1743 | object_spec CHOP
2740f169 1744 | object_spec CHOP expr
2740f169 1745 | object_spec SAME
2740f169 1746 | object_spec INVISIBLE
2740f169 1747 | object_spec LEFT_ARROW_HEAD
2740f169 1748 | object_spec RIGHT_ARROW_HEAD
2740f169 1749 | object_spec DOUBLE_ARROW_HEAD
2740f169 1750 | object_spec CW
2740f169 1751 | object_spec CCW
2740f169 1752 | object_spec text %prec TEXT
2740f169 1753 | object_spec LJUST
2740f169 1754 | object_spec RJUST
2740f169 1755 | object_spec ABOVE
2740f169 1756 | object_spec BELOW
2740f169 1757 | object_spec THICKNESS expr
2740f169 1758 | object_spec ALIGNED
2740f169
PE
1759 ;
1760
1761text:
1762 TEXT
2740f169 1763 | SPRINTF '(' TEXT sprintf_args ')'
2740f169
PE
1764 ;
1765
1766sprintf_args:
1767 /* empty */
2740f169 1768 | sprintf_args ',' expr
2740f169
PE
1769 ;
1770
1771position:
04098407 1772 position_not_place
2740f169 1773 | place
2740f169
PE
1774 ;
1775
1776position_not_place:
1777 expr_pair
2740f169 1778 | position '+' expr_pair
2740f169 1779 | position '-' expr_pair
2740f169 1780 | '(' position ',' position ')'
2740f169 1781 | expr between position AND position
2740f169 1782 | expr '<' position ',' position '>'
2740f169
PE
1783 ;
1784
1785between:
1786 BETWEEN
1787 | OF THE WAY BETWEEN
1788 ;
1789
1790expr_pair:
1791 expr ',' expr
2740f169 1792 | '(' expr_pair ')'
2740f169
PE
1793 ;
1794
1795place:
1796 /* line at A left == line (at A) left */
1797 label %prec CHOP
2740f169 1798 | label corner
2740f169 1799 | corner label
2740f169 1800 | corner OF label
2740f169 1801 | HERE
2740f169
PE
1802 ;
1803
1804label:
1805 LABEL
2740f169 1806 | nth_primitive
2740f169 1807 | label '.' LABEL
2740f169
PE
1808 ;
1809
1810ordinal:
1811 ORDINAL
2740f169 1812 | '`' any_expr TH
2740f169
PE
1813 ;
1814
1815optional_ordinal_last:
1816 LAST
04098407 1817 | ordinal LAST
2740f169
PE
1818 ;
1819
1820nth_primitive:
1821 ordinal object_type
2740f169 1822 | optional_ordinal_last object_type
2740f169
PE
1823 ;
1824
1825object_type:
1826 BOX
2740f169 1827 | CIRCLE
2740f169 1828 | ELLIPSE
2740f169 1829 | ARC
2740f169 1830 | LINE
2740f169 1831 | ARROW
2740f169 1832 | SPLINE
2740f169 1833 | '[' ']'
2740f169 1834 | TEXT
2740f169
PE
1835 ;
1836
1837label_path:
04098407 1838 '.' LABEL
2740f169 1839 | label_path '.' LABEL
2740f169
PE
1840 ;
1841
1842relative_path:
1843 corner %prec CHOP
2740f169
PE
1844 /* give this a lower precedence than LEFT and RIGHT so that
1845 [A: box] with .A left == [A: box] with (.A left) */
04098407 1846 | label_path %prec TEXT
2740f169 1847 | label_path corner
2740f169
PE
1848 ;
1849
1850path:
1851 relative_path
2740f169 1852 | '(' relative_path ',' relative_path ')'
affac613 1853 {}
2740f169
PE
1854 /* The rest of these rules are a compatibility sop. */
1855 | ORDINAL LAST object_type relative_path
2740f169 1856 | LAST object_type relative_path
2740f169 1857 | ORDINAL object_type relative_path
2740f169 1858 | LABEL relative_path
2740f169
PE
1859 ;
1860
1861corner:
1862 DOT_N
04098407 1863 | DOT_E
2740f169 1864 | DOT_W
2740f169 1865 | DOT_S
2740f169 1866 | DOT_NE
2740f169 1867 | DOT_SE
2740f169 1868 | DOT_NW
2740f169 1869 | DOT_SW
2740f169 1870 | DOT_C
2740f169 1871 | DOT_START
2740f169 1872 | DOT_END
04098407 1873 | TOP
2740f169 1874 | BOTTOM
2740f169 1875 | LEFT
2740f169 1876 | RIGHT
2740f169 1877 | UPPER LEFT
2740f169 1878 | LOWER LEFT
2740f169 1879 | UPPER RIGHT
2740f169 1880 | LOWER RIGHT
2740f169 1881 | LEFT_CORNER
2740f169 1882 | RIGHT_CORNER
2740f169 1883 | UPPER LEFT_CORNER
2740f169 1884 | LOWER LEFT_CORNER
2740f169 1885 | UPPER RIGHT_CORNER
2740f169 1886 | LOWER RIGHT_CORNER
2740f169 1887 | NORTH
2740f169 1888 | SOUTH
2740f169 1889 | EAST
2740f169 1890 | WEST
2740f169 1891 | CENTER
2740f169 1892 | START
2740f169 1893 | END
2740f169
PE
1894 ;
1895
1896expr:
1897 VARIABLE
2740f169 1898 | NUMBER
2740f169 1899 | place DOT_X
2740f169 1900 | place DOT_Y
2740f169 1901 | place DOT_HT
2740f169 1902 | place DOT_WID
2740f169 1903 | place DOT_RAD
2740f169 1904 | expr '+' expr
2740f169 1905 | expr '-' expr
2740f169 1906 | expr '*' expr
2740f169 1907 | expr '/' expr
2740f169 1908 | expr '%' expr
2740f169 1909 | expr '^' expr
2740f169 1910 | '-' expr %prec '!'
2740f169 1911 | '(' any_expr ')'
2740f169 1912 | SIN '(' any_expr ')'
2740f169 1913 | COS '(' any_expr ')'
2740f169 1914 | ATAN2 '(' any_expr ',' any_expr ')'
2740f169 1915 | LOG '(' any_expr ')'
2740f169 1916 | EXP '(' any_expr ')'
2740f169 1917 | SQRT '(' any_expr ')'
2740f169 1918 | K_MAX '(' any_expr ',' any_expr ')'
2740f169 1919 | K_MIN '(' any_expr ',' any_expr ')'
2740f169 1920 | INT '(' any_expr ')'
2740f169 1921 | RAND '(' any_expr ')'
2740f169 1922 | RAND '(' ')'
2740f169 1923 | SRAND '(' any_expr ')'
2740f169 1924 | expr '<' expr
2740f169 1925 | expr LESSEQUAL expr
2740f169 1926 | expr '>' expr
2740f169 1927 | expr GREATEREQUAL expr
2740f169 1928 | expr EQUALEQUAL expr
2740f169 1929 | expr NOTEQUAL expr
2740f169 1930 | expr ANDAND expr
2740f169 1931 | expr OROR expr
2740f169 1932 | '!' expr
2740f169 1933 ;
f805dfcb
JD
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
74516381 1954[[input.y:470.11-48: warning: rule useless in parser due to conflicts: path: ORDINAL LAST object_type relative_path
f805dfcb
JD
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]])])