3119 lines
86 KiB
Text
3119 lines
86 KiB
Text
# Exercising Bison on actual grammars. -*- Autotest -*-
|
|
|
|
# Copyright (C) 1989-1992, 2000-2005, 2007, 2009-2012 Free Software
|
|
# Foundation, Inc.
|
|
|
|
# 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 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, see <http://www.gnu.org/licenses/>.
|
|
|
|
AT_BANNER([[Existing Grammars.]])
|
|
|
|
# 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.
|
|
#
|
|
# There are 65 SR conflicts. Bison was once wrong, due to an incorrect
|
|
# computation of nullable. It reported 485 SR conflicts!
|
|
|
|
AT_TEST_EXISTING_GRAMMAR([[GNU AWK 3.1.0 Grammar]],
|
|
[[%error-verbose
|
|
|
|
%token FUNC_CALL NAME REGEXP
|
|
%token ERROR
|
|
%token YNUMBER YSTRING
|
|
%token RELOP APPEND_OP
|
|
%token ASSIGNOP MATCHOP NEWLINE CONCAT_OP
|
|
%token LEX_BEGIN LEX_END LEX_IF LEX_ELSE LEX_RETURN LEX_DELETE
|
|
%token LEX_WHILE LEX_DO LEX_FOR LEX_BREAK LEX_CONTINUE
|
|
%token LEX_PRINT LEX_PRINTF LEX_NEXT LEX_EXIT LEX_FUNCTION
|
|
%token LEX_GETLINE LEX_NEXTFILE
|
|
%token LEX_IN
|
|
%token LEX_AND LEX_OR INCREMENT DECREMENT
|
|
%token LEX_BUILTIN LEX_LENGTH
|
|
|
|
/* Lowest to highest */
|
|
%right ASSIGNOP
|
|
%right '?' ':'
|
|
%left LEX_OR
|
|
%left LEX_AND
|
|
%left LEX_GETLINE
|
|
%nonassoc LEX_IN
|
|
%left FUNC_CALL LEX_BUILTIN LEX_LENGTH
|
|
%nonassoc ','
|
|
%nonassoc MATCHOP
|
|
%nonassoc RELOP '<' '>' '|' APPEND_OP TWOWAYIO
|
|
%left CONCAT_OP
|
|
%left YSTRING YNUMBER
|
|
%left '+' '-'
|
|
%left '*' '/' '%'
|
|
%right '!' UNARY
|
|
%right '^'
|
|
%left INCREMENT DECREMENT
|
|
%left '$'
|
|
%left '(' ')'
|
|
]],
|
|
[[
|
|
start
|
|
: opt_nls program opt_nls
|
|
;
|
|
|
|
program
|
|
: 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
|
|
;
|
|
|
|
func_name
|
|
: NAME
|
|
| FUNC_CALL
|
|
| lex_builtin
|
|
;
|
|
|
|
lex_builtin
|
|
: LEX_BUILTIN
|
|
| LEX_LENGTH
|
|
;
|
|
|
|
function_prologue
|
|
: 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
|
|
;
|
|
|
|
pattern
|
|
: 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 '/'
|
|
;
|
|
|
|
action
|
|
: 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_term
|
|
: 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
|
|
;
|
|
|
|
print
|
|
: 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
|
|
;
|
|
|
|
nls
|
|
: NEWLINE
|
|
| nls NEWLINE
|
|
;
|
|
|
|
opt_nls
|
|
: /* empty */
|
|
| nls
|
|
;
|
|
|
|
input_redir
|
|
: /* empty */
|
|
| '<' simp_exp
|
|
;
|
|
|
|
output_redir
|
|
: /* empty */
|
|
| '>' exp
|
|
| APPEND_OP exp
|
|
| '|' exp
|
|
| TWOWAYIO exp
|
|
;
|
|
|
|
opt_param_list
|
|
: /* empty */
|
|
| param_list
|
|
;
|
|
|
|
param_list
|
|
: NAME
|
|
| param_list comma NAME
|
|
| error
|
|
| param_list error
|
|
| param_list comma error
|
|
;
|
|
|
|
/* optional expression, as in for loop */
|
|
opt_exp
|
|
: /* empty */
|
|
| exp
|
|
;
|
|
|
|
opt_rexpression_list
|
|
: /* empty */
|
|
| rexpression_list
|
|
;
|
|
|
|
rexpression_list
|
|
: rexp
|
|
| rexpression_list comma rexp
|
|
| error
|
|
| rexpression_list error
|
|
| rexpression_list error rexp
|
|
| rexpression_list comma error
|
|
;
|
|
|
|
opt_expression_list
|
|
: /* empty */
|
|
| expression_list
|
|
;
|
|
|
|
expression_list
|
|
: 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
|
|
;
|
|
|
|
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
|
|
;
|
|
|
|
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
|
|
: '!' 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
|
|
;
|
|
|
|
variable
|
|
: NAME
|
|
| NAME '[' expression_list ']'
|
|
| '$' non_post_simp_exp
|
|
;
|
|
|
|
l_brace
|
|
: '{' opt_nls
|
|
;
|
|
|
|
r_brace
|
|
: '}' opt_nls
|
|
;
|
|
|
|
r_paren
|
|
: ')'
|
|
;
|
|
|
|
opt_semi
|
|
: /* empty */
|
|
| semi
|
|
;
|
|
|
|
semi
|
|
: ';'
|
|
;
|
|
|
|
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
|
|
[AT_COND_CASE([[canonical LR]],
|
|
[[input.y: conflicts: 265 shift/reduce]],
|
|
[[input.y: conflicts: 65 shift/reduce]])[
|
|
]],
|
|
|
|
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. ##
|
|
## ----------------- ##
|
|
|
|
# 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_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
|
|
|
|
%token HIDENTIFIER
|
|
%token HBOOLEANKONST HINTEGERKONST HCHARACTERKONST
|
|
%token HREALKONST
|
|
%token HTEXTKONST
|
|
|
|
|
|
%right HASSIGN
|
|
%left HORELSE
|
|
%left HANDTHEN
|
|
%left HEQV
|
|
%left HIMP
|
|
%left HOR
|
|
%left HAND
|
|
|
|
%left HNOT
|
|
|
|
%left HVALRELOPERATOR HREFRELOPERATOR HOBJRELOPERATOR
|
|
|
|
%left HCONC
|
|
|
|
%left HTERMOPERATOR
|
|
%left UNEAR
|
|
%left HFACTOROPERATOR
|
|
%left HPRIMARYOPERATOR
|
|
|
|
%left HQUA
|
|
|
|
%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
|
|
;
|
|
/* GRAMATIKK FOR TYPER */
|
|
NO_TYPE : /*EMPT*/
|
|
;
|
|
MBEE_TYPE : NO_TYPE
|
|
| TYPE
|
|
;
|
|
TYPE : HREF HBEGPAR
|
|
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
|
|
;
|
|
FOR_LIST : FOR_LIST_ELEMENT
|
|
| FOR_LIST_ELEMENT
|
|
HPAREXPSEPARATOR
|
|
FOR_LIST
|
|
;
|
|
FOR_LIST_ELEMENT: EXPRESSION
|
|
MBEE_F_L_EL_R_PT
|
|
;
|
|
MBEE_F_L_EL_R_PT: /*EMPT*/
|
|
| HWHILE
|
|
EXPRESSION
|
|
| HSTEP
|
|
EXPRESSION
|
|
HUNTIL
|
|
EXPRESSION
|
|
;
|
|
GOTO : HGO
|
|
HTO
|
|
| HGOTO
|
|
;
|
|
CONN_STATE_R_PT : WHEN_CLAUSE_LIST
|
|
| HDO {}
|
|
BLOCK
|
|
;
|
|
WHEN_CLAUSE_LIST: HWHEN
|
|
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
|
|
;
|
|
/* 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*/
|
|
;
|
|
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
|
|
;
|
|
BLOCK : DECLSTATEMENT
|
|
| 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
|
|
;
|
|
/* 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
|
|
;
|
|
ARRAY_SEGMENT : ARRAY_SEGMENT_EL {}
|
|
|
|
| ARRAY_SEGMENT_EL
|
|
HPAREXPSEPARATOR
|
|
ARRAY_SEGMENT
|
|
;
|
|
ARRAY_SEGMENT_EL: HIDENTIFIER
|
|
;
|
|
BAUND_PAIR_LIST : BAUND_PAIR
|
|
| BAUND_PAIR
|
|
HPAREXPSEPARATOR
|
|
BAUND_PAIR_LIST
|
|
;
|
|
BAUND_PAIR : EXPRESSION
|
|
HLABELSEPARATOR
|
|
EXPRESSION
|
|
;
|
|
SWITCH_LIST : EXPRESSION
|
|
| EXPRESSION
|
|
HPAREXPSEPARATOR
|
|
SWITCH_LIST
|
|
;
|
|
HEADING : MBEE_FMAL_PAR_P HSTATEMENTSEPARATOR {}
|
|
MBEE_MODE_PART {}
|
|
MBEE_SPEC_PART {}
|
|
MBEE_PROT_PART {}
|
|
MBEE_VIRT_PART
|
|
;
|
|
MBEE_FMAL_PAR_P : /*EMPT*/
|
|
| FMAL_PAR_PART
|
|
;
|
|
FMAL_PAR_PART : HBEGPAR NO_TYPE
|
|
MBEE_LISTV HENDPAR
|
|
;
|
|
MBEE_LISTV : /*EMPT*/
|
|
| LISTV
|
|
;
|
|
LISTV : HIDENTIFIER
|
|
| FPP_CATEG HDOTDOTDOT
|
|
| HIDENTIFIER {}
|
|
HPAREXPSEPARATOR LISTV
|
|
| FPP_SPEC
|
|
| FPP_SPEC
|
|
HPAREXPSEPARATOR LISTV
|
|
;
|
|
FPP_HEADING : HBEGPAR NO_TYPE
|
|
FPP_MBEE_LISTV HENDPAR
|
|
;
|
|
FPP_MBEE_LISTV : /*EMPT*/
|
|
| 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 : HNAME HLABELSEPARATOR
|
|
| 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
|
|
;
|
|
MBEE_MODE_PART : /*EMPT*/
|
|
| 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
|
|
;
|
|
NAME_PART : HNAME {}
|
|
IDENTIFIER_LISTV
|
|
HSTATEMENTSEPARATOR
|
|
;
|
|
VAR_PART : HVAR {}
|
|
IDENTIFIER_LISTV
|
|
HSTATEMENTSEPARATOR
|
|
;
|
|
VALUE_PART : HVALUE {}
|
|
IDENTIFIER_LISTV HSTATEMENTSEPARATOR
|
|
;
|
|
MBEE_SPEC_PART : /*EMPT*/
|
|
| 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
|
|
;
|
|
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_PROT_PART : /*EMPT*/
|
|
| PROTECTION_PART
|
|
;
|
|
PROTECTION_PART : PROT_SPECIFIER IDENTIFIER_LIST
|
|
HSTATEMENTSEPARATOR
|
|
| PROTECTION_PART PROT_SPECIFIER
|
|
IDENTIFIER_LIST HSTATEMENTSEPARATOR
|
|
;
|
|
PROT_SPECIFIER : HHIDDEN
|
|
| HPROTECTED
|
|
| HHIDDEN
|
|
HPROTECTED
|
|
| HPROTECTED
|
|
HHIDDEN
|
|
;
|
|
MBEE_VIRT_PART : /*EMPT*/
|
|
| VIRTUAL_PART
|
|
;
|
|
VIRTUAL_PART : HVIRTUAL
|
|
HLABELSEPARATOR
|
|
MBEE_SPEC_PART
|
|
;
|
|
IDENTIFIER_LIST : HIDENTIFIER
|
|
| IDENTIFIER_LIST HPAREXPSEPARATOR
|
|
HIDENTIFIER
|
|
;
|
|
IDENTIFIER_LISTC: HIDENTIFIER
|
|
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
|
|
;
|
|
ARG_R_PT : /*EMPTY*/
|
|
| HBEGPAR
|
|
ARGUMENT_LIST HENDPAR
|
|
;
|
|
MBEE_ARG_R_PT : /*EMPTY*/
|
|
| HBEGPAR
|
|
ARGUMENT_LIST HENDPAR
|
|
;
|
|
ARGUMENT_LIST : EXPRESSION
|
|
| EXPRESSION
|
|
HPAREXPSEPARATOR
|
|
ARGUMENT_LIST
|
|
;
|
|
]],
|
|
|
|
dnl INPUT
|
|
[[]],
|
|
|
|
dnl BISON-STDERR
|
|
[AT_COND_CASE([[canonical LR]],
|
|
[[input.y: conflicts: 1876 shift/reduce, 144 reduce/reduce]],
|
|
[[input.y: conflicts: 78 shift/reduce, 10 reduce/reduce]])[
|
|
]],
|
|
|
|
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
|
|
State 206 conflicts: 1 shift/reduce
|
|
State 240 conflicts: 1 shift/reduce
|
|
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
|
|
]])])])
|
|
|
|
## -------------------------------- ##
|
|
## GNU pic (Groff 1.18.1) Grammar. ##
|
|
## -------------------------------- ##
|
|
|
|
# GNU pic, part of groff.
|
|
|
|
# Bison once reported shift/reduce conflicts that it shouldn't have.
|
|
|
|
AT_TEST_EXISTING_GRAMMAR([[GNU pic (Groff 1.18.1) Grammar]],
|
|
[[%error-verbose
|
|
|
|
%token LABEL
|
|
%token VARIABLE
|
|
%token NUMBER
|
|
%token TEXT
|
|
%token COMMAND_LINE
|
|
%token DELIMITED
|
|
%token ORDINAL
|
|
%token TH
|
|
%token LEFT_ARROW_HEAD
|
|
%token RIGHT_ARROW_HEAD
|
|
%token DOUBLE_ARROW_HEAD
|
|
%token LAST
|
|
%token UP
|
|
%token DOWN
|
|
%token LEFT
|
|
%token RIGHT
|
|
%token BOX
|
|
%token CIRCLE
|
|
%token ELLIPSE
|
|
%token ARC
|
|
%token LINE
|
|
%token ARROW
|
|
%token MOVE
|
|
%token SPLINE
|
|
%token HEIGHT
|
|
%token RADIUS
|
|
%token WIDTH
|
|
%token DIAMETER
|
|
%token FROM
|
|
%token TO
|
|
%token AT
|
|
%token WITH
|
|
%token BY
|
|
%token THEN
|
|
%token SOLID
|
|
%token DOTTED
|
|
%token DASHED
|
|
%token CHOP
|
|
%token SAME
|
|
%token INVISIBLE
|
|
%token LJUST
|
|
%token RJUST
|
|
%token ABOVE
|
|
%token BELOW
|
|
%token OF
|
|
%token THE
|
|
%token WAY
|
|
%token BETWEEN
|
|
%token AND
|
|
%token HERE
|
|
%token DOT_N
|
|
%token DOT_E
|
|
%token DOT_W
|
|
%token DOT_S
|
|
%token DOT_NE
|
|
%token DOT_SE
|
|
%token DOT_NW
|
|
%token DOT_SW
|
|
%token DOT_C
|
|
%token DOT_START
|
|
%token DOT_END
|
|
%token DOT_X
|
|
%token DOT_Y
|
|
%token DOT_HT
|
|
%token DOT_WID
|
|
%token DOT_RAD
|
|
%token SIN
|
|
%token COS
|
|
%token ATAN2
|
|
%token LOG
|
|
%token EXP
|
|
%token SQRT
|
|
%token K_MAX
|
|
%token K_MIN
|
|
%token INT
|
|
%token RAND
|
|
%token SRAND
|
|
%token COPY
|
|
%token THROUGH
|
|
%token TOP
|
|
%token BOTTOM
|
|
%token UPPER
|
|
%token LOWER
|
|
%token SH
|
|
%token PRINT
|
|
%token CW
|
|
%token CCW
|
|
%token FOR
|
|
%token DO
|
|
%token IF
|
|
%token ELSE
|
|
%token ANDAND
|
|
%token OROR
|
|
%token NOTEQUAL
|
|
%token EQUALEQUAL
|
|
%token LESSEQUAL
|
|
%token GREATEREQUAL
|
|
%token LEFT_CORNER
|
|
%token RIGHT_CORNER
|
|
%token NORTH
|
|
%token SOUTH
|
|
%token EAST
|
|
%token WEST
|
|
%token CENTER
|
|
%token END
|
|
%token START
|
|
%token RESET
|
|
%token UNTIL
|
|
%token PLOT
|
|
%token THICKNESS
|
|
%token FILL
|
|
%token COLORED
|
|
%token OUTLINED
|
|
%token SHADED
|
|
%token ALIGNED
|
|
%token SPRINTF
|
|
%token COMMAND
|
|
|
|
%left '.'
|
|
|
|
/* this ensures that plot 17 "%g" parses as (plot 17 "%g") */
|
|
%left PLOT
|
|
%left TEXT SPRINTF
|
|
|
|
/* give text adjustments higher precedence than TEXT, so that
|
|
box "foo" above ljust == box ("foo" above ljust)
|
|
*/
|
|
|
|
%left LJUST RJUST ABOVE BELOW
|
|
|
|
%left LEFT RIGHT
|
|
/* Give attributes that take an optional expression a higher
|
|
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
|
|
|
|
%left VARIABLE NUMBER '(' SIN COS ATAN2 LOG EXP SQRT K_MAX K_MIN INT RAND SRAND LAST
|
|
%left ORDINAL HERE '`'
|
|
|
|
%left BOX CIRCLE ELLIPSE ARC LINE ARROW SPLINE '[' /* ] */
|
|
|
|
/* 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'
|
|
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
|
|
%left UPPER LOWER NORTH SOUTH EAST WEST CENTER START END
|
|
|
|
%left ','
|
|
%left OROR
|
|
%left ANDAND
|
|
%left EQUALEQUAL NOTEQUAL
|
|
%left '<' '>' LESSEQUAL GREATEREQUAL
|
|
|
|
%left BETWEEN OF
|
|
%left AND
|
|
|
|
%left '+' '-'
|
|
%left '*' '/' '%'
|
|
%right '!'
|
|
%right '^'
|
|
]],
|
|
[[
|
|
top:
|
|
optional_separator
|
|
| element_list
|
|
;
|
|
|
|
element_list:
|
|
optional_separator middle_element_list optional_separator
|
|
;
|
|
|
|
middle_element_list:
|
|
element
|
|
| middle_element_list separator element
|
|
;
|
|
|
|
optional_separator:
|
|
/* empty */
|
|
| 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 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
|
|
;
|
|
|
|
print_args:
|
|
print_arg
|
|
| print_args print_arg
|
|
;
|
|
|
|
print_arg:
|
|
expr %prec ','
|
|
| text
|
|
| position %prec ','
|
|
;
|
|
|
|
simple_if:
|
|
IF any_expr THEN
|
|
{}
|
|
DELIMITED
|
|
;
|
|
|
|
until:
|
|
/* empty */
|
|
| UNTIL TEXT
|
|
;
|
|
|
|
any_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
|
|
;
|
|
|
|
optional_by:
|
|
/* empty */
|
|
| BY expr
|
|
| BY '*' expr
|
|
;
|
|
|
|
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
|
|
;
|
|
|
|
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
|
|
;
|
|
|
|
text:
|
|
TEXT
|
|
| SPRINTF '(' TEXT sprintf_args ')'
|
|
;
|
|
|
|
sprintf_args:
|
|
/* empty */
|
|
| sprintf_args ',' expr
|
|
;
|
|
|
|
position:
|
|
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 '>'
|
|
;
|
|
|
|
between:
|
|
BETWEEN
|
|
| OF THE WAY BETWEEN
|
|
;
|
|
|
|
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
|
|
;
|
|
|
|
label:
|
|
LABEL
|
|
| nth_primitive
|
|
| label '.' LABEL
|
|
;
|
|
|
|
ordinal:
|
|
ORDINAL
|
|
| '`' any_expr TH
|
|
;
|
|
|
|
optional_ordinal_last:
|
|
LAST
|
|
| ordinal LAST
|
|
;
|
|
|
|
nth_primitive:
|
|
ordinal object_type
|
|
| optional_ordinal_last object_type
|
|
;
|
|
|
|
object_type:
|
|
BOX
|
|
| CIRCLE
|
|
| ELLIPSE
|
|
| ARC
|
|
| LINE
|
|
| ARROW
|
|
| SPLINE
|
|
| '[' ']'
|
|
| TEXT
|
|
;
|
|
|
|
label_path:
|
|
'.' 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
|
|
;
|
|
|
|
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
|
|
;
|
|
|
|
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
|
|
;
|
|
]],
|
|
|
|
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:470.11-48: warning: rule useless in parser due to conflicts: path: ORDINAL LAST object_type relative_path
|
|
]],
|
|
|
|
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
|
|
]])])
|