X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/5967f0cf594cf19cd596b171392cc51bbd0ee596..ea99d6e6a02a06bd63e788393fd42cde5cb1fa71:/tests/existing.at diff --git a/tests/existing.at b/tests/existing.at index cb385f53..a1b95ac9 100644 --- a/tests/existing.at +++ b/tests/existing.at @@ -1,39 +1,83 @@ # Exercising Bison on actual grammars. -*- Autotest -*- -# Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2003, 2004, 2005 -# Free Software Foundation, Inc. +# Copyright (C) 1989-1992, 2000-2005, 2007, 2009-2013 Free Software +# Foundation, Inc. -# This program is free software; you can redistribute it and/or modify +# This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. - +# # You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301, USA. +# along with this program. If not, see . AT_BANNER([[Existing Grammars.]]) -## ----------------- ## -## GNU AWK Grammar. ## -## ----------------- ## -AT_SETUP([GNU AWK Grammar]) +# AT_TEST_EXISTING_GRAMMAR(DESCRIPTION, +# DECLS, GRAMMAR, INPUT, +# BISON-STDERR, LAST-STATE, LALR1-DIFF, +# [OTHER-CHECKS], +# [PARSER-EXIT-VALUE], +# [PARSER-STDOUT], [PARSER-STDERR]) +# -------------------------------------------------------------- +m4_define([AT_TEST_EXISTING_GRAMMAR], [_AT_TEST_EXISTING_GRAMMAR([$][1], $@)]) + +m4_define([_AT_TEST_EXISTING_GRAMMAR], +[ +dnl See how the parser tables have changed. As the .output format evolves, the +dnl diff comments with line numbers might be a pain to maintain. When that +dnl time comes, just use sed to drop the line numbers. For now, as LR(1) +dnl support is rapidly evolving, let's keep that information to be careful. +dnl However, we don't do diffs for canonical LR(1) because the diff is huge. +m4_pushdef([AT_LALR1_DIFF_CHECK], +[dnl We need diff -u, which is not portable. +AT_CHECK([diff -u /dev/null /dev/null || exit 77], [0], [ignore]) + +AT_CHECK([[sed 's/^%define lr.type .*$//' input.y > input-lalr.y]]) +AT_BISON_CHECK([[--report=all input-lalr.y]], [[0]], [ignore], [ignore]) +AT_CHECK([[diff -u input-lalr.output input.output \ + | sed -n '/^@@/,$p' | sed 's/^ $//']], + [[0]], [$1])]) + +AT_TEST_TABLES_AND_PARSE([$2[: LALR(1)]], [[LALR]], [[last-state]], + [[%define lr.type lalr +]$3], + [$4], [$5], [$6], [$7], + [AT_LALR1_DIFF_CHECK([$8])$9], [$10], [$11], [$12]) +AT_TEST_TABLES_AND_PARSE([$2[: IELR(1)]], [[IELR]], [[last-state]], + [[%define lr.type ielr +]$3], + [$4], [$5], [$6], [$7], + [AT_LALR1_DIFF_CHECK([$8])$9], [$10], [$11], [$12]) +AT_TEST_TABLES_AND_PARSE([$2[: Canonical LR(1)]], [[canonical LR]], + [[last-state,no-xml]], + [[%define lr.type canonical-lr +]$3], + [$4], [$5], [$6], [$7], + [$9], [$10], [$11], [$12]) + +m4_popdef([AT_LALR1_DIFF_CHECK]) +]) + + + +## ----------------------- ## +## GNU AWK 3.1.0 Grammar. ## +## ----------------------- ## # We have been careful to strip all the actions excepts the -# mid-rule actions. We rely on %expect to check that there are -# indeed 65 SR conflicts. +# mid-rule actions. # -# Bison was once wrong, due to an incorrect computation of nullable. -# It reported 485 SR conflicts! +# There are 65 SR conflicts. Bison was once wrong, due to an incorrect +# computation of nullable. It reported 485 SR conflicts! -AT_DATA([[input.y]], -[[%expect 65 +AT_TEST_EXISTING_GRAMMAR([[GNU AWK 3.1.0 Grammar]], +[[%error-verbose %token FUNC_CALL NAME REGEXP %token ERROR @@ -68,337 +112,732 @@ AT_DATA([[input.y]], %left INCREMENT DECREMENT %left '$' %left '(' ')' -%% - +]], +[[ start - : opt_nls program opt_nls - ; + : opt_nls program opt_nls + ; program - : rule - | program rule - | error - | program error - | /* empty */ - ; + : rule + | program rule + | error + | program error + | /* empty */ + ; rule - : LEX_BEGIN {} action - | LEX_END {} action - | LEX_BEGIN statement_term - | LEX_END statement_term - | pattern action - | action - | pattern statement_term - | function_prologue function_body - ; + : LEX_BEGIN {} action + | LEX_END {} action + | LEX_BEGIN statement_term + | LEX_END statement_term + | pattern action + | action + | pattern statement_term + | function_prologue function_body + ; func_name - : NAME - | FUNC_CALL - | lex_builtin - ; + : NAME + | FUNC_CALL + | lex_builtin + ; lex_builtin - : LEX_BUILTIN - | LEX_LENGTH - ; + : LEX_BUILTIN + | LEX_LENGTH + ; function_prologue - : LEX_FUNCTION {} func_name '(' opt_param_list r_paren opt_nls - ; + : LEX_FUNCTION {} func_name '(' opt_param_list r_paren opt_nls + ; function_body - : l_brace statements r_brace opt_semi opt_nls - | l_brace r_brace opt_semi opt_nls - ; + : l_brace statements r_brace opt_semi opt_nls + | l_brace r_brace opt_semi opt_nls + ; pattern - : exp - | exp ',' exp - ; + : exp + | exp ',' exp + ; regexp - /* - * In this rule, want_regexp tells yylex that the next thing - * is a regexp so it should read up to the closing slash. - */ - : '/' {} REGEXP '/' - ; + /* + * In this rule, want_regexp tells yylex that the next thing + * is a regexp so it should read up to the closing slash. + */ + : '/' {} REGEXP '/' + ; action - : l_brace statements r_brace opt_semi opt_nls - | l_brace r_brace opt_semi opt_nls - ; + : l_brace statements r_brace opt_semi opt_nls + | l_brace r_brace opt_semi opt_nls + ; statements - : statement - | statements statement - | error - | statements error - ; + : statement + | statements statement + | error + | statements error + ; statement_term - : nls - | semi opt_nls - ; + : nls + | semi opt_nls + ; statement - : semi opt_nls - | l_brace r_brace - | l_brace statements r_brace - | if_statement - | LEX_WHILE '(' exp r_paren opt_nls statement - | LEX_DO opt_nls statement LEX_WHILE '(' exp r_paren opt_nls - | LEX_FOR '(' NAME LEX_IN NAME r_paren opt_nls statement - | LEX_FOR '(' opt_exp semi opt_nls exp semi opt_nls opt_exp r_paren opt_nls statement - | LEX_FOR '(' opt_exp semi opt_nls semi opt_nls opt_exp r_paren opt_nls statement - | LEX_BREAK statement_term - | LEX_CONTINUE statement_term - | print '(' expression_list r_paren output_redir statement_term - | print opt_rexpression_list output_redir statement_term - | LEX_NEXT statement_term - | LEX_NEXTFILE statement_term - | LEX_EXIT opt_exp statement_term - | LEX_RETURN {} opt_exp statement_term - | LEX_DELETE NAME '[' expression_list ']' statement_term - | LEX_DELETE NAME statement_term - | exp statement_term - ; + : semi opt_nls + | l_brace r_brace + | l_brace statements r_brace + | if_statement + | LEX_WHILE '(' exp r_paren opt_nls statement + | LEX_DO opt_nls statement LEX_WHILE '(' exp r_paren opt_nls + | LEX_FOR '(' NAME LEX_IN NAME r_paren opt_nls statement + | LEX_FOR '(' opt_exp semi opt_nls exp semi opt_nls opt_exp r_paren opt_nls statement + | LEX_FOR '(' opt_exp semi opt_nls semi opt_nls opt_exp r_paren opt_nls statement + | LEX_BREAK statement_term + | LEX_CONTINUE statement_term + | print '(' expression_list r_paren output_redir statement_term + | print opt_rexpression_list output_redir statement_term + | LEX_NEXT statement_term + | LEX_NEXTFILE statement_term + | LEX_EXIT opt_exp statement_term + | LEX_RETURN {} opt_exp statement_term + | LEX_DELETE NAME '[' expression_list ']' statement_term + | LEX_DELETE NAME statement_term + | exp statement_term + ; print - : LEX_PRINT - | LEX_PRINTF - ; + : LEX_PRINT + | LEX_PRINTF + ; if_statement - : LEX_IF '(' exp r_paren opt_nls statement - | LEX_IF '(' exp r_paren opt_nls statement - LEX_ELSE opt_nls statement - ; + : LEX_IF '(' exp r_paren opt_nls statement + | LEX_IF '(' exp r_paren opt_nls statement + LEX_ELSE opt_nls statement + ; nls - : NEWLINE - | nls NEWLINE - ; + : NEWLINE + | nls NEWLINE + ; opt_nls - : /* empty */ - | nls - ; + : /* empty */ + | nls + ; input_redir - : /* empty */ - | '<' simp_exp - ; + : /* empty */ + | '<' simp_exp + ; output_redir - : /* empty */ - | '>' exp - | APPEND_OP exp - | '|' exp - | TWOWAYIO exp - ; + : /* empty */ + | '>' exp + | APPEND_OP exp + | '|' exp + | TWOWAYIO exp + ; opt_param_list - : /* empty */ - | param_list - ; + : /* empty */ + | param_list + ; param_list - : NAME - | param_list comma NAME - | error - | param_list error - | param_list comma error - ; + : NAME + | param_list comma NAME + | error + | param_list error + | param_list comma error + ; /* optional expression, as in for loop */ opt_exp - : /* empty */ - | exp - ; + : /* empty */ + | exp + ; opt_rexpression_list - : /* empty */ - | rexpression_list - ; + : /* empty */ + | rexpression_list + ; rexpression_list - : rexp - | rexpression_list comma rexp - | error - | rexpression_list error - | rexpression_list error rexp - | rexpression_list comma error - ; + : rexp + | rexpression_list comma rexp + | error + | rexpression_list error + | rexpression_list error rexp + | rexpression_list comma error + ; opt_expression_list - : /* empty */ - | expression_list - ; + : /* empty */ + | expression_list + ; expression_list - : exp - | expression_list comma exp - | error - | expression_list error - | expression_list error exp - | expression_list comma error - ; + : exp + | expression_list comma exp + | error + | expression_list error + | expression_list error exp + | expression_list comma error + ; /* Expressions, not including the comma operator. */ -exp : variable ASSIGNOP {} exp - | '(' expression_list r_paren LEX_IN NAME - | exp '|' LEX_GETLINE opt_variable - | exp TWOWAYIO LEX_GETLINE opt_variable - | LEX_GETLINE opt_variable input_redir - | exp LEX_AND exp - | exp LEX_OR exp - | exp MATCHOP exp - | regexp - | '!' regexp %prec UNARY - | exp LEX_IN NAME - | exp RELOP exp - | exp '<' exp - | exp '>' exp - | exp '?' exp ':' exp - | simp_exp - | exp simp_exp %prec CONCAT_OP - ; +exp : variable ASSIGNOP {} exp + | '(' expression_list r_paren LEX_IN NAME + | exp '|' LEX_GETLINE opt_variable + | exp TWOWAYIO LEX_GETLINE opt_variable + | LEX_GETLINE opt_variable input_redir + | exp LEX_AND exp + | exp LEX_OR exp + | exp MATCHOP exp + | regexp + | '!' regexp %prec UNARY + | exp LEX_IN NAME + | exp RELOP exp + | exp '<' exp + | exp '>' exp + | exp '?' exp ':' exp + | simp_exp + | exp simp_exp %prec CONCAT_OP + ; rexp - : variable ASSIGNOP {} rexp - | rexp LEX_AND rexp - | rexp LEX_OR rexp - | LEX_GETLINE opt_variable input_redir - | regexp - | '!' regexp %prec UNARY - | rexp MATCHOP rexp - | rexp LEX_IN NAME - | rexp RELOP rexp - | rexp '?' rexp ':' rexp - | simp_exp - | rexp simp_exp %prec CONCAT_OP - ; + : variable ASSIGNOP {} rexp + | rexp LEX_AND rexp + | rexp LEX_OR rexp + | LEX_GETLINE opt_variable input_redir + | regexp + | '!' regexp %prec UNARY + | rexp MATCHOP rexp + | rexp LEX_IN NAME + | rexp RELOP rexp + | rexp '?' rexp ':' rexp + | simp_exp + | rexp simp_exp %prec CONCAT_OP + ; simp_exp - : non_post_simp_exp - /* Binary operators in order of decreasing precedence. */ - | simp_exp '^' simp_exp - | simp_exp '*' simp_exp - | simp_exp '/' simp_exp - | simp_exp '%' simp_exp - | simp_exp '+' simp_exp - | simp_exp '-' simp_exp - | variable INCREMENT - | variable DECREMENT - ; + : non_post_simp_exp + /* Binary operators in order of decreasing precedence. */ + | simp_exp '^' simp_exp + | simp_exp '*' simp_exp + | simp_exp '/' simp_exp + | simp_exp '%' simp_exp + | simp_exp '+' simp_exp + | simp_exp '-' simp_exp + | variable INCREMENT + | variable DECREMENT + ; non_post_simp_exp - : '!' simp_exp %prec UNARY - | '(' exp r_paren - | LEX_BUILTIN - '(' opt_expression_list r_paren - | LEX_LENGTH '(' opt_expression_list r_paren - | LEX_LENGTH - | FUNC_CALL '(' opt_expression_list r_paren - | variable - | INCREMENT variable - | DECREMENT variable - | YNUMBER - | YSTRING - | '-' simp_exp %prec UNARY - | '+' simp_exp %prec UNARY - ; + : '!' simp_exp %prec UNARY + | '(' exp r_paren + | LEX_BUILTIN + '(' opt_expression_list r_paren + | LEX_LENGTH '(' opt_expression_list r_paren + | LEX_LENGTH + | FUNC_CALL '(' opt_expression_list r_paren + | variable + | INCREMENT variable + | DECREMENT variable + | YNUMBER + | YSTRING + | '-' simp_exp %prec UNARY + | '+' simp_exp %prec UNARY + ; opt_variable - : /* empty */ - | variable - ; + : /* empty */ + | variable + ; variable - : NAME - | NAME '[' expression_list ']' - | '$' non_post_simp_exp - ; + : NAME + | NAME '[' expression_list ']' + | '$' non_post_simp_exp + ; l_brace - : '{' opt_nls - ; + : '{' opt_nls + ; r_brace - : '}' opt_nls - ; + : '}' opt_nls + ; r_paren - : ')' - ; + : ')' + ; opt_semi - : /* empty */ - | semi - ; + : /* empty */ + | semi + ; semi - : ';' - ; - -comma : ',' opt_nls - ; - -%% -]]) - -# Pass plenty of options, to exercise plenty of code, even if we -# don't actually check the output. But SEGV is watching us, and -# so might do dmalloc. -AT_CHECK([[bison --verbose --defines input.y]]) - -AT_CLEANUP + : ';' + ; + +comma : ',' opt_nls + ; +]], + +dnl INPUT +dnl +dnl For example, in AWK: +dnl +dnl getline $!4*0; +dnl +dnl The grammar below (from GNU AWK 3.1.0) using canonical LR(1) or IELR(1) +dnl parses it as: +dnl +dnl getline $!(4*0); +dnl +dnl That is, they shift '*' immediately and make it part of the getline +dnl argument. +dnl +dnl The grammar below using LALR(1) parses it as a syntax error. So does +dnl GNU AWK 3.0.6, 3.1.0, and 3.1.1. They reduce the full getline expression +dnl before shifting '*' even though '*' is not a valid lookahead. +dnl +dnl GNU AWK 3.1.2, 3.1.3, 3.1.4, and 3.1.5 parse it as: +dnl +dnl (getline $!4)*0; +dnl +dnl That is, like the other versions of GNU AWK, they reduce the full getline +dnl expression before shifting '*'. However, because of a different LHS on the +dnl getline rule, '*' actually is a valid lookahead. Solaris /usr/xpg4/bin/awk +dnl and the Open Group awk specification seem to agree: +dnl +dnl http://www.opengroup.org/pubs/online/7908799/xcu/awk.html +dnl +dnl /bin/nawk and /bin/awk on Solaris 10 report it as a syntax error, but they +dnl don't like even 'print $!4;'. +[[LEX_GETLINE, '$', '!', YNUMBER, '*', YNUMBER, ';']], + +dnl BISON-STDERR +[[input.y:66.10: warning: empty rule without %empty [-Wempty-rule] +input.y:169.8: warning: empty rule without %empty [-Wempty-rule] +input.y:174.12: warning: empty rule without %empty [-Wempty-rule] +input.y:179.13: warning: empty rule without %empty [-Wempty-rule] +input.y:187.15: warning: empty rule without %empty [-Wempty-rule] +input.y:201.8: warning: empty rule without %empty [-Wempty-rule] +input.y:206.21: warning: empty rule without %empty [-Wempty-rule] +input.y:220.20: warning: empty rule without %empty [-Wempty-rule] +input.y:299.13: warning: empty rule without %empty [-Wempty-rule] +input.y:322.9: warning: empty rule without %empty [-Wempty-rule] +]AT_COND_CASE([[canonical LR]], +[[input.y: warning: 265 shift/reduce conflicts [-Wconflicts-sr]]], +[[input.y: warning: 65 shift/reduce conflicts [-Wconflicts-sr]]])[ +input.y:39.1-5: warning: useless associativity for FUNC_CALL, use %precedence [-Wprecedence] +input.y:44.1-5: warning: useless associativity for YNUMBER, use %precedence [-Wprecedence] +input.y:44.1-5: warning: useless associativity for YSTRING, use %precedence [-Wprecedence] +input.y:42.1-9: warning: useless precedence and associativity for APPEND_OP [-Wprecedence] +input.y:33.1-6: warning: useless associativity for ASSIGNOP, use %precedence [-Wprecedence] +input.y:43.1-5: warning: useless associativity for CONCAT_OP, use %precedence [-Wprecedence] +input.y:37.1-5: warning: useless precedence and associativity for LEX_GETLINE [-Wprecedence] +input.y:38.1-9: warning: useless associativity for LEX_IN, use %precedence [-Wprecedence] +input.y:49.1-5: warning: useless associativity for INCREMENT, use %precedence [-Wprecedence] +input.y:49.1-5: warning: useless associativity for DECREMENT, use %precedence [-Wprecedence] +input.y:39.1-5: warning: useless associativity for LEX_BUILTIN, use %precedence [-Wprecedence] +input.y:39.1-5: warning: useless associativity for LEX_LENGTH, use %precedence [-Wprecedence] +input.y:40.1-9: warning: useless precedence and associativity for ',' [-Wprecedence] +input.y:47.1-6: warning: useless associativity for '!', use %precedence [-Wprecedence] +input.y:47.1-6: warning: useless associativity for UNARY, use %precedence [-Wprecedence] +input.y:50.1-5: warning: useless associativity for '$', use %precedence [-Wprecedence] +input.y:51.1-5: warning: useless associativity for '(', use %precedence [-Wprecedence] +input.y:51.1-5: warning: useless precedence and associativity for ')' [-Wprecedence] +]], + +dnl LAST-STATE +[AT_COND_CASE([[LALR]], [[319]], [[canonical LR]], [[2358]], [[328]])], + +dnl LALR1-DIFF not used for canonical LR(1) because the diff is huge. +dnl Isocore map from LALR(1) state number to new state number plus descriptions +dnl of any change in the actions resulting in a change in accepted language: +dnl - 24 -> 320 +dnl - 16 -> 321 +dnl - 17 -> 322 +dnl - 20 -> 323 +dnl - 21 -> 324 +dnl - 54 -> 325 +dnl - 56 -> 326: reduce -> shift on '*', '/', and '%' +dnl - 58 -> 327: reduce -> shift on '*', '/', and '%' +dnl - 61 -> 328: reduce -> shift on '*', '/', and '%' +[AT_COND_CASE([[LALR]], [], +[[@@ -712,7 +712,7 @@ + 156 | . '$' non_post_simp_exp + + NAME shift, and go to state 9 +- '$' shift, and go to state 24 ++ '$' shift, and go to state 320 + + NAME [reduce using rule 152 (opt_variable)] + '$' [reduce using rule 152 (opt_variable)] +@@ -5379,7 +5379,7 @@ + 156 | . '$' non_post_simp_exp + + NAME shift, and go to state 9 +- '$' shift, and go to state 24 ++ '$' shift, and go to state 320 + + NAME [reduce using rule 152 (opt_variable)] + '$' [reduce using rule 152 (opt_variable)] +@@ -5399,7 +5399,7 @@ + 156 | . '$' non_post_simp_exp + + NAME shift, and go to state 9 +- '$' shift, and go to state 24 ++ '$' shift, and go to state 320 + + NAME [reduce using rule 152 (opt_variable)] + '$' [reduce using rule 152 (opt_variable)] +@@ -6214,7 +6214,7 @@ + 156 | . '$' non_post_simp_exp + + NAME shift, and go to state 9 +- '$' shift, and go to state 24 ++ '$' shift, and go to state 320 + + NAME [reduce using rule 152 (opt_variable)] + '$' [reduce using rule 152 (opt_variable)] +@@ -11099,3 +11099,274 @@ + 45 statement: LEX_FOR '(' opt_exp semi opt_nls exp semi opt_nls opt_exp r_paren opt_nls statement . + + $default reduce using rule 45 (statement) ++ ++ ++State 320 ++ ++ 139 non_post_simp_exp: . '!' simp_exp ++ 140 | . '(' exp r_paren ++ 141 | . LEX_BUILTIN '(' opt_expression_list r_paren ++ 142 | . LEX_LENGTH '(' opt_expression_list r_paren ++ 143 | . LEX_LENGTH ++ 144 | . FUNC_CALL '(' opt_expression_list r_paren ++ 145 | . variable ++ 146 | . INCREMENT variable ++ 147 | . DECREMENT variable ++ 148 | . YNUMBER ++ 149 | . YSTRING ++ 150 | . '-' simp_exp ++ 151 | . '+' simp_exp ++ 154 variable: . NAME ++ 155 | . NAME '[' expression_list ']' ++ 156 | . '$' non_post_simp_exp ++ 156 | '$' . non_post_simp_exp ++ ++ FUNC_CALL shift, and go to state 8 ++ NAME shift, and go to state 9 ++ YNUMBER shift, and go to state 10 ++ YSTRING shift, and go to state 11 ++ INCREMENT shift, and go to state 321 ++ DECREMENT shift, and go to state 322 ++ LEX_BUILTIN shift, and go to state 18 ++ LEX_LENGTH shift, and go to state 19 ++ '+' shift, and go to state 323 ++ '-' shift, and go to state 324 ++ '!' shift, and go to state 325 ++ '$' shift, and go to state 320 ++ '(' shift, and go to state 55 ++ ++ non_post_simp_exp go to state 62 ++ variable go to state 63 ++ ++ ++State 321 ++ ++ 146 non_post_simp_exp: INCREMENT . variable ++ 154 variable: . NAME ++ 155 | . NAME '[' expression_list ']' ++ 156 | . '$' non_post_simp_exp ++ ++ NAME shift, and go to state 9 ++ '$' shift, and go to state 320 ++ ++ variable go to state 50 ++ ++ ++State 322 ++ ++ 147 non_post_simp_exp: DECREMENT . variable ++ 154 variable: . NAME ++ 155 | . NAME '[' expression_list ']' ++ 156 | . '$' non_post_simp_exp ++ ++ NAME shift, and go to state 9 ++ '$' shift, and go to state 320 ++ ++ variable go to state 51 ++ ++ ++State 323 ++ ++ 130 simp_exp: . non_post_simp_exp ++ 131 | . simp_exp '^' simp_exp ++ 132 | . simp_exp '*' simp_exp ++ 133 | . simp_exp '/' simp_exp ++ 134 | . simp_exp '%' simp_exp ++ 135 | . simp_exp '+' simp_exp ++ 136 | . simp_exp '-' simp_exp ++ 137 | . variable INCREMENT ++ 138 | . variable DECREMENT ++ 139 non_post_simp_exp: . '!' simp_exp ++ 140 | . '(' exp r_paren ++ 141 | . LEX_BUILTIN '(' opt_expression_list r_paren ++ 142 | . LEX_LENGTH '(' opt_expression_list r_paren ++ 143 | . LEX_LENGTH ++ 144 | . FUNC_CALL '(' opt_expression_list r_paren ++ 145 | . variable ++ 146 | . INCREMENT variable ++ 147 | . DECREMENT variable ++ 148 | . YNUMBER ++ 149 | . YSTRING ++ 150 | . '-' simp_exp ++ 151 | . '+' simp_exp ++ 151 | '+' . simp_exp ++ 154 variable: . NAME ++ 155 | . NAME '[' expression_list ']' ++ 156 | . '$' non_post_simp_exp ++ ++ FUNC_CALL shift, and go to state 8 ++ NAME shift, and go to state 9 ++ YNUMBER shift, and go to state 10 ++ YSTRING shift, and go to state 11 ++ INCREMENT shift, and go to state 16 ++ DECREMENT shift, and go to state 17 ++ LEX_BUILTIN shift, and go to state 18 ++ LEX_LENGTH shift, and go to state 19 ++ '+' shift, and go to state 20 ++ '-' shift, and go to state 21 ++ '!' shift, and go to state 54 ++ '$' shift, and go to state 24 ++ '(' shift, and go to state 55 ++ ++ simp_exp go to state 326 ++ non_post_simp_exp go to state 35 ++ variable go to state 57 ++ ++ ++State 324 ++ ++ 130 simp_exp: . non_post_simp_exp ++ 131 | . simp_exp '^' simp_exp ++ 132 | . simp_exp '*' simp_exp ++ 133 | . simp_exp '/' simp_exp ++ 134 | . simp_exp '%' simp_exp ++ 135 | . simp_exp '+' simp_exp ++ 136 | . simp_exp '-' simp_exp ++ 137 | . variable INCREMENT ++ 138 | . variable DECREMENT ++ 139 non_post_simp_exp: . '!' simp_exp ++ 140 | . '(' exp r_paren ++ 141 | . LEX_BUILTIN '(' opt_expression_list r_paren ++ 142 | . LEX_LENGTH '(' opt_expression_list r_paren ++ 143 | . LEX_LENGTH ++ 144 | . FUNC_CALL '(' opt_expression_list r_paren ++ 145 | . variable ++ 146 | . INCREMENT variable ++ 147 | . DECREMENT variable ++ 148 | . YNUMBER ++ 149 | . YSTRING ++ 150 | . '-' simp_exp ++ 150 | '-' . simp_exp ++ 151 | . '+' simp_exp ++ 154 variable: . NAME ++ 155 | . NAME '[' expression_list ']' ++ 156 | . '$' non_post_simp_exp ++ ++ FUNC_CALL shift, and go to state 8 ++ NAME shift, and go to state 9 ++ YNUMBER shift, and go to state 10 ++ YSTRING shift, and go to state 11 ++ INCREMENT shift, and go to state 16 ++ DECREMENT shift, and go to state 17 ++ LEX_BUILTIN shift, and go to state 18 ++ LEX_LENGTH shift, and go to state 19 ++ '+' shift, and go to state 20 ++ '-' shift, and go to state 21 ++ '!' shift, and go to state 54 ++ '$' shift, and go to state 24 ++ '(' shift, and go to state 55 ++ ++ simp_exp go to state 327 ++ non_post_simp_exp go to state 35 ++ variable go to state 57 ++ ++ ++State 325 ++ ++ 130 simp_exp: . non_post_simp_exp ++ 131 | . simp_exp '^' simp_exp ++ 132 | . simp_exp '*' simp_exp ++ 133 | . simp_exp '/' simp_exp ++ 134 | . simp_exp '%' simp_exp ++ 135 | . simp_exp '+' simp_exp ++ 136 | . simp_exp '-' simp_exp ++ 137 | . variable INCREMENT ++ 138 | . variable DECREMENT ++ 139 non_post_simp_exp: . '!' simp_exp ++ 139 | '!' . simp_exp ++ 140 | . '(' exp r_paren ++ 141 | . LEX_BUILTIN '(' opt_expression_list r_paren ++ 142 | . LEX_LENGTH '(' opt_expression_list r_paren ++ 143 | . LEX_LENGTH ++ 144 | . FUNC_CALL '(' opt_expression_list r_paren ++ 145 | . variable ++ 146 | . INCREMENT variable ++ 147 | . DECREMENT variable ++ 148 | . YNUMBER ++ 149 | . YSTRING ++ 150 | . '-' simp_exp ++ 151 | . '+' simp_exp ++ 154 variable: . NAME ++ 155 | . NAME '[' expression_list ']' ++ 156 | . '$' non_post_simp_exp ++ ++ FUNC_CALL shift, and go to state 8 ++ NAME shift, and go to state 9 ++ YNUMBER shift, and go to state 10 ++ YSTRING shift, and go to state 11 ++ INCREMENT shift, and go to state 16 ++ DECREMENT shift, and go to state 17 ++ LEX_BUILTIN shift, and go to state 18 ++ LEX_LENGTH shift, and go to state 19 ++ '+' shift, and go to state 20 ++ '-' shift, and go to state 21 ++ '!' shift, and go to state 54 ++ '$' shift, and go to state 24 ++ '(' shift, and go to state 55 ++ ++ simp_exp go to state 328 ++ non_post_simp_exp go to state 35 ++ variable go to state 57 ++ ++ ++State 326 ++ ++ 131 simp_exp: simp_exp . '^' simp_exp ++ 132 | simp_exp . '*' simp_exp ++ 133 | simp_exp . '/' simp_exp ++ 134 | simp_exp . '%' simp_exp ++ 135 | simp_exp . '+' simp_exp ++ 136 | simp_exp . '-' simp_exp ++ 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, '+', '-', '!', '$', '(', ')', '@:>@', '{', ';'] ++ ++ '*' shift, and go to state 89 ++ '/' shift, and go to state 90 ++ '%' shift, and go to state 91 ++ '^' shift, and go to state 92 ++ ++ $default reduce using rule 151 (non_post_simp_exp) ++ ++ Conflict between rule 151 and token '+' resolved as reduce ('+' < UNARY). ++ Conflict between rule 151 and token '-' resolved as reduce ('-' < UNARY). ++ ++ ++State 327 ++ ++ 131 simp_exp: simp_exp . '^' simp_exp ++ 132 | simp_exp . '*' simp_exp ++ 133 | simp_exp . '/' simp_exp ++ 134 | simp_exp . '%' simp_exp ++ 135 | simp_exp . '+' simp_exp ++ 136 | simp_exp . '-' simp_exp ++ 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, '+', '-', '!', '$', '(', ')', '@:>@', '{', ';'] ++ ++ '*' shift, and go to state 89 ++ '/' shift, and go to state 90 ++ '%' shift, and go to state 91 ++ '^' shift, and go to state 92 ++ ++ $default reduce using rule 150 (non_post_simp_exp) ++ ++ Conflict between rule 150 and token '+' resolved as reduce ('+' < UNARY). ++ Conflict between rule 150 and token '-' resolved as reduce ('-' < UNARY). ++ ++ ++State 328 ++ ++ 131 simp_exp: simp_exp . '^' simp_exp ++ 132 | simp_exp . '*' simp_exp ++ 133 | simp_exp . '/' simp_exp ++ 134 | simp_exp . '%' simp_exp ++ 135 | simp_exp . '+' simp_exp ++ 136 | simp_exp . '-' simp_exp ++ 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, '+', '-', '!', '$', '(', ')', '@:>@', '{', ';'] ++ ++ '*' shift, and go to state 89 ++ '/' shift, and go to state 90 ++ '%' shift, and go to state 91 ++ '^' shift, and go to state 92 ++ ++ $default reduce using rule 139 (non_post_simp_exp) ++ ++ Conflict between rule 139 and token '+' resolved as reduce ('+' < UNARY). ++ Conflict between rule 139 and token '-' resolved as reduce ('-' < UNARY). +]])], + +dnl OTHER-CHECKS +[], + +dnl PARSER-EXIT-VALUE, PARSER-STDOUT, PARSER-STDERR +dnl In the case of the syntax error, the parser recovers, so it returns 0. +[[0]], +[], +[AT_COND_CASE([[LALR]], +[[syntax error, unexpected '*', expecting NEWLINE or '{' or ';' +]])]) ## ----------------- ## ## GNU Cim Grammar. ## ## ----------------- ## -AT_SETUP([GNU Cim Grammar]) - # GNU Cim, the GNU Simula 87 Compiler. # Bison was once wrong, due to an incorrect computation of the RR conflicts. # It reported 80 SR && 99 RR conflicts instead of 78/10!!! -AT_DATA([[input.y]], -[[%union {} - +AT_TEST_EXISTING_GRAMMAR([[GNU Cim Grammar]], +[[ %token - HACTIVATE HAFTER /*HAND*/ HARRAY HAT - HBEFORE HBEGIN HBOOLEAN - HCHARACTER HCLASS /*HCOMMENT*/ HCONC - HDELAY HDO - HELSE HEND HEQ /*HEQV*/ HEXTERNAL - HFOR - HGE HGO HGOTO HGT - HHIDDEN - HIF /*HIMP*/ HIN HINNER HINSPECT HINTEGER HIS - HLABEL HLE HLONG HLT - HNAME HNE HNEW HNONE /*HNOT*/ HNOTEXT - /*HOR*/ HOTHERWISE - HPRIOR HPROCEDURE HPROTECTED - HQUA - HREACTIVATE HREAL HREF - HSHORT HSTEP HSWITCH - HTEXT HTHEN HTHIS HTO - HUNTIL - HVALUE HVAR HVIRTUAL - HWHEN HWHILE - - HASSIGNVALUE HASSIGNREF - /*HDOT*/ HPAREXPSEPARATOR HLABELSEPARATOR HSTATEMENTSEPARATOR - HBEGPAR HENDPAR - HEQR HNER - HADD HSUB HMUL HDIV HINTDIV HEXP - HDOTDOTDOT + HACTIVATE HAFTER /*HAND*/ HARRAY HAT + HBEFORE HBEGIN HBOOLEAN + HCHARACTER HCLASS /*HCOMMENT*/ HCONC + HDELAY HDO + HELSE HEND HEQ /*HEQV*/ HEXTERNAL + HFOR + HGE HGO HGOTO HGT + HHIDDEN + HIF /*HIMP*/ HIN HINNER HINSPECT HINTEGER HIS + HLABEL HLE HLONG HLT + HNAME HNE HNEW HNONE /*HNOT*/ HNOTEXT + /*HOR*/ HOTHERWISE + HPRIOR HPROCEDURE HPROTECTED + HQUA + HREACTIVATE HREAL HREF + HSHORT HSTEP HSWITCH + HTEXT HTHEN HTHIS HTO + HUNTIL + HVALUE HVAR HVIRTUAL + HWHEN HWHILE + + HASSIGNVALUE HASSIGNREF + /*HDOT*/ HPAREXPSEPARATOR HLABELSEPARATOR HSTATEMENTSEPARATOR + HBEGPAR HENDPAR + HEQR HNER + HADD HSUB HMUL HDIV HINTDIV HEXP + HDOTDOTDOT %token HIDENTIFIER %token HBOOLEANKONST HINTEGERKONST HCHARACTERKONST @@ -418,7 +857,7 @@ AT_DATA([[input.y]], %left HVALRELOPERATOR HREFRELOPERATOR HOBJRELOPERATOR -%left HCONC +%left HCONC %left HTERMOPERATOR %left UNEAR @@ -430,536 +869,576 @@ AT_DATA([[input.y]], %left HDOT %start MAIN_MODULE -%% +]], +[[ /* GRAMATIKK FOR PROGRAM MODULES */ MAIN_MODULE : {} - MODULS - | error HSTATEMENTSEPARATOR MBEE_DECLSTMS - ; -EXT_DECLARATION : HEXTERNAL - MBEE_TYPE - HPROCEDURE - {} - EXT_LIST - | - HEXTERNAL - HIDENTIFIER - HPROCEDURE - {} - HIDENTIFIER {} - EXTERNAL_KIND_ITEM - | HEXTERNAL - HCLASS - {} - EXT_LIST - - ; -EXTERNAL_KIND_ITEM: EXT_IDENT - HOBJRELOPERATOR - {} - MBEE_TYPE HPROCEDURE - HIDENTIFIER - {} - HEADING EMPTY_BLOCK - {} -/* | - EXT_IDENT - {} - MBEE_REST_EXT_LIST - ; -MBEE_REST_EXT_LIST: /* EMPTY - | HPAREXPSEPARATOR EXT_KIND_LIST - ; -EXT_KIND_LIST : EXT_KIND_ITEM - | EXT_KIND_LIST HPAREXPSEPARATOR EXT_KIND_ITEM - ; -EXT_KIND_ITEM : HIDENTIFIER - EXT_IDENT - {}*/ - ; -EMPTY_BLOCK : /*EMPT*/ - | HBEGIN HEND - ; -EXT_LIST : EXT_ITEM - | EXT_LIST HPAREXPSEPARATOR EXT_ITEM - ; -EXT_ITEM : HIDENTIFIER - EXT_IDENT - ; -EXT_IDENT : /* EMPTY */ - | HVALRELOPERATOR {} - HTEXTKONST - ; + MODULS + | error HSTATEMENTSEPARATOR MBEE_DECLSTMS + ; +EXT_DECLARATION : HEXTERNAL + MBEE_TYPE + HPROCEDURE + {} + EXT_LIST + | + HEXTERNAL + HIDENTIFIER + HPROCEDURE + {} + HIDENTIFIER {} + EXTERNAL_KIND_ITEM + | HEXTERNAL + HCLASS + {} + EXT_LIST + + ; +EXTERNAL_KIND_ITEM: EXT_IDENT + HOBJRELOPERATOR + {} + MBEE_TYPE HPROCEDURE + HIDENTIFIER + {} + HEADING EMPTY_BLOCK + {} +/* | + EXT_IDENT + {} + MBEE_REST_EXT_LIST + ; +MBEE_REST_EXT_LIST: /* EMPTY + | HPAREXPSEPARATOR EXT_KIND_LIST + ; +EXT_KIND_LIST : EXT_KIND_ITEM + | EXT_KIND_LIST HPAREXPSEPARATOR EXT_KIND_ITEM + ; +EXT_KIND_ITEM : HIDENTIFIER + EXT_IDENT + {}*/ + ; +EMPTY_BLOCK : /*EMPT*/ + | HBEGIN HEND + ; +EXT_LIST : EXT_ITEM + | EXT_LIST HPAREXPSEPARATOR EXT_ITEM + ; +EXT_ITEM : HIDENTIFIER + EXT_IDENT + ; +EXT_IDENT : /* EMPTY */ + | HVALRELOPERATOR {} + HTEXTKONST + ; /* GRAMATIKK FOR TYPER */ NO_TYPE : /*EMPT*/ - ; + ; MBEE_TYPE : NO_TYPE - | TYPE - ; + | TYPE + ; TYPE : HREF HBEGPAR - HIDENTIFIER - {} - HENDPAR - | HTEXT - | HBOOLEAN - | HCHARACTER - | HSHORT HINTEGER - | HINTEGER - | HREAL - | HLONG HREAL - ; + HIDENTIFIER + {} + HENDPAR + | HTEXT + | HBOOLEAN + | HCHARACTER + | HSHORT HINTEGER + | HINTEGER + | HREAL + | HLONG HREAL + ; /* GRAMATIKK FOR DEL AV SETNINGER */ MBEE_ELSE_PART : /*EMPT*/ -/* | HELSE - HIF - EXPRESSION - HTHEN {} - BLOCK {} - MBEE_ELSE_PART {}*/ - | HELSE {} - BLOCK - ; +/* | HELSE + HIF + EXPRESSION + HTHEN {} + BLOCK {} + MBEE_ELSE_PART {}*/ + | HELSE {} + BLOCK + ; FOR_LIST : FOR_LIST_ELEMENT - | FOR_LIST_ELEMENT - HPAREXPSEPARATOR - FOR_LIST - ; + | FOR_LIST_ELEMENT + HPAREXPSEPARATOR + FOR_LIST + ; FOR_LIST_ELEMENT: EXPRESSION - MBEE_F_L_EL_R_PT - ; + MBEE_F_L_EL_R_PT + ; MBEE_F_L_EL_R_PT: /*EMPT*/ - | HWHILE - EXPRESSION - | HSTEP - EXPRESSION - HUNTIL - EXPRESSION - ; + | HWHILE + EXPRESSION + | HSTEP + EXPRESSION + HUNTIL + EXPRESSION + ; GOTO : HGO - HTO - | HGOTO - ; + HTO + | HGOTO + ; CONN_STATE_R_PT : WHEN_CLAUSE_LIST - | HDO {} - BLOCK - ; + | HDO {} + BLOCK + ; WHEN_CLAUSE_LIST: HWHEN - HIDENTIFIER - HDO {} - BLOCK - | WHEN_CLAUSE_LIST - HWHEN - HIDENTIFIER - HDO {} - BLOCK - ; + HIDENTIFIER + HDO {} + BLOCK + | WHEN_CLAUSE_LIST + HWHEN + HIDENTIFIER + HDO {} + BLOCK + ; MBEE_OTWI_CLAUS : /*EMPT*/ - | HOTHERWISE {} - - BLOCK - ; -ACTIVATOR : HACTIVATE - | HREACTIVATE - ; -SCHEDULE : /*EMPT*/ - | ATDELAY EXPRESSION {} - PRIOR - | BEFOREAFTER {} - EXPRESSION - ; -ATDELAY : HAT - | HDELAY - ; -BEFOREAFTER : HBEFORE - | HAFTER - ; -PRIOR : /*EMPT*/ - | HPRIOR - ; + | HOTHERWISE {} + + BLOCK + ; +ACTIVATOR : HACTIVATE + | HREACTIVATE + ; +SCHEDULE : /*EMPT*/ + | ATDELAY EXPRESSION {} + PRIOR + | BEFOREAFTER {} + EXPRESSION + ; +ATDELAY : HAT + | HDELAY + ; +BEFOREAFTER : HBEFORE + | HAFTER + ; +PRIOR : /*EMPT*/ + | HPRIOR + ; /* GRAMATIKK FOR SETNINGER OG DEKLARASJONER */ MODULSTATEMENT : HWHILE - EXPRESSION - HDO {} - BLOCK - | HIF - EXPRESSION - HTHEN {} - BLOCK {} - MBEE_ELSE_PART - | HFOR - HIDENTIFIER - HASSIGN {} - FOR_LIST - HDO {} - BLOCK - | GOTO - EXPRESSION - | HINSPECT - EXPRESSION {} - CONN_STATE_R_PT - {} - MBEE_OTWI_CLAUS - | HINNER - | HIDENTIFIER - HLABELSEPARATOR - {} - DECLSTATEMENT - | EXPRESSION_SIMP - HBEGIN - {} - IMPORT_SPEC_MODULE - {} - MBEE_DECLSTMS - HEND - | EXPRESSION_SIMP HBEGIN error HSTATEMENTSEPARATOR - MBEE_DECLSTMS HEND - | EXPRESSION_SIMP HBEGIN error HEND - | EXPRESSION_SIMP - | ACTIVATOR EXPRESSION SCHEDULE - | HBEGIN - {} - MBEE_DECLSTMS - HEND - | MBEE_TYPE HPROCEDURE - HIDENTIFIER - {} - HEADING BLOCK - | HIDENTIFIER - HCLASS - NO_TYPE - {} - IMPORT_SPEC_MODULE - HIDENTIFIER - {} - HEADING - BLOCK - | HCLASS - NO_TYPE - HIDENTIFIER - {} - HEADING - BLOCK - | EXT_DECLARATION - | /*EMPT*/ - ; + EXPRESSION + HDO {} + BLOCK + | HIF + EXPRESSION + HTHEN {} + BLOCK {} + MBEE_ELSE_PART + | HFOR + HIDENTIFIER + HASSIGN {} + FOR_LIST + HDO {} + BLOCK + | GOTO + EXPRESSION + | HINSPECT + EXPRESSION {} + CONN_STATE_R_PT + {} + MBEE_OTWI_CLAUS + | HINNER + | HIDENTIFIER + HLABELSEPARATOR + {} + DECLSTATEMENT + | EXPRESSION_SIMP + HBEGIN + {} + IMPORT_SPEC_MODULE + {} + MBEE_DECLSTMS + HEND + | EXPRESSION_SIMP HBEGIN error HSTATEMENTSEPARATOR + MBEE_DECLSTMS HEND + | EXPRESSION_SIMP HBEGIN error HEND + | EXPRESSION_SIMP + | ACTIVATOR EXPRESSION SCHEDULE + | HBEGIN + {} + MBEE_DECLSTMS + HEND + | MBEE_TYPE HPROCEDURE + HIDENTIFIER + {} + HEADING BLOCK + | HIDENTIFIER + HCLASS + NO_TYPE + {} + IMPORT_SPEC_MODULE + HIDENTIFIER + {} + HEADING + BLOCK + | HCLASS + NO_TYPE + HIDENTIFIER + {} + HEADING + BLOCK + | EXT_DECLARATION + | /*EMPT*/ + ; IMPORT_SPEC_MODULE: - ; -DECLSTATEMENT : MODULSTATEMENT - | TYPE - HIDENTIFIER - MBEE_CONSTANT - HPAREXPSEPARATOR - {} - IDENTIFIER_LISTC - | TYPE - HIDENTIFIER - MBEE_CONSTANT - | MBEE_TYPE - HARRAY {} - ARR_SEGMENT_LIST - | HSWITCH - HIDENTIFIER - HASSIGN {} - SWITCH_LIST - ; + ; +DECLSTATEMENT : MODULSTATEMENT + | TYPE + HIDENTIFIER + MBEE_CONSTANT + HPAREXPSEPARATOR + {} + IDENTIFIER_LISTC + | TYPE + HIDENTIFIER + MBEE_CONSTANT + | MBEE_TYPE + HARRAY {} + ARR_SEGMENT_LIST + | HSWITCH + HIDENTIFIER + HASSIGN {} + SWITCH_LIST + ; BLOCK : DECLSTATEMENT - | HBEGIN MBEE_DECLSTMS HEND - | HBEGIN error HSTATEMENTSEPARATOR MBEE_DECLSTMS HEND - | HBEGIN error HEND - ; + | HBEGIN MBEE_DECLSTMS HEND + | HBEGIN error HSTATEMENTSEPARATOR MBEE_DECLSTMS HEND + | HBEGIN error HEND + ; MBEE_DECLSTMS : MBEE_DECLSTMSU - ; + ; MBEE_DECLSTMSU : DECLSTATEMENT - | MBEE_DECLSTMSU - HSTATEMENTSEPARATOR - DECLSTATEMENT - ; -MODULS : MODULSTATEMENT - | MODULS HSTATEMENTSEPARATOR MODULSTATEMENT - ; + | MBEE_DECLSTMSU + HSTATEMENTSEPARATOR + DECLSTATEMENT + ; +MODULS : MODULSTATEMENT + | MODULS HSTATEMENTSEPARATOR MODULSTATEMENT + ; /* GRAMATIKK FOR DEL AV DEKLARASJONER */ ARR_SEGMENT_LIST: ARR_SEGMENT - | ARR_SEGMENT_LIST - HPAREXPSEPARATOR - ARR_SEGMENT - ; -ARR_SEGMENT : ARRAY_SEGMENT - HBEGPAR - BAUND_PAIR_LIST HENDPAR - ; + | ARR_SEGMENT_LIST + HPAREXPSEPARATOR + ARR_SEGMENT + ; +ARR_SEGMENT : ARRAY_SEGMENT + HBEGPAR + BAUND_PAIR_LIST HENDPAR + ; ARRAY_SEGMENT : ARRAY_SEGMENT_EL {} - | ARRAY_SEGMENT_EL - HPAREXPSEPARATOR - ARRAY_SEGMENT - ; + | ARRAY_SEGMENT_EL + HPAREXPSEPARATOR + ARRAY_SEGMENT + ; ARRAY_SEGMENT_EL: HIDENTIFIER - ; + ; BAUND_PAIR_LIST : BAUND_PAIR - | BAUND_PAIR - HPAREXPSEPARATOR - BAUND_PAIR_LIST - ; + | BAUND_PAIR + HPAREXPSEPARATOR + BAUND_PAIR_LIST + ; BAUND_PAIR : EXPRESSION - HLABELSEPARATOR - EXPRESSION - ; + HLABELSEPARATOR + EXPRESSION + ; SWITCH_LIST : EXPRESSION - | EXPRESSION - HPAREXPSEPARATOR - SWITCH_LIST - ; + | EXPRESSION + HPAREXPSEPARATOR + SWITCH_LIST + ; HEADING : MBEE_FMAL_PAR_P HSTATEMENTSEPARATOR {} - MBEE_MODE_PART {} - MBEE_SPEC_PART {} - MBEE_PROT_PART {} - MBEE_VIRT_PART - ; + MBEE_MODE_PART {} + MBEE_SPEC_PART {} + MBEE_PROT_PART {} + MBEE_VIRT_PART + ; MBEE_FMAL_PAR_P : /*EMPT*/ - | FMAL_PAR_PART - ; + | FMAL_PAR_PART + ; FMAL_PAR_PART : HBEGPAR NO_TYPE - MBEE_LISTV HENDPAR - ; + MBEE_LISTV HENDPAR + ; MBEE_LISTV : /*EMPT*/ - | LISTV - ; + | LISTV + ; LISTV : HIDENTIFIER - | FPP_CATEG HDOTDOTDOT - | HIDENTIFIER {} - HPAREXPSEPARATOR LISTV - | FPP_SPEC - | FPP_SPEC - HPAREXPSEPARATOR LISTV - ; + | FPP_CATEG HDOTDOTDOT + | HIDENTIFIER {} + HPAREXPSEPARATOR LISTV + | FPP_SPEC + | FPP_SPEC + HPAREXPSEPARATOR LISTV + ; FPP_HEADING : HBEGPAR NO_TYPE - FPP_MBEE_LISTV HENDPAR - ; + FPP_MBEE_LISTV HENDPAR + ; FPP_MBEE_LISTV : /*EMPT*/ - | FPP_LISTV - ; -FPP_LISTV : FPP_CATEG HDOTDOTDOT - | FPP_SPEC - | FPP_SPEC - HPAREXPSEPARATOR LISTV - ; + | FPP_LISTV + ; +FPP_LISTV : FPP_CATEG HDOTDOTDOT + | FPP_SPEC + | FPP_SPEC + HPAREXPSEPARATOR LISTV + ; FPP_SPEC : FPP_CATEG SPECIFIER HIDENTIFIER - | FPP_CATEG FPP_PROC_DECL_IN_SPEC - ; + | FPP_CATEG FPP_PROC_DECL_IN_SPEC + ; FPP_CATEG : HNAME HLABELSEPARATOR - | HVALUE HLABELSEPARATOR - | HVAR HLABELSEPARATOR - | /*EMPT*/ - ; -FPP_PROC_DECL_IN_SPEC: MBEE_TYPE HPROCEDURE - HIDENTIFIER - {} - FPP_HEADING {} { /* Yes, two "final" actions. */ } - ; + | HVALUE HLABELSEPARATOR + | HVAR HLABELSEPARATOR + | /*EMPT*/ + ; +FPP_PROC_DECL_IN_SPEC: MBEE_TYPE HPROCEDURE + HIDENTIFIER + {} + FPP_HEADING {} { /* Yes, two "final" actions. */ } + ; IDENTIFIER_LISTV: HIDENTIFIER - | HDOTDOTDOT - | HIDENTIFIER {} - HPAREXPSEPARATOR IDENTIFIER_LISTV - ; + | HDOTDOTDOT + | HIDENTIFIER {} + HPAREXPSEPARATOR IDENTIFIER_LISTV + ; MBEE_MODE_PART : /*EMPT*/ - | MODE_PART - ; + | MODE_PART + ; MODE_PART : NAME_PART - | VALUE_PART - | VAR_PART - | NAME_PART VALUE_PART - | VALUE_PART NAME_PART - | NAME_PART VAR_PART - | VAR_PART NAME_PART - | VALUE_PART VAR_PART - | VAR_PART VALUE_PART - | VAR_PART NAME_PART VALUE_PART - | NAME_PART VAR_PART VALUE_PART - | NAME_PART VALUE_PART VAR_PART - | VAR_PART VALUE_PART NAME_PART - | VALUE_PART VAR_PART NAME_PART - | VALUE_PART NAME_PART VAR_PART - ; + | VALUE_PART + | VAR_PART + | NAME_PART VALUE_PART + | VALUE_PART NAME_PART + | NAME_PART VAR_PART + | VAR_PART NAME_PART + | VALUE_PART VAR_PART + | VAR_PART VALUE_PART + | VAR_PART NAME_PART VALUE_PART + | NAME_PART VAR_PART VALUE_PART + | NAME_PART VALUE_PART VAR_PART + | VAR_PART VALUE_PART NAME_PART + | VALUE_PART VAR_PART NAME_PART + | VALUE_PART NAME_PART VAR_PART + ; NAME_PART : HNAME {} - IDENTIFIER_LISTV - HSTATEMENTSEPARATOR - ; + IDENTIFIER_LISTV + HSTATEMENTSEPARATOR + ; VAR_PART : HVAR {} - IDENTIFIER_LISTV - HSTATEMENTSEPARATOR - ; + IDENTIFIER_LISTV + HSTATEMENTSEPARATOR + ; VALUE_PART : HVALUE {} - IDENTIFIER_LISTV HSTATEMENTSEPARATOR - ; + IDENTIFIER_LISTV HSTATEMENTSEPARATOR + ; MBEE_SPEC_PART : /*EMPT*/ - | SPEC_PART - ; + | SPEC_PART + ; SPEC_PART : ONE_SPEC - | SPEC_PART ONE_SPEC - ; -ONE_SPEC : SPECIFIER IDENTIFIER_LIST HSTATEMENTSEPARATOR - | NO_TYPE HPROCEDURE HIDENTIFIER HOBJRELOPERATOR - {} - PROC_DECL_IN_SPEC HSTATEMENTSEPARATOR - | FPP_PROC_DECL_IN_SPEC HSTATEMENTSEPARATOR - | MBEE_TYPE HPROCEDURE HIDENTIFIER HSTATEMENTSEPARATOR - | MBEE_TYPE HPROCEDURE HIDENTIFIER HPAREXPSEPARATOR - IDENTIFIER_LIST HSTATEMENTSEPARATOR - ; + | SPEC_PART ONE_SPEC + ; +ONE_SPEC : SPECIFIER IDENTIFIER_LIST HSTATEMENTSEPARATOR + | NO_TYPE HPROCEDURE HIDENTIFIER HOBJRELOPERATOR + {} + PROC_DECL_IN_SPEC HSTATEMENTSEPARATOR + | FPP_PROC_DECL_IN_SPEC HSTATEMENTSEPARATOR + | MBEE_TYPE HPROCEDURE HIDENTIFIER HSTATEMENTSEPARATOR + | MBEE_TYPE HPROCEDURE HIDENTIFIER HPAREXPSEPARATOR + IDENTIFIER_LIST HSTATEMENTSEPARATOR + ; SPECIFIER : TYPE - | MBEE_TYPE - HARRAY - | HLABEL - | HSWITCH - ; -PROC_DECL_IN_SPEC: MBEE_TYPE HPROCEDURE - HIDENTIFIER - {} - HEADING - {} - MBEE_BEGIN_END - ; -MBEE_BEGIN_END : /* EMPTY */ - | HBEGIN HEND - ; + | MBEE_TYPE + HARRAY + | HLABEL + | HSWITCH + ; +PROC_DECL_IN_SPEC: MBEE_TYPE HPROCEDURE + HIDENTIFIER + {} + HEADING + {} + MBEE_BEGIN_END + ; +MBEE_BEGIN_END : /* EMPTY */ + | HBEGIN HEND + ; MBEE_PROT_PART : /*EMPT*/ - | PROTECTION_PART - ; + | PROTECTION_PART + ; PROTECTION_PART : PROT_SPECIFIER IDENTIFIER_LIST - HSTATEMENTSEPARATOR - | PROTECTION_PART PROT_SPECIFIER - IDENTIFIER_LIST HSTATEMENTSEPARATOR - ; + HSTATEMENTSEPARATOR + | PROTECTION_PART PROT_SPECIFIER + IDENTIFIER_LIST HSTATEMENTSEPARATOR + ; PROT_SPECIFIER : HHIDDEN - | HPROTECTED - | HHIDDEN - HPROTECTED - | HPROTECTED - HHIDDEN - ; + | HPROTECTED + | HHIDDEN + HPROTECTED + | HPROTECTED + HHIDDEN + ; MBEE_VIRT_PART : /*EMPT*/ - | VIRTUAL_PART - ; + | VIRTUAL_PART + ; VIRTUAL_PART : HVIRTUAL - HLABELSEPARATOR - MBEE_SPEC_PART - ; + HLABELSEPARATOR + MBEE_SPEC_PART + ; IDENTIFIER_LIST : HIDENTIFIER - | IDENTIFIER_LIST HPAREXPSEPARATOR - HIDENTIFIER - ; + | IDENTIFIER_LIST HPAREXPSEPARATOR + HIDENTIFIER + ; IDENTIFIER_LISTC: HIDENTIFIER - MBEE_CONSTANT - | IDENTIFIER_LISTC HPAREXPSEPARATOR - HIDENTIFIER - MBEE_CONSTANT - ; -MBEE_CONSTANT : /* EMPTY */ - | HVALRELOPERATOR - {} - EXPRESSION - ; + MBEE_CONSTANT + | IDENTIFIER_LISTC HPAREXPSEPARATOR + HIDENTIFIER + MBEE_CONSTANT + ; +MBEE_CONSTANT : /* EMPTY */ + | HVALRELOPERATOR + {} + EXPRESSION + ; /* GRAMATIKK FOR UTTRYKK */ EXPRESSION : EXPRESSION_SIMP - | HIF - EXPRESSION - HTHEN - EXPRESSION - HELSE - EXPRESSION - ; -EXPRESSION_SIMP : EXPRESSION_SIMP - HASSIGN - EXPRESSION - | - - EXPRESSION_SIMP - HCONC - EXPRESSION_SIMP - | EXPRESSION_SIMP HOR - HELSE - EXPRESSION_SIMP - %prec HORELSE - | EXPRESSION_SIMP HAND - HTHEN - EXPRESSION_SIMP - %prec HANDTHEN - | EXPRESSION_SIMP - HEQV EXPRESSION_SIMP - | EXPRESSION_SIMP - HIMP EXPRESSION_SIMP - | EXPRESSION_SIMP - HOR EXPRESSION_SIMP - | EXPRESSION_SIMP - HAND EXPRESSION_SIMP - | HNOT EXPRESSION_SIMP - | EXPRESSION_SIMP - HVALRELOPERATOR - EXPRESSION_SIMP - | EXPRESSION_SIMP - HREFRELOPERATOR - EXPRESSION_SIMP - | EXPRESSION_SIMP - HOBJRELOPERATOR - EXPRESSION_SIMP - | HTERMOPERATOR - EXPRESSION_SIMP %prec UNEAR - | EXPRESSION_SIMP - HTERMOPERATOR - EXPRESSION_SIMP - | EXPRESSION_SIMP - HFACTOROPERATOR - EXPRESSION_SIMP - | EXPRESSION_SIMP - HPRIMARYOPERATOR - EXPRESSION_SIMP - | HBEGPAR - EXPRESSION HENDPAR - | HTEXTKONST - | HCHARACTERKONST - | HREALKONST - | HINTEGERKONST - | HBOOLEANKONST - | HNONE - | HIDENTIFIER - {} - MBEE_ARG_R_PT - | HTHIS HIDENTIFIER - | HNEW - HIDENTIFIER - ARG_R_PT - | EXPRESSION_SIMP - HDOT - EXPRESSION_SIMP - | EXPRESSION_SIMP - HQUA HIDENTIFIER - ; + | HIF + EXPRESSION + HTHEN + EXPRESSION + HELSE + EXPRESSION + ; +EXPRESSION_SIMP : EXPRESSION_SIMP + HASSIGN + EXPRESSION + | + + EXPRESSION_SIMP + HCONC + EXPRESSION_SIMP + | EXPRESSION_SIMP HOR + HELSE + EXPRESSION_SIMP + %prec HORELSE + | EXPRESSION_SIMP HAND + HTHEN + EXPRESSION_SIMP + %prec HANDTHEN + | EXPRESSION_SIMP + HEQV EXPRESSION_SIMP + | EXPRESSION_SIMP + HIMP EXPRESSION_SIMP + | EXPRESSION_SIMP + HOR EXPRESSION_SIMP + | EXPRESSION_SIMP + HAND EXPRESSION_SIMP + | HNOT EXPRESSION_SIMP + | EXPRESSION_SIMP + HVALRELOPERATOR + EXPRESSION_SIMP + | EXPRESSION_SIMP + HREFRELOPERATOR + EXPRESSION_SIMP + | EXPRESSION_SIMP + HOBJRELOPERATOR + EXPRESSION_SIMP + | HTERMOPERATOR + EXPRESSION_SIMP %prec UNEAR + | EXPRESSION_SIMP + HTERMOPERATOR + EXPRESSION_SIMP + | EXPRESSION_SIMP + HFACTOROPERATOR + EXPRESSION_SIMP + | EXPRESSION_SIMP + HPRIMARYOPERATOR + EXPRESSION_SIMP + | HBEGPAR + EXPRESSION HENDPAR + | HTEXTKONST + | HCHARACTERKONST + | HREALKONST + | HINTEGERKONST + | HBOOLEANKONST + | HNONE + | HIDENTIFIER + {} + MBEE_ARG_R_PT + | HTHIS HIDENTIFIER + | HNEW + HIDENTIFIER + ARG_R_PT + | EXPRESSION_SIMP + HDOT + EXPRESSION_SIMP + | EXPRESSION_SIMP + HQUA HIDENTIFIER + ; ARG_R_PT : /*EMPTY*/ - | HBEGPAR - ARGUMENT_LIST HENDPAR - ; + | HBEGPAR + ARGUMENT_LIST HENDPAR + ; MBEE_ARG_R_PT : /*EMPTY*/ - | HBEGPAR - ARGUMENT_LIST HENDPAR - ; + | HBEGPAR + ARGUMENT_LIST HENDPAR + ; ARGUMENT_LIST : EXPRESSION - | EXPRESSION - HPAREXPSEPARATOR - ARGUMENT_LIST - ; -%% -]]) - -# Pass plenty of options, to exercise plenty of code, even if we -# don't actually check the output. But SEGV is watching us, and -# so might do dmalloc. -AT_CHECK([[bison --verbose --defines input.y]], 0, [], -[[input.y: conflicts: 78 shift/reduce, 10 reduce/reduce -]]) - -AT_CHECK([[grep '^State.*conflicts:' input.output]], 0, + | EXPRESSION + HPAREXPSEPARATOR + ARGUMENT_LIST + ; +]], + +dnl INPUT +[[]], + +dnl BISON-STDERR +[[input.y:128.12: warning: empty rule without %empty [-Wempty-rule] +input.y:137.10: warning: empty rule without %empty [-Wempty-rule] +input.y:142.8: warning: empty rule without %empty [-Wempty-rule] +input.y:161.15: warning: empty rule without %empty [-Wempty-rule] +input.y:179.17: warning: empty rule without %empty [-Wempty-rule] +input.y:205.16: warning: empty rule without %empty [-Wempty-rule] +input.y:213.9: warning: empty rule without %empty [-Wempty-rule] +input.y:225.6: warning: empty rule without %empty [-Wempty-rule] +input.y:292.18: warning: empty rule without %empty [-Wempty-rule] +input.y:294.19: warning: empty rule without %empty [-Wempty-rule] +input.y:367.16: warning: empty rule without %empty [-Wempty-rule] +input.y:373.11: warning: empty rule without %empty [-Wempty-rule] +input.y:387.15: warning: empty rule without %empty [-Wempty-rule] +input.y:401.18: warning: empty rule without %empty [-Wempty-rule] +input.y:413.15: warning: empty rule without %empty [-Wempty-rule] +input.y:443.15: warning: empty rule without %empty [-Wempty-rule] +input.y:471.15: warning: empty rule without %empty [-Wempty-rule] +input.y:474.15: warning: empty rule without %empty [-Wempty-rule] +input.y:489.15: warning: empty rule without %empty [-Wempty-rule] +input.y:506.14: warning: empty rule without %empty [-Wempty-rule] +input.y:587.9: warning: empty rule without %empty [-Wempty-rule] +input.y:591.14: warning: empty rule without %empty [-Wempty-rule] +]AT_COND_CASE([[canonical LR]], +[[input.y: warning: 1876 shift/reduce conflicts [-Wconflicts-sr] +input.y: warning: 144 reduce/reduce conflicts [-Wconflicts-rr]]], +[[input.y: warning: 78 shift/reduce conflicts [-Wconflicts-sr] +input.y: warning: 10 reduce/reduce conflicts [-Wconflicts-rr]]])[ +input.y:72.1-5: warning: useless associativity for HQUA, use %precedence [-Wprecedence] +input.y:53.1-6: warning: useless associativity for HASSIGN, use %precedence [-Wprecedence] +input.y:54.1-5: warning: useless associativity for HORELSE, use %precedence [-Wprecedence] +input.y:55.1-5: warning: useless associativity for HANDTHEN, use %precedence [-Wprecedence] +input.y:61.1-5: warning: useless associativity for HNOT, use %precedence [-Wprecedence] +input.y:68.1-5: warning: useless associativity for UNEAR, use %precedence [-Wprecedence] +]], + +dnl LAST-STATE +[AT_COND_CASE([[canonical LR]], [[10425]], [[442]])], + +dnl LALR1-DIFF not used for canonical LR(1) because the diff is huge. +[], + +dnl OTHER-CHECKS +[AT_COND_CASE([[canonical LR]], [[]], +[AT_CHECK([[grep '^State.*conflicts:' input.output]], [[0]], [[State 64 conflicts: 14 shift/reduce State 164 conflicts: 1 shift/reduce State 201 conflicts: 33 shift/reduce, 4 reduce/reduce @@ -969,22 +1448,18 @@ State 335 conflicts: 9 shift/reduce, 2 reduce/reduce State 356 conflicts: 1 shift/reduce State 360 conflicts: 9 shift/reduce, 2 reduce/reduce State 427 conflicts: 9 shift/reduce, 2 reduce/reduce -]]) +]])])]) -AT_CLEANUP - -## ----------------- ## -## GNU pic Grammar. ## -## ----------------- ## - -AT_SETUP([GNU pic Grammar]) +## -------------------------------- ## +## GNU pic (Groff 1.18.1) Grammar. ## +## -------------------------------- ## # GNU pic, part of groff. # Bison once reported shift/reduce conflicts that it shouldn't have. -AT_DATA([[input.y]], -[[%union {} +AT_TEST_EXISTING_GRAMMAR([[GNU pic (Groff 1.18.1) Grammar]], +[[%error-verbose %token LABEL %token VARIABLE @@ -1064,7 +1539,7 @@ AT_DATA([[input.y]], %token RAND %token SRAND %token COPY -%token THRU +%token THROUGH %token TOP %token BOTTOM %token UPPER @@ -1118,7 +1593,7 @@ box "foo" above ljust == box ("foo" above ljust) %left LEFT RIGHT /* Give attributes that take an optional expression a higher -precedence than left and right, so that eg `line chop left' +precedence than left and right, so that eg 'line chop left' parses properly. */ %left CHOP SOLID DASHED DOTTED UP DOWN FILL COLORED OUTLINED %left LABEL @@ -1131,7 +1606,7 @@ parses properly. */ /* these need to be lower than '-' */ %left HEIGHT RADIUS WIDTH DIAMETER FROM TO AT THICKNESS -/* these must have higher precedence than CHOP so that `label %prec CHOP' +/* these must have higher precedence than CHOP so that 'label %prec CHOP' works */ %left DOT_N DOT_E DOT_W DOT_S DOT_NE DOT_SE DOT_NW DOT_SW DOT_C %left DOT_START DOT_END TOP BOTTOM LEFT_CORNER RIGHT_CORNER @@ -1150,378 +1625,1639 @@ works */ %left '*' '/' '%' %right '!' %right '^' - -%% - +]], +[[ top: - optional_separator - | element_list - ; + optional_separator + | element_list + ; element_list: - optional_separator middle_element_list optional_separator - ; + optional_separator middle_element_list optional_separator + ; middle_element_list: - element - | middle_element_list separator element - ; + element + | middle_element_list separator element + ; optional_separator: - /* empty */ - | separator - ; + /* empty */ + | separator + ; separator: - ';' - | separator ';' - ; + ';' + | separator ';' + ; placeless_element: - VARIABLE '=' any_expr - | VARIABLE ':' '=' any_expr - | UP - | DOWN - | LEFT - | RIGHT - | COMMAND_LINE - | COMMAND print_args - | PRINT print_args - | SH - {} - DELIMITED - | COPY TEXT - | COPY TEXT THRU - {} - DELIMITED - {} - until - | COPY THRU - {} - DELIMITED - {} - until - | FOR VARIABLE '=' expr TO expr optional_by DO - {} - DELIMITED - | simple_if - | simple_if ELSE - {} - DELIMITED - | reset_variables - | RESET - ; + VARIABLE '=' any_expr + | VARIABLE ':' '=' any_expr + | UP + | DOWN + | LEFT + | RIGHT + | COMMAND_LINE + | COMMAND print_args + | PRINT print_args + | SH + {} + DELIMITED + | COPY TEXT + | COPY TEXT THROUGH + {} + DELIMITED + {} + until + | COPY THROUGH + {} + DELIMITED + {} + until + | FOR VARIABLE '=' expr TO expr optional_by DO + {} + DELIMITED + | simple_if + | simple_if ELSE + {} + DELIMITED + | reset_variables + | RESET + ; reset_variables: - RESET VARIABLE - | reset_variables VARIABLE - | reset_variables ',' VARIABLE - ; + RESET VARIABLE + | reset_variables VARIABLE + | reset_variables ',' VARIABLE + ; print_args: - print_arg - | print_args print_arg - ; + print_arg + | print_args print_arg + ; print_arg: - expr %prec ',' - | text - | position %prec ',' - ; + expr %prec ',' + | text + | position %prec ',' + ; simple_if: - IF any_expr THEN - {} - DELIMITED - ; + IF any_expr THEN + {} + DELIMITED + ; until: - /* empty */ - | UNTIL TEXT - ; + /* empty */ + | UNTIL TEXT + ; any_expr: - expr - | text_expr - ; + expr + | text_expr + ; text_expr: - text EQUALEQUAL text - | text NOTEQUAL text - | text_expr ANDAND text_expr - | text_expr ANDAND expr - | expr ANDAND text_expr - | text_expr OROR text_expr - | text_expr OROR expr - | expr OROR text_expr - | '!' text_expr - ; + text EQUALEQUAL text + | text NOTEQUAL text + | text_expr ANDAND text_expr + | text_expr ANDAND expr + | expr ANDAND text_expr + | text_expr OROR text_expr + | text_expr OROR expr + | expr OROR text_expr + | '!' text_expr + ; optional_by: - /* empty */ - | BY expr - | BY '*' expr - ; + /* empty */ + | BY expr + | BY '*' expr + ; element: - object_spec - | LABEL ':' optional_separator element - | LABEL ':' optional_separator position_not_place - | LABEL ':' optional_separator place - | '{}' - {} - optional_element - | placeless_element - ; + object_spec + | LABEL ':' optional_separator element + | LABEL ':' optional_separator position_not_place + | LABEL ':' optional_separator place + | '{' {} element_list '}' + {} + optional_element + | placeless_element + ; optional_element: - /* empty */ - | element - ; + /* empty */ + | element + ; object_spec: - BOX - | CIRCLE - | ELLIPSE - | ARC - | LINE - | ARROW - | MOVE - | SPLINE - | text %prec TEXT - | PLOT expr - | PLOT expr text - | '[' - {} - element_list ']' - | object_spec HEIGHT expr - | object_spec RADIUS expr - | object_spec WIDTH expr - | object_spec DIAMETER expr - | object_spec expr %prec HEIGHT - | object_spec UP - | object_spec UP expr - | object_spec DOWN - | object_spec DOWN expr - | object_spec RIGHT - | object_spec RIGHT expr - | object_spec LEFT - | object_spec LEFT expr - | object_spec FROM position - | object_spec TO position - | object_spec AT position - | object_spec WITH path - | object_spec WITH position %prec ',' - | object_spec BY expr_pair - | object_spec THEN - | object_spec SOLID - | object_spec DOTTED - | object_spec DOTTED expr - | object_spec DASHED - | object_spec DASHED expr - | object_spec FILL - | object_spec FILL expr - | object_spec SHADED text - | object_spec COLORED text - | object_spec OUTLINED text - | object_spec CHOP - | object_spec CHOP expr - | object_spec SAME - | object_spec INVISIBLE - | object_spec LEFT_ARROW_HEAD - | object_spec RIGHT_ARROW_HEAD - | object_spec DOUBLE_ARROW_HEAD - | object_spec CW - | object_spec CCW - | object_spec text %prec TEXT - | object_spec LJUST - | object_spec RJUST - | object_spec ABOVE - | object_spec BELOW - | object_spec THICKNESS expr - | object_spec ALIGNED - ; + BOX + | CIRCLE + | ELLIPSE + | ARC + | LINE + | ARROW + | MOVE + | SPLINE + | text %prec TEXT + | PLOT expr + | PLOT expr text + | '[' + {} + element_list ']' + | object_spec HEIGHT expr + | object_spec RADIUS expr + | object_spec WIDTH expr + | object_spec DIAMETER expr + | object_spec expr %prec HEIGHT + | object_spec UP + | object_spec UP expr + | object_spec DOWN + | object_spec DOWN expr + | object_spec RIGHT + | object_spec RIGHT expr + | object_spec LEFT + | object_spec LEFT expr + | object_spec FROM position + | object_spec TO position + | object_spec AT position + | object_spec WITH path + | object_spec WITH position %prec ',' + | object_spec BY expr_pair + | object_spec THEN + | object_spec SOLID + | object_spec DOTTED + | object_spec DOTTED expr + | object_spec DASHED + | object_spec DASHED expr + | object_spec FILL + | object_spec FILL expr + | object_spec SHADED text + | object_spec COLORED text + | object_spec OUTLINED text + | object_spec CHOP + | object_spec CHOP expr + | object_spec SAME + | object_spec INVISIBLE + | object_spec LEFT_ARROW_HEAD + | object_spec RIGHT_ARROW_HEAD + | object_spec DOUBLE_ARROW_HEAD + | object_spec CW + | object_spec CCW + | object_spec text %prec TEXT + | object_spec LJUST + | object_spec RJUST + | object_spec ABOVE + | object_spec BELOW + | object_spec THICKNESS expr + | object_spec ALIGNED + ; text: - TEXT - | SPRINTF '(' TEXT sprintf_args ')' - ; + TEXT + | SPRINTF '(' TEXT sprintf_args ')' + ; sprintf_args: - /* empty */ - | sprintf_args ',' expr - ; + /* empty */ + | sprintf_args ',' expr + ; position: - position_not_place - | place - ; + position_not_place + | place + ; position_not_place: - expr_pair - | position '+' expr_pair - | position '-' expr_pair - | '(' position ',' position ')' - | expr between position AND position - | expr '<' position ',' position '>' - ; + expr_pair + | position '+' expr_pair + | position '-' expr_pair + | '(' position ',' position ')' + | expr between position AND position + | expr '<' position ',' position '>' + ; between: - BETWEEN - | OF THE WAY BETWEEN - ; + BETWEEN + | OF THE WAY BETWEEN + ; expr_pair: - expr ',' expr - | '(' expr_pair ')' - ; + expr ',' expr + | '(' expr_pair ')' + ; place: - /* line at A left == line (at A) left */ - label %prec CHOP - | label corner - | corner label - | corner OF label - | HERE - ; + /* line at A left == line (at A) left */ + label %prec CHOP + | label corner + | corner label + | corner OF label + | HERE + ; label: - LABEL - | nth_primitive - | label '.' LABEL - ; + LABEL + | nth_primitive + | label '.' LABEL + ; ordinal: - ORDINAL - | '`' any_expr TH - ; + ORDINAL + | '`' any_expr TH + ; optional_ordinal_last: - LAST - | ordinal LAST - ; + LAST + | ordinal LAST + ; nth_primitive: - ordinal object_type - | optional_ordinal_last object_type - ; + ordinal object_type + | optional_ordinal_last object_type + ; object_type: - BOX - | CIRCLE - | ELLIPSE - | ARC - | LINE - | ARROW - | SPLINE - | '[' ']' - | TEXT - ; + BOX + | CIRCLE + | ELLIPSE + | ARC + | LINE + | ARROW + | SPLINE + | '[' ']' + | TEXT + ; label_path: - '.' LABEL - | label_path '.' LABEL - ; + '.' LABEL + | label_path '.' LABEL + ; relative_path: - corner %prec CHOP - /* give this a lower precedence than LEFT and RIGHT so that - [A: box] with .A left == [A: box] with (.A left) */ - | label_path %prec TEXT - | label_path corner - ; + corner %prec CHOP + /* give this a lower precedence than LEFT and RIGHT so that + [A: box] with .A left == [A: box] with (.A left) */ + | label_path %prec TEXT + | label_path corner + ; path: - relative_path - | '(' relative_path ',' relative_path ')' - {} - /* The rest of these rules are a compatibility sop. */ - | ORDINAL LAST object_type relative_path - | LAST object_type relative_path - | ORDINAL object_type relative_path - | LABEL relative_path - ; + relative_path + | '(' relative_path ',' relative_path ')' + {} + /* The rest of these rules are a compatibility sop. */ + | ORDINAL LAST object_type relative_path + | LAST object_type relative_path + | ORDINAL object_type relative_path + | LABEL relative_path + ; corner: - DOT_N - | DOT_E - | DOT_W - | DOT_S - | DOT_NE - | DOT_SE - | DOT_NW - | DOT_SW - | DOT_C - | DOT_START - | DOT_END - | TOP - | BOTTOM - | LEFT - | RIGHT - | UPPER LEFT - | LOWER LEFT - | UPPER RIGHT - | LOWER RIGHT - | LEFT_CORNER - | RIGHT_CORNER - | UPPER LEFT_CORNER - | LOWER LEFT_CORNER - | UPPER RIGHT_CORNER - | LOWER RIGHT_CORNER - | NORTH - | SOUTH - | EAST - | WEST - | CENTER - | START - | END - ; + DOT_N + | DOT_E + | DOT_W + | DOT_S + | DOT_NE + | DOT_SE + | DOT_NW + | DOT_SW + | DOT_C + | DOT_START + | DOT_END + | TOP + | BOTTOM + | LEFT + | RIGHT + | UPPER LEFT + | LOWER LEFT + | UPPER RIGHT + | LOWER RIGHT + | LEFT_CORNER + | RIGHT_CORNER + | UPPER LEFT_CORNER + | LOWER LEFT_CORNER + | UPPER RIGHT_CORNER + | LOWER RIGHT_CORNER + | NORTH + | SOUTH + | EAST + | WEST + | CENTER + | START + | END + ; expr: - VARIABLE - | NUMBER - | place DOT_X - | place DOT_Y - | place DOT_HT - | place DOT_WID - | place DOT_RAD - | expr '+' expr - | expr '-' expr - | expr '*' expr - | expr '/' expr - | expr '%' expr - | expr '^' expr - | '-' expr %prec '!' - | '(' any_expr ')' - | SIN '(' any_expr ')' - | COS '(' any_expr ')' - | ATAN2 '(' any_expr ',' any_expr ')' - | LOG '(' any_expr ')' - | EXP '(' any_expr ')' - | SQRT '(' any_expr ')' - | K_MAX '(' any_expr ',' any_expr ')' - | K_MIN '(' any_expr ',' any_expr ')' - | INT '(' any_expr ')' - | RAND '(' any_expr ')' - | RAND '(' ')' - | SRAND '(' any_expr ')' - | expr '<' expr - | expr LESSEQUAL expr - | expr '>' expr - | expr GREATEREQUAL expr - | expr EQUALEQUAL expr - | expr NOTEQUAL expr - | expr ANDAND expr - | expr OROR expr - | '!' expr - ; -]]) - -# Pass plenty of options, to exercise plenty of code, even if we -# don't actually check the output. But SEGV is watching us, and -# so might do dmalloc. -AT_CHECK([[bison --verbose --defines input.y]], 0, [], -[[input.y:453.11-48: warning: rule never reduced because of conflicts: path: ORDINAL LAST object_type relative_path -]]) - -AT_CLEANUP + VARIABLE + | NUMBER + | place DOT_X + | place DOT_Y + | place DOT_HT + | place DOT_WID + | place DOT_RAD + | expr '+' expr + | expr '-' expr + | expr '*' expr + | expr '/' expr + | expr '%' expr + | expr '^' expr + | '-' expr %prec '!' + | '(' any_expr ')' + | SIN '(' any_expr ')' + | COS '(' any_expr ')' + | ATAN2 '(' any_expr ',' any_expr ')' + | LOG '(' any_expr ')' + | EXP '(' any_expr ')' + | SQRT '(' any_expr ')' + | K_MAX '(' any_expr ',' any_expr ')' + | K_MIN '(' any_expr ',' any_expr ')' + | INT '(' any_expr ')' + | RAND '(' any_expr ')' + | RAND '(' ')' + | SRAND '(' any_expr ')' + | expr '<' expr + | expr LESSEQUAL expr + | expr '>' expr + | expr GREATEREQUAL expr + | expr EQUALEQUAL expr + | expr NOTEQUAL expr + | expr ANDAND expr + | expr OROR expr + | '!' expr + ; +]], + +dnl INPUT +dnl +dnl For example, in pic: +dnl +dnl .PS +dnl A: circle "A" +dnl B: A left +dnl circle "B" at B +dnl .PE +dnl +dnl Even using groff 1.19.2, the 3rd line above is a syntax error. Change +dnl "left" to "right", and it still is. However, add "upper" or "lower" before +dnl "left or "right" and it's accepted to mean ".nw", ".ne", ".sw", or ".se". +dnl (There seem to be no aliases for "north" and "south" that can stand alone +dnl without being followed by "of".) +[[VARIABLE, '=', LABEL, LEFT, DOT_X]], + +dnl BISON-STDERR +[[input.y:202.19: warning: empty rule without %empty [-Wempty-rule] +input.y:270.6: warning: empty rule without %empty [-Wempty-rule] +input.y:292.12: warning: empty rule without %empty [-Wempty-rule] +input.y:309.17: warning: empty rule without %empty [-Wempty-rule] +input.y:382.13: warning: empty rule without %empty [-Wempty-rule] +input.y:471.11-48: warning: rule useless in parser due to conflicts [-Wother] +input.y:154.1-5: warning: useless associativity for LABEL, use %precedence [-Wprecedence] +input.y:156.1-5: warning: useless associativity for VARIABLE, use %precedence [-Wprecedence] +input.y:156.1-5: warning: useless associativity for NUMBER, use %precedence [-Wprecedence] +input.y:141.1-5: warning: useless associativity for TEXT, use %precedence [-Wprecedence] +input.y:157.1-5: warning: useless associativity for ORDINAL, use %precedence [-Wprecedence] +input.y:156.1-5: warning: useless associativity for LAST, use %precedence [-Wprecedence] +input.y:153.1-5: warning: useless associativity for UP, use %precedence [-Wprecedence] +input.y:153.1-5: warning: useless associativity for DOWN, use %precedence [-Wprecedence] +input.y:159.1-5: warning: useless associativity for BOX, use %precedence [-Wprecedence] +input.y:159.1-5: warning: useless associativity for CIRCLE, use %precedence [-Wprecedence] +input.y:159.1-5: warning: useless associativity for ELLIPSE, use %precedence [-Wprecedence] +input.y:159.1-5: warning: useless associativity for ARC, use %precedence [-Wprecedence] +input.y:159.1-5: warning: useless associativity for LINE, use %precedence [-Wprecedence] +input.y:159.1-5: warning: useless associativity for ARROW, use %precedence [-Wprecedence] +input.y:159.1-5: warning: useless associativity for SPLINE, use %precedence [-Wprecedence] +input.y:162.1-5: warning: useless associativity for HEIGHT, use %precedence [-Wprecedence] +input.y:162.1-5: warning: useless associativity for RADIUS, use %precedence [-Wprecedence] +input.y:162.1-5: warning: useless associativity for WIDTH, use %precedence [-Wprecedence] +input.y:162.1-5: warning: useless associativity for DIAMETER, use %precedence [-Wprecedence] +input.y:162.1-5: warning: useless associativity for FROM, use %precedence [-Wprecedence] +input.y:162.1-5: warning: useless associativity for TO, use %precedence [-Wprecedence] +input.y:162.1-5: warning: useless associativity for AT, use %precedence [-Wprecedence] +input.y:153.1-5: warning: useless precedence and associativity for SOLID [-Wprecedence] +input.y:153.1-5: warning: useless associativity for DOTTED, use %precedence [-Wprecedence] +input.y:153.1-5: warning: useless associativity for DASHED, use %precedence [-Wprecedence] +input.y:153.1-5: warning: useless associativity for CHOP, use %precedence [-Wprecedence] +input.y:147.1-5: warning: useless precedence and associativity for LJUST [-Wprecedence] +input.y:147.1-5: warning: useless precedence and associativity for RJUST [-Wprecedence] +input.y:147.1-5: warning: useless precedence and associativity for ABOVE [-Wprecedence] +input.y:147.1-5: warning: useless precedence and associativity for BELOW [-Wprecedence] +input.y:176.1-5: warning: useless associativity for OF, use %precedence [-Wprecedence] +input.y:176.1-5: warning: useless associativity for BETWEEN, use %precedence [-Wprecedence] +input.y:177.1-5: warning: useless associativity for AND, use %precedence [-Wprecedence] +input.y:157.1-5: warning: useless associativity for HERE, use %precedence [-Wprecedence] +input.y:166.1-5: warning: useless associativity for DOT_N, use %precedence [-Wprecedence] +input.y:166.1-5: warning: useless associativity for DOT_E, use %precedence [-Wprecedence] +input.y:166.1-5: warning: useless associativity for DOT_W, use %precedence [-Wprecedence] +input.y:166.1-5: warning: useless associativity for DOT_S, use %precedence [-Wprecedence] +input.y:166.1-5: warning: useless associativity for DOT_NE, use %precedence [-Wprecedence] +input.y:166.1-5: warning: useless associativity for DOT_SE, use %precedence [-Wprecedence] +input.y:166.1-5: warning: useless associativity for DOT_NW, use %precedence [-Wprecedence] +input.y:166.1-5: warning: useless associativity for DOT_SW, use %precedence [-Wprecedence] +input.y:166.1-5: warning: useless associativity for DOT_C, use %precedence [-Wprecedence] +input.y:167.1-5: warning: useless associativity for DOT_START, use %precedence [-Wprecedence] +input.y:167.1-5: warning: useless associativity for DOT_END, use %precedence [-Wprecedence] +input.y:156.1-5: warning: useless associativity for SIN, use %precedence [-Wprecedence] +input.y:156.1-5: warning: useless associativity for COS, use %precedence [-Wprecedence] +input.y:156.1-5: warning: useless associativity for ATAN2, use %precedence [-Wprecedence] +input.y:156.1-5: warning: useless associativity for LOG, use %precedence [-Wprecedence] +input.y:156.1-5: warning: useless associativity for EXP, use %precedence [-Wprecedence] +input.y:156.1-5: warning: useless associativity for SQRT, use %precedence [-Wprecedence] +input.y:156.1-5: warning: useless associativity for K_MAX, use %precedence [-Wprecedence] +input.y:156.1-5: warning: useless associativity for K_MIN, use %precedence [-Wprecedence] +input.y:156.1-5: warning: useless associativity for INT, use %precedence [-Wprecedence] +input.y:156.1-5: warning: useless associativity for RAND, use %precedence [-Wprecedence] +input.y:156.1-5: warning: useless associativity for SRAND, use %precedence [-Wprecedence] +input.y:167.1-5: warning: useless associativity for TOP, use %precedence [-Wprecedence] +input.y:167.1-5: warning: useless associativity for BOTTOM, use %precedence [-Wprecedence] +input.y:168.1-5: warning: useless associativity for UPPER, use %precedence [-Wprecedence] +input.y:168.1-5: warning: useless associativity for LOWER, use %precedence [-Wprecedence] +input.y:167.1-5: warning: useless associativity for LEFT_CORNER, use %precedence [-Wprecedence] +input.y:167.1-5: warning: useless associativity for RIGHT_CORNER, use %precedence [-Wprecedence] +input.y:168.1-5: warning: useless associativity for NORTH, use %precedence [-Wprecedence] +input.y:168.1-5: warning: useless associativity for SOUTH, use %precedence [-Wprecedence] +input.y:168.1-5: warning: useless associativity for EAST, use %precedence [-Wprecedence] +input.y:168.1-5: warning: useless associativity for WEST, use %precedence [-Wprecedence] +input.y:168.1-5: warning: useless associativity for CENTER, use %precedence [-Wprecedence] +input.y:168.1-5: warning: useless associativity for END, use %precedence [-Wprecedence] +input.y:168.1-5: warning: useless associativity for START, use %precedence [-Wprecedence] +input.y:140.1-5: warning: useless associativity for PLOT, use %precedence [-Wprecedence] +input.y:162.1-5: warning: useless associativity for THICKNESS, use %precedence [-Wprecedence] +input.y:153.1-5: warning: useless associativity for FILL, use %precedence [-Wprecedence] +input.y:153.1-5: warning: useless precedence and associativity for COLORED [-Wprecedence] +input.y:153.1-5: warning: useless precedence and associativity for OUTLINED [-Wprecedence] +input.y:141.1-5: warning: useless associativity for SPRINTF, use %precedence [-Wprecedence] +input.y:137.1-5: warning: useless associativity for '.', use %precedence [-Wprecedence] +input.y:156.1-5: warning: useless associativity for '(', use %precedence [-Wprecedence] +input.y:157.1-5: warning: useless associativity for '`', use %precedence [-Wprecedence] +input.y:159.1-5: warning: useless associativity for '@<:@', use %precedence [-Wprecedence] +input.y:170.1-5: warning: useless associativity for ',', use %precedence [-Wprecedence] +input.y:181.1-6: warning: useless associativity for '!', use %precedence [-Wprecedence] +]], + +dnl LAST-STATE +[AT_COND_CASE([[LALR]], [[422]], [[canonical LR]], [[4833]], [[427]])], + +dnl LALR1-DIFF not used for canonical LR(1) because the diff is huge. +dnl Isocore map from LALR(1) state number to new state number plus descriptions +dnl of any change in the actions resulting in a change in accepted language: +dnl - 102 -> 423: reduce -> shift on LEFT and RIGHT +dnl - 237 -> 425 +dnl - 266 -> 424 +dnl - 339 -> 426 +dnl - 383 -> 427 +[AT_COND_CASE([[LALR]], [], +[[@@ -1223,7 +1223,7 @@ + text_expr go to state 112 + text go to state 113 + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -1377,7 +1377,7 @@ + '!' shift, and go to state 94 + + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -1854,7 +1854,7 @@ + + text go to state 162 + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -2047,7 +2047,7 @@ + text_expr go to state 112 + text go to state 113 + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -2571,7 +2571,7 @@ + position_not_place go to state 99 + expr_pair go to state 191 + place go to state 101 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -2732,7 +2732,7 @@ + text_expr go to state 112 + text go to state 113 + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -2875,7 +2875,7 @@ + '!' shift, and go to state 94 + + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -3018,7 +3018,7 @@ + '!' shift, and go to state 94 + + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -3256,7 +3256,7 @@ + + State 102 + +- 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, '(', '`', ',', '>', '+', '-', '!', ';', '}', '@:>@', ')'] ++ 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, '(', '`', '+', '-', '!', ';', '}', '@:>@'] + 147 | label . corner + 153 label: label . '.' LABEL + 180 corner: . DOT_N +@@ -3645,7 +3645,7 @@ + text_expr go to state 112 + text go to state 113 + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -3804,7 +3804,7 @@ + text_expr go to state 239 + text go to state 113 + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -4481,7 +4481,7 @@ + $default reduce using rule 89 (object_spec) + + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -4673,7 +4673,7 @@ + $default reduce using rule 91 (object_spec) + + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -4867,7 +4867,7 @@ + $default reduce using rule 95 (object_spec) + + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -5065,7 +5065,7 @@ + $default reduce using rule 93 (object_spec) + + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -5260,7 +5260,7 @@ + '!' shift, and go to state 94 + + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -5403,7 +5403,7 @@ + '!' shift, and go to state 94 + + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -5546,7 +5546,7 @@ + '!' shift, and go to state 94 + + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -5689,7 +5689,7 @@ + '!' shift, and go to state 94 + + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -6475,7 +6475,7 @@ + + expr_pair go to state 280 + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -6633,7 +6633,7 @@ + $default reduce using rule 105 (object_spec) + + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -6825,7 +6825,7 @@ + $default reduce using rule 107 (object_spec) + + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -7017,7 +7017,7 @@ + $default reduce using rule 114 (object_spec) + + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -7264,7 +7264,7 @@ + '!' shift, and go to state 94 + + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -7408,7 +7408,7 @@ + $default reduce using rule 109 (object_spec) + + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -7819,12 +7819,12 @@ + position_not_place go to state 296 + expr_pair go to state 100 + place go to state 297 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 + corner go to state 106 +- expr go to state 266 ++ expr go to state 424 + + + State 165 +@@ -7987,7 +7987,7 @@ + text_expr go to state 112 + text go to state 113 + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -8172,7 +8172,7 @@ + text_expr go to state 112 + text go to state 113 + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -8333,7 +8333,7 @@ + text_expr go to state 112 + text go to state 113 + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -8494,7 +8494,7 @@ + text_expr go to state 112 + text go to state 113 + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -8655,7 +8655,7 @@ + text_expr go to state 112 + text go to state 113 + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -8816,7 +8816,7 @@ + text_expr go to state 112 + text go to state 113 + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -8977,7 +8977,7 @@ + text_expr go to state 112 + text go to state 113 + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -9138,7 +9138,7 @@ + text_expr go to state 112 + text go to state 113 + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -9299,7 +9299,7 @@ + text_expr go to state 112 + text go to state 113 + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -9460,7 +9460,7 @@ + text_expr go to state 112 + text go to state 113 + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -9623,7 +9623,7 @@ + text_expr go to state 112 + text go to state 113 + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -9784,7 +9784,7 @@ + text_expr go to state 112 + text go to state 113 + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -9921,7 +9921,7 @@ + + $default reduce using rule 47 (any_expr) + +- between go to state 237 ++ between go to state 425 + + + State 193 +@@ -10152,7 +10152,7 @@ + + expr_pair go to state 317 + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -10298,7 +10298,7 @@ + + expr_pair go to state 318 + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -10622,7 +10622,7 @@ + '!' shift, and go to state 94 + + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -10765,7 +10765,7 @@ + '!' shift, and go to state 94 + + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -10908,7 +10908,7 @@ + '!' shift, and go to state 94 + + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -11051,7 +11051,7 @@ + '!' shift, and go to state 94 + + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -11194,7 +11194,7 @@ + '!' shift, and go to state 94 + + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -11337,7 +11337,7 @@ + '!' shift, and go to state 94 + + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -11480,7 +11480,7 @@ + '!' shift, and go to state 94 + + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -11637,7 +11637,7 @@ + position_not_place go to state 99 + expr_pair go to state 100 + place go to state 101 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -11780,7 +11780,7 @@ + '!' shift, and go to state 94 + + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -11923,7 +11923,7 @@ + '!' shift, and go to state 94 + + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -12066,7 +12066,7 @@ + '!' shift, and go to state 94 + + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -12209,7 +12209,7 @@ + '!' shift, and go to state 94 + + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -12352,7 +12352,7 @@ + '!' shift, and go to state 94 + + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -12495,7 +12495,7 @@ + '!' shift, and go to state 94 + + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -12638,7 +12638,7 @@ + '!' shift, and go to state 94 + + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -12794,12 +12794,12 @@ + position_not_place go to state 99 + expr_pair go to state 100 + place go to state 101 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 + corner go to state 106 +- expr go to state 266 ++ expr go to state 424 + + + State 238 +@@ -12937,7 +12937,7 @@ + '!' shift, and go to state 94 + + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -13160,7 +13160,7 @@ + text_expr go to state 342 + text go to state 113 + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -13319,7 +13319,7 @@ + text_expr go to state 344 + text go to state 113 + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -13502,7 +13502,7 @@ + text_expr go to state 348 + text go to state 113 + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -13661,7 +13661,7 @@ + text_expr go to state 350 + text go to state 113 + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -13804,7 +13804,7 @@ + '!' shift, and go to state 94 + + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -14747,7 +14747,7 @@ + position_not_place go to state 99 + expr_pair go to state 191 + place go to state 101 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -15074,7 +15074,7 @@ + text go to state 113 + expr_pair go to state 365 + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -15693,12 +15693,12 @@ + position_not_place go to state 99 + expr_pair go to state 100 + place go to state 101 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 + corner go to state 106 +- expr go to state 266 ++ expr go to state 424 + + + State 315 +@@ -16124,7 +16124,7 @@ + + $default reduce using rule 239 (expr) + +- between go to state 237 ++ between go to state 425 + + Conflict between rule 239 and token OF resolved as shift ('<' < OF). + Conflict between rule 239 and token BETWEEN resolved as shift ('<' < BETWEEN). +@@ -17234,7 +17234,7 @@ + text_expr go to state 112 + text go to state 113 + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -17416,7 +17416,7 @@ + text_expr go to state 112 + text go to state 113 + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -17577,7 +17577,7 @@ + text_expr go to state 112 + text go to state 113 + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -17772,12 +17772,12 @@ + position_not_place go to state 99 + expr_pair go to state 100 + place go to state 101 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 + corner go to state 106 +- expr go to state 266 ++ expr go to state 424 + + + State 383 +@@ -18071,7 +18071,7 @@ + '!' shift, and go to state 94 + + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -18221,7 +18221,7 @@ + '!' shift, and go to state 94 + + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -18830,7 +18830,7 @@ + '!' shift, and go to state 94 + + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -18987,7 +18987,7 @@ + '!' shift, and go to state 94 + + place go to state 114 +- label go to state 102 ++ label go to state 423 + ordinal go to state 103 + optional_ordinal_last go to state 104 + nth_primitive go to state 105 +@@ -19089,3 +19089,440 @@ + 29 placeless_element: FOR VARIABLE '=' expr TO expr optional_by DO $@6 DELIMITED . + + $default reduce using rule 29 (placeless_element) ++ ++ ++State 423 ++ ++ 146 place: label . [$end, AND, DOT_X, DOT_Y, DOT_HT, DOT_WID, DOT_RAD, ',', '>', '+', '-', ';', '}', '@:>@', ')'] ++ 147 | label . corner ++ 153 label: label . '.' LABEL ++ 180 corner: . DOT_N ++ 181 | . DOT_E ++ 182 | . DOT_W ++ 183 | . DOT_S ++ 184 | . DOT_NE ++ 185 | . DOT_SE ++ 186 | . DOT_NW ++ 187 | . DOT_SW ++ 188 | . DOT_C ++ 189 | . DOT_START ++ 190 | . DOT_END ++ 191 | . TOP ++ 192 | . BOTTOM ++ 193 | . LEFT ++ 194 | . RIGHT ++ 195 | . UPPER LEFT ++ 196 | . LOWER LEFT ++ 197 | . UPPER RIGHT ++ 198 | . LOWER RIGHT ++ 199 | . LEFT_CORNER ++ 200 | . RIGHT_CORNER ++ 201 | . UPPER LEFT_CORNER ++ 202 | . LOWER LEFT_CORNER ++ 203 | . UPPER RIGHT_CORNER ++ 204 | . LOWER RIGHT_CORNER ++ 205 | . NORTH ++ 206 | . SOUTH ++ 207 | . EAST ++ 208 | . WEST ++ 209 | . CENTER ++ 210 | . START ++ 211 | . END ++ ++ LEFT shift, and go to state 53 ++ RIGHT shift, and go to state 54 ++ DOT_N shift, and go to state 56 ++ DOT_E shift, and go to state 57 ++ DOT_W shift, and go to state 58 ++ DOT_S shift, and go to state 59 ++ DOT_NE shift, and go to state 60 ++ DOT_SE shift, and go to state 61 ++ DOT_NW shift, and go to state 62 ++ DOT_SW shift, and go to state 63 ++ DOT_C shift, and go to state 64 ++ DOT_START shift, and go to state 65 ++ DOT_END shift, and go to state 66 ++ TOP shift, and go to state 78 ++ BOTTOM shift, and go to state 79 ++ UPPER shift, and go to state 80 ++ LOWER shift, and go to state 81 ++ LEFT_CORNER shift, and go to state 82 ++ RIGHT_CORNER shift, and go to state 83 ++ NORTH shift, and go to state 84 ++ SOUTH shift, and go to state 85 ++ EAST shift, and go to state 86 ++ WEST shift, and go to state 87 ++ CENTER shift, and go to state 88 ++ END shift, and go to state 89 ++ START shift, and go to state 90 ++ '.' shift, and go to state 204 ++ ++ $default reduce using rule 146 (place) ++ ++ corner go to state 205 ++ ++ ++State 424 ++ ++ 140 position_not_place: expr . between position AND position ++ 141 | expr . '<' position ',' position '>' ++ 142 between: . BETWEEN ++ 143 | . OF THE WAY BETWEEN ++ 144 expr_pair: expr . ',' expr ++ 219 expr: expr . '+' expr ++ 220 | expr . '-' expr ++ 221 | expr . '*' expr ++ 222 | expr . '/' expr ++ 223 | expr . '%' expr ++ 224 | expr . '^' expr ++ 239 | expr . '<' expr ++ 240 | expr . LESSEQUAL expr ++ 241 | expr . '>' expr ++ 242 | expr . GREATEREQUAL expr ++ 243 | expr . EQUALEQUAL expr ++ 244 | expr . NOTEQUAL expr ++ 245 | expr . ANDAND expr ++ 246 | expr . OROR expr ++ ++ OF shift, and go to state 220 ++ BETWEEN shift, and go to state 221 ++ ANDAND shift, and go to state 222 ++ OROR shift, and go to state 223 ++ NOTEQUAL shift, and go to state 224 ++ EQUALEQUAL shift, and go to state 225 ++ LESSEQUAL shift, and go to state 226 ++ GREATEREQUAL shift, and go to state 227 ++ ',' shift, and go to state 228 ++ '<' shift, and go to state 229 ++ '>' shift, and go to state 230 ++ '+' shift, and go to state 231 ++ '-' shift, and go to state 232 ++ '*' shift, and go to state 233 ++ '/' shift, and go to state 234 ++ '%' shift, and go to state 235 ++ '^' shift, and go to state 236 ++ ++ between go to state 425 ++ ++ ++State 425 ++ ++ 134 position: . position_not_place ++ 135 | . place ++ 136 position_not_place: . expr_pair ++ 137 | . position '+' expr_pair ++ 138 | . position '-' expr_pair ++ 139 | . '(' position ',' position ')' ++ 140 | . expr between position AND position ++ 140 | expr between . position AND position ++ 141 | . expr '<' position ',' position '>' ++ 144 expr_pair: . expr ',' expr ++ 145 | . '(' expr_pair ')' ++ 146 place: . label ++ 147 | . label corner ++ 148 | . corner label ++ 149 | . corner OF label ++ 150 | . HERE ++ 151 label: . LABEL ++ 152 | . nth_primitive ++ 153 | . label '.' LABEL ++ 154 ordinal: . ORDINAL ++ 155 | . '`' any_expr TH ++ 156 optional_ordinal_last: . LAST ++ 157 | . ordinal LAST ++ 158 nth_primitive: . ordinal object_type ++ 159 | . optional_ordinal_last object_type ++ 180 corner: . DOT_N ++ 181 | . DOT_E ++ 182 | . DOT_W ++ 183 | . DOT_S ++ 184 | . DOT_NE ++ 185 | . DOT_SE ++ 186 | . DOT_NW ++ 187 | . DOT_SW ++ 188 | . DOT_C ++ 189 | . DOT_START ++ 190 | . DOT_END ++ 191 | . TOP ++ 192 | . BOTTOM ++ 193 | . LEFT ++ 194 | . RIGHT ++ 195 | . UPPER LEFT ++ 196 | . LOWER LEFT ++ 197 | . UPPER RIGHT ++ 198 | . LOWER RIGHT ++ 199 | . LEFT_CORNER ++ 200 | . RIGHT_CORNER ++ 201 | . UPPER LEFT_CORNER ++ 202 | . LOWER LEFT_CORNER ++ 203 | . UPPER RIGHT_CORNER ++ 204 | . LOWER RIGHT_CORNER ++ 205 | . NORTH ++ 206 | . SOUTH ++ 207 | . EAST ++ 208 | . WEST ++ 209 | . CENTER ++ 210 | . START ++ 211 | . END ++ 212 expr: . VARIABLE ++ 213 | . NUMBER ++ 214 | . place DOT_X ++ 215 | . place DOT_Y ++ 216 | . place DOT_HT ++ 217 | . place DOT_WID ++ 218 | . place DOT_RAD ++ 219 | . expr '+' expr ++ 220 | . expr '-' expr ++ 221 | . expr '*' expr ++ 222 | . expr '/' expr ++ 223 | . expr '%' expr ++ 224 | . expr '^' expr ++ 225 | . '-' expr ++ 226 | . '(' any_expr ')' ++ 227 | . SIN '(' any_expr ')' ++ 228 | . COS '(' any_expr ')' ++ 229 | . ATAN2 '(' any_expr ',' any_expr ')' ++ 230 | . LOG '(' any_expr ')' ++ 231 | . EXP '(' any_expr ')' ++ 232 | . SQRT '(' any_expr ')' ++ 233 | . K_MAX '(' any_expr ',' any_expr ')' ++ 234 | . K_MIN '(' any_expr ',' any_expr ')' ++ 235 | . INT '(' any_expr ')' ++ 236 | . RAND '(' any_expr ')' ++ 237 | . RAND '(' ')' ++ 238 | . SRAND '(' any_expr ')' ++ 239 | . expr '<' expr ++ 240 | . expr LESSEQUAL expr ++ 241 | . expr '>' expr ++ 242 | . expr GREATEREQUAL expr ++ 243 | . expr EQUALEQUAL expr ++ 244 | . expr NOTEQUAL expr ++ 245 | . expr ANDAND expr ++ 246 | . expr OROR expr ++ 247 | . '!' expr ++ ++ LABEL shift, and go to state 48 ++ VARIABLE shift, and go to state 49 ++ NUMBER shift, and go to state 50 ++ ORDINAL shift, and go to state 51 ++ LAST shift, and go to state 52 ++ LEFT shift, and go to state 53 ++ RIGHT shift, and go to state 54 ++ HERE shift, and go to state 55 ++ DOT_N shift, and go to state 56 ++ DOT_E shift, and go to state 57 ++ DOT_W shift, and go to state 58 ++ DOT_S shift, and go to state 59 ++ DOT_NE shift, and go to state 60 ++ DOT_SE shift, and go to state 61 ++ DOT_NW shift, and go to state 62 ++ DOT_SW shift, and go to state 63 ++ DOT_C shift, and go to state 64 ++ DOT_START shift, and go to state 65 ++ DOT_END shift, and go to state 66 ++ SIN shift, and go to state 67 ++ COS shift, and go to state 68 ++ ATAN2 shift, and go to state 69 ++ LOG shift, and go to state 70 ++ EXP shift, and go to state 71 ++ SQRT shift, and go to state 72 ++ K_MAX shift, and go to state 73 ++ K_MIN shift, and go to state 74 ++ INT shift, and go to state 75 ++ RAND shift, and go to state 76 ++ SRAND shift, and go to state 77 ++ TOP shift, and go to state 78 ++ BOTTOM shift, and go to state 79 ++ UPPER shift, and go to state 80 ++ LOWER shift, and go to state 81 ++ LEFT_CORNER shift, and go to state 82 ++ RIGHT_CORNER shift, and go to state 83 ++ NORTH shift, and go to state 84 ++ SOUTH shift, and go to state 85 ++ EAST shift, and go to state 86 ++ WEST shift, and go to state 87 ++ CENTER shift, and go to state 88 ++ END shift, and go to state 89 ++ START shift, and go to state 90 ++ '(' shift, and go to state 91 ++ '`' shift, and go to state 92 ++ '-' shift, and go to state 93 ++ '!' shift, and go to state 94 ++ ++ position go to state 426 ++ position_not_place go to state 99 ++ expr_pair go to state 100 ++ place go to state 101 ++ label go to state 423 ++ ordinal go to state 103 ++ optional_ordinal_last go to state 104 ++ nth_primitive go to state 105 ++ corner go to state 106 ++ expr go to state 424 ++ ++ ++State 426 ++ ++ 137 position_not_place: position . '+' expr_pair ++ 138 | position . '-' expr_pair ++ 140 | expr between position . AND position ++ ++ AND shift, and go to state 427 ++ '+' shift, and go to state 197 ++ '-' shift, and go to state 198 ++ ++ ++State 427 ++ ++ 134 position: . position_not_place ++ 135 | . place ++ 136 position_not_place: . expr_pair ++ 137 | . position '+' expr_pair ++ 138 | . position '-' expr_pair ++ 139 | . '(' position ',' position ')' ++ 140 | . expr between position AND position ++ 140 | expr between position AND . position ++ 141 | . expr '<' position ',' position '>' ++ 144 expr_pair: . expr ',' expr ++ 145 | . '(' expr_pair ')' ++ 146 place: . label ++ 147 | . label corner ++ 148 | . corner label ++ 149 | . corner OF label ++ 150 | . HERE ++ 151 label: . LABEL ++ 152 | . nth_primitive ++ 153 | . label '.' LABEL ++ 154 ordinal: . ORDINAL ++ 155 | . '`' any_expr TH ++ 156 optional_ordinal_last: . LAST ++ 157 | . ordinal LAST ++ 158 nth_primitive: . ordinal object_type ++ 159 | . optional_ordinal_last object_type ++ 180 corner: . DOT_N ++ 181 | . DOT_E ++ 182 | . DOT_W ++ 183 | . DOT_S ++ 184 | . DOT_NE ++ 185 | . DOT_SE ++ 186 | . DOT_NW ++ 187 | . DOT_SW ++ 188 | . DOT_C ++ 189 | . DOT_START ++ 190 | . DOT_END ++ 191 | . TOP ++ 192 | . BOTTOM ++ 193 | . LEFT ++ 194 | . RIGHT ++ 195 | . UPPER LEFT ++ 196 | . LOWER LEFT ++ 197 | . UPPER RIGHT ++ 198 | . LOWER RIGHT ++ 199 | . LEFT_CORNER ++ 200 | . RIGHT_CORNER ++ 201 | . UPPER LEFT_CORNER ++ 202 | . LOWER LEFT_CORNER ++ 203 | . UPPER RIGHT_CORNER ++ 204 | . LOWER RIGHT_CORNER ++ 205 | . NORTH ++ 206 | . SOUTH ++ 207 | . EAST ++ 208 | . WEST ++ 209 | . CENTER ++ 210 | . START ++ 211 | . END ++ 212 expr: . VARIABLE ++ 213 | . NUMBER ++ 214 | . place DOT_X ++ 215 | . place DOT_Y ++ 216 | . place DOT_HT ++ 217 | . place DOT_WID ++ 218 | . place DOT_RAD ++ 219 | . expr '+' expr ++ 220 | . expr '-' expr ++ 221 | . expr '*' expr ++ 222 | . expr '/' expr ++ 223 | . expr '%' expr ++ 224 | . expr '^' expr ++ 225 | . '-' expr ++ 226 | . '(' any_expr ')' ++ 227 | . SIN '(' any_expr ')' ++ 228 | . COS '(' any_expr ')' ++ 229 | . ATAN2 '(' any_expr ',' any_expr ')' ++ 230 | . LOG '(' any_expr ')' ++ 231 | . EXP '(' any_expr ')' ++ 232 | . SQRT '(' any_expr ')' ++ 233 | . K_MAX '(' any_expr ',' any_expr ')' ++ 234 | . K_MIN '(' any_expr ',' any_expr ')' ++ 235 | . INT '(' any_expr ')' ++ 236 | . RAND '(' any_expr ')' ++ 237 | . RAND '(' ')' ++ 238 | . SRAND '(' any_expr ')' ++ 239 | . expr '<' expr ++ 240 | . expr LESSEQUAL expr ++ 241 | . expr '>' expr ++ 242 | . expr GREATEREQUAL expr ++ 243 | . expr EQUALEQUAL expr ++ 244 | . expr NOTEQUAL expr ++ 245 | . expr ANDAND expr ++ 246 | . expr OROR expr ++ 247 | . '!' expr ++ ++ LABEL shift, and go to state 48 ++ VARIABLE shift, and go to state 49 ++ NUMBER shift, and go to state 50 ++ ORDINAL shift, and go to state 51 ++ LAST shift, and go to state 52 ++ LEFT shift, and go to state 53 ++ RIGHT shift, and go to state 54 ++ HERE shift, and go to state 55 ++ DOT_N shift, and go to state 56 ++ DOT_E shift, and go to state 57 ++ DOT_W shift, and go to state 58 ++ DOT_S shift, and go to state 59 ++ DOT_NE shift, and go to state 60 ++ DOT_SE shift, and go to state 61 ++ DOT_NW shift, and go to state 62 ++ DOT_SW shift, and go to state 63 ++ DOT_C shift, and go to state 64 ++ DOT_START shift, and go to state 65 ++ DOT_END shift, and go to state 66 ++ SIN shift, and go to state 67 ++ COS shift, and go to state 68 ++ ATAN2 shift, and go to state 69 ++ LOG shift, and go to state 70 ++ EXP shift, and go to state 71 ++ SQRT shift, and go to state 72 ++ K_MAX shift, and go to state 73 ++ K_MIN shift, and go to state 74 ++ INT shift, and go to state 75 ++ RAND shift, and go to state 76 ++ SRAND shift, and go to state 77 ++ TOP shift, and go to state 78 ++ BOTTOM shift, and go to state 79 ++ UPPER shift, and go to state 80 ++ LOWER shift, and go to state 81 ++ LEFT_CORNER shift, and go to state 82 ++ RIGHT_CORNER shift, and go to state 83 ++ NORTH shift, and go to state 84 ++ SOUTH shift, and go to state 85 ++ EAST shift, and go to state 86 ++ WEST shift, and go to state 87 ++ CENTER shift, and go to state 88 ++ END shift, and go to state 89 ++ START shift, and go to state 90 ++ '(' shift, and go to state 91 ++ '`' shift, and go to state 92 ++ '-' shift, and go to state 93 ++ '!' shift, and go to state 94 ++ ++ position go to state 402 ++ position_not_place go to state 99 ++ expr_pair go to state 100 ++ place go to state 101 ++ label go to state 423 ++ ordinal go to state 103 ++ optional_ordinal_last go to state 104 ++ nth_primitive go to state 105 ++ corner go to state 106 ++ expr go to state 424 +]])], + +dnl OTHER-CHECKS +[], + +dnl PARSER-EXIT-VALUE, PARSER-STDOUT, PARSER-STDERR +[AT_COND_CASE([[LALR]], [[1]], [[0]])], +[], +[AT_COND_CASE([[LALR]], +[[syntax error, unexpected LEFT +]])])