| Index: bison/src/bison/2.4.1/bison-2.4.1-src/tests/existing.at
|
| ===================================================================
|
| --- bison/src/bison/2.4.1/bison-2.4.1-src/tests/existing.at (revision 0)
|
| +++ bison/src/bison/2.4.1/bison-2.4.1-src/tests/existing.at (revision 0)
|
| @@ -0,0 +1,1525 @@
|
| +# Exercising Bison on actual grammars. -*- Autotest -*-
|
| +
|
| +# Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2003, 2004, 2005,
|
| +# 2007 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.]])
|
| +## ----------------- ##
|
| +## GNU AWK Grammar. ##
|
| +## ----------------- ##
|
| +
|
| +AT_SETUP([GNU AWK 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.
|
| +#
|
| +# Bison was once wrong, due to an incorrect computation of nullable.
|
| +# It reported 485 SR conflicts!
|
| +
|
| +AT_DATA([[input.y]],
|
| +[[%expect 65
|
| +
|
| +%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
|
| + ;
|
| +
|
| +%%
|
| +]])
|
| +
|
| +# 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_BISON_CHECK([[--verbose --defines input.y]])
|
| +
|
| +AT_CLEANUP
|
| +
|
| +## ----------------- ##
|
| +## 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 {}
|
| +
|
| +%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
|
| + ;
|
| +%%
|
| +]])
|
| +
|
| +# 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_BISON_CHECK([[--verbose --defines input.y]], 0, [],
|
| +[[input.y: conflicts: 78 shift/reduce, 10 reduce/reduce
|
| +]])
|
| +
|
| +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
|
| +]])
|
| +
|
| +AT_CLEANUP
|
| +
|
| +## ----------------- ##
|
| +## GNU pic Grammar. ##
|
| +## ----------------- ##
|
| +
|
| +AT_SETUP([GNU pic Grammar])
|
| +
|
| +# GNU pic, part of groff.
|
| +
|
| +# Bison once reported shift/reduce conflicts that it shouldn't have.
|
| +
|
| +AT_DATA([[input.y]],
|
| +[[%union {}
|
| +
|
| +%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 THRU
|
| +%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 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
|
| + ;
|
| +
|
| +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
|
| + ;
|
| +]])
|
| +
|
| +# 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_BISON_CHECK([[--verbose --defines input.y]], 0, [],
|
| +[[input.y:453.11-48: warning: rule useless in parser due to conflicts: path: ORDINAL LAST object_type relative_path
|
| +]])
|
| +
|
| +AT_CLEANUP
|
|
|