mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-11 21:33:04 +00:00
This is something that has always bothered me: with pure parsers (and they all should be) the user does not have an (easy) access to yynerrs at the end of the parse. In the case of error recovery, that's the only direct means to know if there were errors. The usual approach being having the user maintain a counter incremented each time yyerror is called. So here, also capture yynerrs in the return value of the start-symbol parsing functions. * data/skeletons/yacc.c (yy_parse_impl_t): New. (yy_parse_impl): Use it. (b4_accept): Fill it. * examples/c/lexcalc/parse.y, examples/c/lexcalc/scan.l: No longer pass nerrs as lex- and parse-param, just use the resulting yynerrs. bistromathic and reccalc both demonstrate %param.
64 lines
1.3 KiB
Bash
64 lines
1.3 KiB
Bash
#! /bin/sh
|
|
|
|
# Copyright (C) 2018-2020 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/>.
|
|
|
|
cat >input <<EOF
|
|
1+2*3
|
|
EOF
|
|
run 0 7
|
|
|
|
cat >input <<EOF
|
|
1
|
|
2
|
|
3
|
|
EOF
|
|
run 0 '1
|
|
2
|
|
3'
|
|
|
|
cat >input <<EOF
|
|
(1+2) * 3
|
|
EOF
|
|
run 0 9
|
|
run -noerr 0 9 -p
|
|
|
|
cat >input <<EOF
|
|
(1+2) *
|
|
EOF
|
|
run 1 'err: 1.8-2.0: syntax error, unexpected end of line, expecting ( or number
|
|
err: errors: 1'
|
|
|
|
cat >input <<EOF
|
|
1 / (2 - 2)
|
|
EOF
|
|
run 1 'err: 1.1-11: error: division by zero
|
|
err: errors: 1'
|
|
|
|
|
|
# Multistart: parse "expression" instead of "input".
|
|
cat >input <<EOF
|
|
1+2*3
|
|
EOF
|
|
run 0 'expression: 7' -e
|
|
|
|
cat >input <<EOF
|
|
1
|
|
2
|
|
EOF
|
|
run 1 'expression: failure
|
|
err: 2.1: syntax error, unexpected number, expecting end of file
|
|
err: errors: 1' -e
|