Compare commits

..
32 Commits
Author SHA1 Message Date
Akim Demaille f520e150eb version 3.4
* NEWS: Record release date.
2019-05-19 11:19:47 +02:00
Akim Demaille 75db37c564 fix: use copiable, not copyable
Reported by Hans Åberg.
http://lists.gnu.org/archive/html/bug-bison/2019-05/msg00017.html

* data/skeletons/lalr1.cc, doc/bison.texi: here.
2019-05-19 11:17:44 +02:00
Akim Demaille 886b503e4b NEWS: update for 3.4 2019-05-19 11:01:20 +02:00
Akim Demaille a2f0444c6e tests: adjust to GCC9 diagnostics with a margin
* tests/synclines.at (_AT_SYNCLINES_COMPILE): Remove the margin.
2019-05-19 10:53:02 +02:00
Akim Demaille 66100b640f regen 2019-05-19 10:05:18 +02:00
Akim Demaille de5207244b diagnostics: %pure-parser is obsolete
Reported by Uxio Prego.
http://lists.gnu.org/archive/html/bug-bison/2018-12/msg00029.html

* src/scan-gram.l, src/parse-gram.y (PERCENT_PURE_PARSER)
(handle_pure_parser): New.
Issue a deprecation/update notice for %pure-parser.
* doc/bison.texi (Java Bison Interface): Don't mention %pure-parser.
* tests/actions.at, tests/input.at: Adjust.
2019-05-19 10:05:18 +02:00
Akim Demaille cae8132690 diagnostics: clean up convention for colored diagnostics
* data/diagnostics.css: Rename as...
* data/bison-default.css: this.
Add the GPL header.
This is the convention followed by Bruno Haible in gettext.
Adjust dependencies.
* src/complain.c (complain_init_color): Use BISON_STYLE instead of
BISON_DIAGNOSTICS_STYLE.
2019-05-19 09:50:21 +02:00
Akim Demaille a1a847bfb5 CI: use a pipeline: first build the tarball, then check it
Build the tarball in one job, check it in many.
Unfortunately no real gain in overall duration.
With help from Clément Démoulins.

* .travis.yml: here.
Remove all the tricks that were used to be able to boostrap on old
distros.
(before_install): Merge into 'script', because before_install applies
to all the jobs, and we don't want to run it for the 'compile' job.
2019-05-19 09:45:27 +02:00
Akim Demaille 3ac95de01a examples: fix srcdir/builddir issues
* examples/d/local.mk, examples/java/local.mk: here.
2019-05-18 13:22:58 +02:00
Akim Demaille da7af36a13 gnulib: update
In preparation for Bison 3.4, revert to the version before this
commit:

    commit 03752516b21091cf3c4beea7e8b9bcad462d50ed
    Author: John Darrington <[email protected]>
    Date:   Sun May 12 00:42:36 2019 +0200

    version-etc: Ease translation.

    * lib/version-etc.c (version_etc_arn, emit_bug_reporting_address):
    Move URLs and formatting newlines out of translatable string.

because it changes the messages for --version, translated in
gnulib.po.  These changes are not yet available on the translation
project, so we would have a regression in the set of translated
strings.
2019-05-18 09:10:08 +02:00
Akim Demaille 3f25104caf build: do not use $< in plain rules
It works only in implicit rules (or with GNU Make, but not with
Solaris Make).

Reported by Bruno Haible.
http://lists.gnu.org/archive/html/bug-bison/2019-05/msg00009.html
Diagnosed thanks to Kiyoshi Kanazawa.

* examples/c/reccalc/local.mk, examples/d/local.mk,
* examples/java/local.mk: Don't use $< in non implicit rules.
2019-05-13 22:16:23 +02:00
Akim Demaille 6b1933d992 maint: post-release administrivia
* NEWS: Add header line for next release.
* .prev-version: Record previous version.
* cfg.mk (old_NEWS_hash): Auto-update.
2019-05-12 14:25:31 +02:00
Akim Demaille 5163803a63 version 3.3.91
* NEWS: Record release date.
2019-05-12 14:09:10 +02:00
Akim Demaille fee7c78a83 NEWS: update 2019-05-12 14:07:43 +02:00
Akim Demaille 8fc544b03c gnulib: update 2019-05-12 11:39:27 +02:00
Akim Demaille d62d5c4b33 style: remove incorrect comment
* src/getargs.c: here.
It's documented in getargs.h anyway.
2019-05-11 09:19:16 +02:00
Akim Demaille ab3eaff7c4 doc: use colors for diagnostics in TeX too
Thanks to Gavin Smith and Patrice Dumas.
http://lists.gnu.org/archive/html/help-texinfo/2019-04/msg00015.html

* doc/bison.texi (@colorWarning, @colorError, @colorNotice)
(@colorOff): Define for TeX and HTML.
(@dwarning, @derror, @dnotice): Use them.
2019-05-09 19:21:02 +02:00
Akim Demaille 85e83ea968 gnulib: update to fix location tracking in UTF-8 on Solaris
This update contains Bruno Haible's fix for the location tracking
issue reported by Kiyoshi Kanazawa.

https://lists.gnu.org/archive/html/bug-gnulib/2019-05/msg00020.html
https://lists.gnu.org/archive/html/bug-bison/2019-04/msg00020.html
2019-05-08 16:34:31 +02:00
Akim Demaille 0269c6fb03 diagnostics: rename --style=debug as --color=debug
It is more consistent with --color=html, --color=test, etc.

* src/getargs.h, src/getargs.c (style_debug): Rename as...
(color_debug): this.
(getargs_colors): Rename --style=debug as --color=debug.
Adjust dependencies.
2019-05-08 13:36:47 +02:00
Akim Demaille 23e536af49 diagnostics: support --color=html
Based on a message from Bruno Haible.
https://git.savannah.gnu.org/gitweb/?p=gettext.git;a=commitdiff;h=fe18e92743b7226791a5f28d7c786941a1bf8cc9

This does not generate proper HTML: special characters are not escaped
for instance.  This is a hidden feature meant for Bison developers,
not end users.

* src/complain.c (complain_init_color): Support --color=html.
2019-05-08 13:36:47 +02:00
Akim Demaille cd56929097 tests: use %empty instead of comments
* tests/c++.at, tests/glr-regression.at: here.
2019-05-08 09:11:37 +02:00
Akim Demaille 7aa38561f7 fixits: sort them before applying them
An experimental commit introduced a fix-it hint that changes comments
such as "/* empty */" into %empty.  But in some case, because
diagnostics are not necessarily emitted in order, the fixits also come
in disorder, which must never happen, as the fixes are installed in
one pass.

* src/fixits.c (fixits_register): Insert them in order.
2019-05-08 09:10:28 +02:00
Akim Demaille 22a00cfbf2 style: use warning_is_enabled instead of duplicating it
* src/complain.c (deprecated_directive): Here.
2019-05-04 17:50:57 +02:00
Akim Demaille 8c06cb9130 fixits: be sure to preserve the action when adding %empty
Currently we remove the rhs to install %empty instead.

* src/reader.c (grammar_rule_check_and_complete): Insert the missing
%empty in front of the rhs, not in replacement thereof.
* tests/actions.at (Add missing %empty): Check that.
2019-05-03 16:28:28 +02:00
Akim Demaille b5233ba323 tests: don't duplicate the portability prologue
* tests/actions.at, tests/input.at: Don't repeat the prologue, skip it.
* tests/diagnostics.at, tests/local.at: Comment changes.
2019-05-03 16:28:28 +02:00
Akim Demaille 013720f0e7 style: use consistently *_loc for locations
Some members are called foo_location, others are foo_loc.  Stick to
the latter.

* src/gram.h, src/location.h, src/location.c, src/output.c,
* src/parse-gram.y, src/reader.h, src/reader.c, src/reduce.c,
* src/scan-gram.l, src/symlist.h, src/symlist.c, src/symtab.h,
* src/symtab.c:
Use _loc consistently, not _location.
2019-05-03 16:28:28 +02:00
Akim Demaille 365b4d95a4 style: clarify the use of symbol_lists' locations
symbol_list features a 'location' and a 'sym_loc' member.  The former
is expected to be set only for symbol_lists that denote a symbol (not
a type name), and the latter should only denote the location of the
symbol/type name.  Yet both are set, and the name "location" is too
unprecise.

* src/symlist.h, src/symlist.c (symbol_list::location): Rename as
rhs_loc for clarity.  Move it to the "section" of data valid only
for rules.
* src/reader.c, src/scan-code.l: Adjust.
2019-05-03 16:28:28 +02:00
Akim Demaille 5bb44cca81 maint: update gnulib-po/.gitignore 2019-05-03 16:28:28 +02:00
Akim Demaille 15f9f8c853 tests: don't require a D compiler
Reported by Kiyoshi Kanazawa.
http://lists.gnu.org/archive/html/bug-bison/2019-04/msg00018.html

* tests/atlocal.in (BISON_DC_WORKS): New.
* tests/local.at (AT_COMPILE_D): Use it.
2019-04-29 22:27:01 +02:00
Akim Demaille 04676a5085 doc: use svg instead of png
* doc/bison.texi, doc/local.mk: here.
2019-04-29 07:44:19 +02:00
Akim Demaille cf44351dd7 doc: use colors
* doc/bison.texi (dwarning, derror, dnotice): New.
Use them in the diagnostics.
* doc/local.mk (AM_MAKEINFOFLAGS): Pass customization variables.
2019-04-29 07:44:19 +02:00
Akim Demaille 614e0bbe23 maint: post-release administrivia
* NEWS: Add header line for next release.
* .prev-version: Record previous version.
* cfg.mk (old_NEWS_hash): Auto-update.
2019-04-28 12:02:35 +02:00
44 changed files with 932 additions and 647 deletions
+1 -1
View File
@@ -1 +1 @@
3.3.2 3.3.91
+101 -27
View File
@@ -11,8 +11,56 @@ env:
# See https://github.com/nemequ/icc-travis. # See https://github.com/nemequ/icc-travis.
secure: B3manbbi0anCAGDJTdAa9TlodzRHeiYD87FKmFzS877dPm8Cm0BDvtUhKBUpBvP8+nbHOWFGrgDmLugSZjTGU+mAxtuQpamUFHvinu0BIk3qtjlqouwvbtIqUu8iiZ3Uqu+xKeAANKRy0YVZGLlEb9F3N119tJ/Fxp1p9bXL1qph+CZ25OFbUgZ2s4F+/AyHMUxJlNXKFe3Qean65hC6edhU3zoaKzr/g/wtbhRmcyWbkOa1dJqzr2yKotcPvrnApGhDzgMKFtohg/t7xfMADDVv6sGS5XNpt25Z+MUCmLg4Z9eD7u109jvRV1eu/jgVafqsthWEhXbuMiFgFhKBKGCNZ0dACIfKZSkFZI6FdM7ovJ6aNhSlxZ2169Ybd22rN1UTHeCQWySPcVVOg5taLVpqe+E8Xhnv4hBO5NrzElWwCMLxIdPUSwVStYvtDr8ZytHWzfot50vSnFKIFpTOr9hP4+AJMVmmqJfaJo2MLBft/q2xkztrMv3lQSj3m4+ma9kPDwXIu9uCutjlnhc00jNx9qegi5VfpAjxcG1R+pX4T20az6ByHk/7LPQsANkT31RJq/jAeD9LEuMOy8miha83q4QuvbFaqPK3PY0el/O1LZaXqLsV2aQ0uqH8YX0l4r5NzHdhb+3lYgvpMBO5ytr/EWJiEyNYV518050IUDE= secure: B3manbbi0anCAGDJTdAa9TlodzRHeiYD87FKmFzS877dPm8Cm0BDvtUhKBUpBvP8+nbHOWFGrgDmLugSZjTGU+mAxtuQpamUFHvinu0BIk3qtjlqouwvbtIqUu8iiZ3Uqu+xKeAANKRy0YVZGLlEb9F3N119tJ/Fxp1p9bXL1qph+CZ25OFbUgZ2s4F+/AyHMUxJlNXKFe3Qean65hC6edhU3zoaKzr/g/wtbhRmcyWbkOa1dJqzr2yKotcPvrnApGhDzgMKFtohg/t7xfMADDVv6sGS5XNpt25Z+MUCmLg4Z9eD7u109jvRV1eu/jgVafqsthWEhXbuMiFgFhKBKGCNZ0dACIfKZSkFZI6FdM7ovJ6aNhSlxZ2169Ybd22rN1UTHeCQWySPcVVOg5taLVpqe+E8Xhnv4hBO5NrzElWwCMLxIdPUSwVStYvtDr8ZytHWzfot50vSnFKIFpTOr9hP4+AJMVmmqJfaJo2MLBft/q2xkztrMv3lQSj3m4+ma9kPDwXIu9uCutjlnhc00jNx9qegi5VfpAjxcG1R+pX4T20az6ByHk/7LPQsANkT31RJq/jAeD9LEuMOy8miha83q4QuvbFaqPK3PY0el/O1LZaXqLsV2aQ0uqH8YX0l4r5NzHdhb+3lYgvpMBO5ytr/EWJiEyNYV518050IUDE=
matrix: # Run in two steps:
# 1. Build the tarball
# On a modern distro, with all the needed dependencies, including the whole git history.
# 2. Check it on various environments.
# Less dependencies, and little git content (we would like to have none, but it's not
# an option on Travis).
stages:
- compile
- test
# matrix.include and jobs.include are aliases (https://docs.travis-ci.com/user/conditional-builds-stages-jobs/).
jobs:
include: include:
- stage: "compile"
dist: xenial
script:
- sudo apt-get update -qq
- sudo apt-get install -qq autoconf automake autopoint flex gettext graphviz help2man m4 texinfo
- autoconf --version
- automake --version
- autopoint --version
- dot -V
- gettext --version
- help2man --version
- makeinfo --version
- m4 --version
- git tag -l
# For some reasons, sometimes the checkout does not have any tags,
# so `git describe` fails, so bootstrap fails.
- git describe || git tag v3.0 -m "Fake version 3.0."
- git describe
# Appears to be needed for the following command (https://github.com/AppImage/AppImageKit/issues/511).
- git submodule sync
# Travis makes a shallow clone, but we need it in full to build the ChangeLog and apply the fixes in git-log-fix.
- git fetch --unshallow || true
- ./bootstrap
- if [[ -f ~/.bashrc ]]; then source ~/.bashrc; fi
- ./configure --enable-gcc-warnings CC="$CC" CXX="$CXX" $CONFIGUREFLAGS || { cat config.log && false; }
- make -j2
- make -j2 dist
- dist=$(echo bison*.xz)
# Unfortunately we cannot deterministically know the name of the tarball without the full
# git history (because git describe --abbrev=4 may use more than 4 characters if there are
# conflicts). Besides, one day we would like not to depend on the repository at all in the
# 'test' jobs. So also expose this tarball on a name that only depends on the Travis build
# number.
- sftp [email protected] <<< "put $dist"$'\n'"ln -s $dist bison-$TRAVIS_BUILD_NUMBER.tar.xz"
## ------- ## ## ------- ##
## First. ## ## First. ##
## ------- ## ## ------- ##
@@ -21,6 +69,7 @@ matrix:
# errors asap. # errors asap.
- name: "GCC 7 -O3" - name: "GCC 7 -O3"
stage: test
os: linux os: linux
dist: xenial dist: xenial
addons: addons:
@@ -33,8 +82,9 @@ matrix:
- MATRIX_EVAL="CC=gcc-7 && CXX=g++-7 && CONFIGUREFLAGS='CPPFLAGS=-DNDEBUG CFLAGS=-O3 CXXFLAGS=-O3'" - MATRIX_EVAL="CC=gcc-7 && CXX=g++-7 && CONFIGUREFLAGS='CPPFLAGS=-DNDEBUG CFLAGS=-O3 CXXFLAGS=-O3'"
# ASAN is time consuming, and we timeout the 50min granted by # ASAN is time consuming, and we timeout the 50min granted by
# Travis if we run all the tests in on go. Run in two parts. # Travis if we run all the tests in one go. Run in two parts.
- name: "Clang 7 libc++ and ASAN part 1" - name: "Clang 7 libc++ and ASAN part 1"
stage: test
os: linux os: linux
dist: xenial dist: xenial
addons: addons:
@@ -51,6 +101,7 @@ matrix:
- MATRIX_EVAL="PART=1 CC='clang-7 -fsanitize=address' CXX='clang++-7 -fsanitize=address -stdlib=libc++'" - MATRIX_EVAL="PART=1 CC='clang-7 -fsanitize=address' CXX='clang++-7 -fsanitize=address -stdlib=libc++'"
- name: "Clang 7 libc++ and ASAN part 2" - name: "Clang 7 libc++ and ASAN part 2"
stage: test
os: linux os: linux
dist: xenial dist: xenial
addons: addons:
@@ -67,6 +118,7 @@ matrix:
- MATRIX_EVAL="PART=2 CC='clang-7 -fsanitize=address' CXX='clang++-7 -fsanitize=address -stdlib=libc++'" - MATRIX_EVAL="PART=2 CC='clang-7 -fsanitize=address' CXX='clang++-7 -fsanitize=address -stdlib=libc++'"
- name: "ICC" - name: "ICC"
stage: test
os: linux os: linux
dist: xenial dist: xenial
env: env:
@@ -100,6 +152,7 @@ matrix:
# - MATRIX_EVAL="CC='gcc-8 -fsanitize=undefined,address -fno-omit-frame-pointer' CXX='g++-8 -fsanitize=undefined,address -fno-omit-frame-pointer'" # - MATRIX_EVAL="CC='gcc-8 -fsanitize=undefined,address -fno-omit-frame-pointer' CXX='g++-8 -fsanitize=undefined,address -fno-omit-frame-pointer'"
- name: "GCC 6" - name: "GCC 6"
stage: test
os: linux os: linux
dist: xenial dist: xenial
addons: addons:
@@ -112,6 +165,7 @@ matrix:
- MATRIX_EVAL="CC=gcc-6 && CXX=g++-6" - MATRIX_EVAL="CC=gcc-6 && CXX=g++-6"
- name: "GCC 5" - name: "GCC 5"
stage: test
os: linux os: linux
dist: xenial dist: xenial
addons: addons:
@@ -124,6 +178,7 @@ matrix:
- MATRIX_EVAL="CC=gcc-5 && CXX=g++-5" - MATRIX_EVAL="CC=gcc-5 && CXX=g++-5"
- name: "GCC 4.9" - name: "GCC 4.9"
stage: test
os: linux os: linux
dist: xenial dist: xenial
addons: addons:
@@ -136,6 +191,7 @@ matrix:
- MATRIX_EVAL="CC=gcc-4.9 && CXX=g++-4.9" - MATRIX_EVAL="CC=gcc-4.9 && CXX=g++-4.9"
- name: "GCC 4.8" - name: "GCC 4.8"
stage: test
os: linux os: linux
dist: xenial dist: xenial
addons: addons:
@@ -148,6 +204,7 @@ matrix:
- MATRIX_EVAL="CC=gcc-4.8 && CXX=g++-4.8" - MATRIX_EVAL="CC=gcc-4.8 && CXX=g++-4.8"
- name: "GCC 4.7" - name: "GCC 4.7"
stage: test
os: linux os: linux
dist: xenial dist: xenial
addons: addons:
@@ -160,6 +217,7 @@ matrix:
- MATRIX_EVAL="CC=gcc-4.7 && CXX=g++-4.7" - MATRIX_EVAL="CC=gcc-4.7 && CXX=g++-4.7"
- name: "GCC 4.6" - name: "GCC 4.6"
stage: test
os: linux os: linux
dist: xenial dist: xenial
addons: addons:
@@ -176,6 +234,7 @@ matrix:
## ------- ## ## ------- ##
- name: "Clang 6 -O3 and libc++" - name: "Clang 6 -O3 and libc++"
stage: test
os: linux os: linux
dist: xenial dist: xenial
addons: addons:
@@ -191,6 +250,7 @@ matrix:
- CONFIGUREFLAGS='CPPFLAGS=-DNDEBUG CFLAGS=-O3 CXXFLAGS=-O3' - CONFIGUREFLAGS='CPPFLAGS=-DNDEBUG CFLAGS=-O3 CXXFLAGS=-O3'
- name: "Clang 5" - name: "Clang 5"
stage: test
os: linux os: linux
dist: xenial dist: xenial
addons: addons:
@@ -204,6 +264,7 @@ matrix:
- MATRIX_EVAL="CC='clang-5.0' CXX='clang++-5.0'" - MATRIX_EVAL="CC='clang-5.0' CXX='clang++-5.0'"
- name: "Clang 4" - name: "Clang 4"
stage: test
os: linux os: linux
dist: xenial dist: xenial
addons: addons:
@@ -216,6 +277,7 @@ matrix:
- MATRIX_EVAL="CC=clang-4.0 && CXX=clang++-4.0" - MATRIX_EVAL="CC=clang-4.0 && CXX=clang++-4.0"
- name: "Clang 3.9" - name: "Clang 3.9"
stage: test
os: linux os: linux
dist: xenial dist: xenial
addons: addons:
@@ -228,6 +290,7 @@ matrix:
- MATRIX_EVAL="CC=clang-3.9 && CXX=clang++-3.9" - MATRIX_EVAL="CC=clang-3.9 && CXX=clang++-3.9"
- name: "Clang 3.8" - name: "Clang 3.8"
stage: test
os: linux os: linux
dist: xenial dist: xenial
addons: addons:
@@ -241,6 +304,7 @@ matrix:
- MATRIX_EVAL="CC=clang-3.8 && CXX=clang++-3.8" - MATRIX_EVAL="CC=clang-3.8 && CXX=clang++-3.8"
- name: "CLang 3.7" - name: "CLang 3.7"
stage: test
os: linux os: linux
dist: xenial dist: xenial
addons: addons:
@@ -254,6 +318,7 @@ matrix:
- MATRIX_EVAL="CC=clang-3.7 && CXX=clang++-3.7" - MATRIX_EVAL="CC=clang-3.7 && CXX=clang++-3.7"
- name: "Clang 3.6" - name: "Clang 3.6"
stage: test
os: linux os: linux
dist: xenial dist: xenial
addons: addons:
@@ -267,6 +332,7 @@ matrix:
- MATRIX_EVAL="CC=clang-3.6 && CXX=clang++-3.6" - MATRIX_EVAL="CC=clang-3.6 && CXX=clang++-3.6"
- name: "Clang 3.5" - name: "Clang 3.5"
stage: test
os: linux os: linux
dist: xenial dist: xenial
addons: addons:
@@ -280,6 +346,7 @@ matrix:
- MATRIX_EVAL="CC=clang-3.5 && CXX=clang++-3.5" - MATRIX_EVAL="CC=clang-3.5 && CXX=clang++-3.5"
- name: "Clang 3.4" - name: "Clang 3.4"
stage: test
os: linux os: linux
# Not available on Xenial. # Not available on Xenial.
dist: trusty dist: trusty
@@ -290,9 +357,10 @@ matrix:
env: env:
# No versioned name installed, but beware that Travis installs # No versioned name installed, but beware that Travis installs
# a more modern clang earlier in the default PATH. # a more modern clang earlier in the default PATH.
- MATRIX_EVAL='CC=/usr/bin/clang && CXX=/usr/bin/clang++ && GETTEXT_VERSION=0.18.3' - MATRIX_EVAL='CC=/usr/bin/clang && CXX=/usr/bin/clang++'
- name: "Clang 3.3" - name: "Clang 3.3"
stage: test
os: linux os: linux
# Not available on Xenial. # Not available on Xenial.
dist: trusty dist: trusty
@@ -302,50 +370,56 @@ matrix:
- clang-3.3 - clang-3.3
env: env:
# See comment for 3.4. # See comment for 3.4.
- MATRIX_EVAL='CC=/usr/bin/clang && CXX=/usr/bin/clang++ && GETTEXT_VERSION=0.18.3' - MATRIX_EVAL='CC=/usr/bin/clang && CXX=/usr/bin/clang++'
## From https://docs.gitlab.com/ce/ci/ssh_keys/#ssh-keys-when-using-the-docker-executor.
## Applies to Travis too. Applied to all the 'script's (of all the jobs).
before_script:
- 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
- eval "$(ssh-agent -s)"
# $SSH_PRIVATE_KEY is multiline. Use $'...' to register its value: $'-----BEGIN OPENSSH PRIVATE KEY-----\nXXXXX...\n...==\n-----END OPENSSH PRIVATE KEY-----'.
- echo "$SSH_PRIVATE_KEY" >/tmp/key.id_rsa
- chmod 600 /tmp/key.id_rsa
- ssh-add /tmp/key.id_rsa </dev/null
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
- echo '|1|bpc51UGxoDZjCPiwRlCStW32trI=|rfh6mLoLZv/vAvOVrpZXI1hTLxg= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBIR+ckMoJTNXHvAQLHWSfrRnrNJGW2ZR6kr5pBVDGCkz1v1RcQ5rleq0NAt9kS3v4hgnuLiEVnK7KDRzcEH3ikc=' >>~/.ssh/known_hosts
- chmod 600 ~/.ssh/known_hosts
before_install: # Applies only to the jobs that don't have a 'script', i.e., applies to all the 'test' jobs, but not the 'compile' one.
script:
- eval "$MATRIX_EVAL" - eval "$MATRIX_EVAL"
- env # Beware not too leak $SSH_PRIVATE_KEY.
# - env
- sudo apt-get update -qq - sudo apt-get update -qq
- sudo apt-get install -qq autoconf automake autopoint doxygen flex gettext graphviz help2man m4 texinfo - sudo apt-get install -qq doxygen flex m4
# Install and activate ICC.
- if [[ $CC == "icc" ]]; then build-aux/install-icc.sh; fi - if [[ $CC == "icc" ]]; then build-aux/install-icc.sh; fi
- if [[ -f ~/.bashrc ]]; then source ~/.bashrc; fi - if [[ -f ~/.bashrc ]]; then source ~/.bashrc; fi
# Install and activate dmd # Install and activate dmd.
- mkdir -p ~/dlang && wget https://dlang.org/install.sh -O ~/dlang/install.sh - mkdir -p ~/dlang && wget https://dlang.org/install.sh -O ~/dlang/install.sh
- source $(source ~/dlang/install.sh dmd -a) - source $(source ~/dlang/install.sh dmd -a)
- autoconf --version
- automake --version
- autopoint --version
- $CC --version - $CC --version
- $CXX --version - $CXX --version
- dmd --version - dmd --version
- doxygen --version - doxygen --version
- flex --version - flex --version
- gettext --version
- dot -V
- help2man --version
- ld --version - ld --version
- m4 --version - m4 --version
- makeinfo --version
script: - if [[ -f ~/.bashrc ]]; then source ~/.bashrc; fi
- git tag -l
# For some reasons, sometimes the checkout does not have any tags,
# so `git describe` fails, so bootstrap fails.
- git describe || git tag v3.0 -m "Fake version 3.0."
- git describe
# Unset this variable, otherwise, Java programs' stderr is cluttered # Unset this variable, otherwise, Java programs' stderr is cluttered
# with `Picked up _JAVA_OPTIONS: -Xmx2048m -Xms512m`, which makes # with `Picked up _JAVA_OPTIONS: -Xmx2048m -Xms512m`, which makes
# the test suite fail. # the test suite fail.
- unset _JAVA_OPTIONS - unset _JAVA_OPTIONS
- if [[ $GETTEXT_VERSION ]]; then sed -i -re "s/(AM_GNU_GETTEXT_VERSION).*/\1([$GETTEXT_VERSION])/" configure.ac; fi - sftp [email protected]:bison-$TRAVIS_BUILD_NUMBER.tar.xz
- ./bootstrap - tar xf bison-$TRAVIS_BUILD_NUMBER.tar.xz
# For some reason, gnulib-po/Makefile.in.in is about Gettext 0.19, so it will break here. Override it. - dir=$(tar tf bison-$TRAVIS_BUILD_NUMBER.tar.xz | sed 1q)
- if [[ $GETTEXT_VERSION ]]; then autopoint --force; fi - cd $dir
- if [[ -f ~/.bashrc ]]; then source ~/.bashrc; fi - mkdir _build
- ./configure --enable-gcc-warnings CC="$CC" CXX="$CXX" $CONFIGUREFLAGS || { cat config.log && false; } - cd _build
- ../configure --enable-gcc-warnings CC="$CC" CXX="$CXX" $CONFIGUREFLAGS || { cat config.log && false; }
- make -j2 $MAKE_ARGS - make -j2 $MAKE_ARGS
- if test ${PART-1} = 1; then make check VERBOSE=1 TESTSUITEFLAGS=-j2 || { cat test-suite.log && cat tests/testsuite.log && false; }; fi - if test ${PART-1} = 1; then make check VERBOSE=1 TESTSUITEFLAGS=-j2 || { cat test-suite.log && cat tests/testsuite.log && false; }; fi
- if test ${PART-1} = 1; then make maintainer-check-posix VERBOSE=1 TESTSUITEFLAGS=-j2 || { cat tests/testsuite.log && false; }; fi - if test ${PART-1} = 1; then make maintainer-check-posix VERBOSE=1 TESTSUITEFLAGS=-j2 || { cat tests/testsuite.log && false; }; fi
+15 -7
View File
@@ -1,15 +1,22 @@
GNU Bison NEWS GNU Bison NEWS
* Noteworthy changes in release 3.3.90 (2019-04-28) [beta] * Noteworthy changes in release 3.4 (2019-05-19) [stable]
** Deprecated features
The %pure-parser directive is deprecated in favor of '%define api.pure'
since Bison 2.3b (2008-05-27), but no warning was issued; there is one
now. Note that since Bison 2.7 you are strongly encouraged to use
'%define api.pure full' instead of '%define api.pure'.
** New features ** New features
*** Colored diagnostics *** Colored diagnostics
As an experimental feature, Bison now generates colored diagnostics, As an experimental feature, diagnostics are now colored, controlled by the
controlled by the new options --color and --style. new options --color and --style.
Install the libtextstyle library before configuring Bison to use them. To use them, install the libtextstyle library before configuring Bison.
It is available from It is available from
https://alpha.gnu.org/gnu/gettext/ https://alpha.gnu.org/gnu/gettext/
@@ -25,12 +32,13 @@ GNU Bison NEWS
To customize the styles, create a CSS file similar to To customize the styles, create a CSS file similar to
/* black-and-white.css */ /* bison-bw.css */
.warning { } .warning { }
.error { font-weight: 800; text-decoration: underline; } .error { font-weight: 800; text-decoration: underline; }
.note { } .note { }
then invoke bison with --style=black-and-white.css. then invoke bison with --style=bison-bw.css, or set the BISON_STYLE
environment variable to "bison-bw.css".
*** Disabling output *** Disabling output
@@ -3614,7 +3622,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
LocalWords: redeclaration sval fcaret reentrant XSLT xsl Wmaybe yyvsp Tedi LocalWords: redeclaration sval fcaret reentrant XSLT xsl Wmaybe yyvsp Tedi
LocalWords: pragmas noreturn untyped Rozenman unexpanded Wojciech Polak LocalWords: pragmas noreturn untyped Rozenman unexpanded Wojciech Polak
LocalWords: Alexandre MERCHANTABILITY yytype emplace ptr automove lvalues LocalWords: Alexandre MERCHANTABILITY yytype emplace ptr automove lvalues
LocalWords: nonterminal yy args Pragma dereference yyformat rhs docdir LocalWords: nonterminal yy args Pragma dereference yyformat rhs docdir bw
LocalWords: Redeclarations rpcalc Autoconf YFLAGS Makefiles PROG DECL num LocalWords: Redeclarations rpcalc Autoconf YFLAGS Makefiles PROG DECL num
LocalWords: Heimbigner AST src ast Makefile srcdir MinGW xxlex XXSTYPE LocalWords: Heimbigner AST src ast Makefile srcdir MinGW xxlex XXSTYPE
LocalWords: XXLTYPE strictfp IDEs ffixit fdiagnostics parseable fixits LocalWords: XXLTYPE strictfp IDEs ffixit fdiagnostics parseable fixits
+4
View File
@@ -33,6 +33,7 @@ Bruce Lilly [email protected]
Bruno Haible [email protected] Bruno Haible [email protected]
Charles-Henri de Boysson [email protected] Charles-Henri de Boysson [email protected]
Christian Burger [email protected] Christian Burger [email protected]
Clément Démoulins [email protected]
Colin Daley [email protected] Colin Daley [email protected]
Cris Bailiff [email protected] Cris Bailiff [email protected]
Cris van Pelt [email protected] Cris van Pelt [email protected]
@@ -66,6 +67,7 @@ Frank Heckenbach [email protected]
Frans Englich [email protected] Frans Englich [email protected]
Gabriel Rassoul [email protected] Gabriel Rassoul [email protected]
Gary L Peskin [email protected] Gary L Peskin [email protected]
Gavin Smith [email protected]
Georg Sauthoff [email protected] Georg Sauthoff [email protected]
George Neuner [email protected] George Neuner [email protected]
Gilles Espinasse [email protected] Gilles Espinasse [email protected]
@@ -128,6 +130,7 @@ Oliver Mangold [email protected]
Paolo Bonzini [email protected] Paolo Bonzini [email protected]
Paolo Simone Gasparello [email protected] Paolo Simone Gasparello [email protected]
Pascal Bart [email protected] Pascal Bart [email protected]
Patrice Dumas [email protected]
Paul Eggert [email protected] Paul Eggert [email protected]
Paul Hilfinger [email protected] Paul Hilfinger [email protected]
Per Allansson [email protected] Per Allansson [email protected]
@@ -176,6 +179,7 @@ Tom Tromey [email protected]
Tommy Nordgren [email protected] Tommy Nordgren [email protected]
Troy A. Johnson [email protected] Troy A. Johnson [email protected]
Tys Lefering [email protected] Tys Lefering [email protected]
Uxio Prego [email protected]
Valentin Tolmer [email protected] Valentin Tolmer [email protected]
wcventure [email protected] wcventure [email protected]
Victor Khomenko [email protected] Victor Khomenko [email protected]
+24
View File
@@ -0,0 +1,24 @@
/* Default styling rules for Bison when doing terminal output.
Copyright (C) 2019 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 <https://www.gnu.org/licenses/>. */
/* This is an experimental feature. The class names may change in the
future. */
.warning { color: purple; }
.error { color: red; }
.note { color: cyan; }
/* Semantic values in Bison's own parser traces. */
.value { color: green; }
-10
View File
@@ -1,10 +0,0 @@
/* CSS style for Bison's diagnostics.
This is an experimental feature. The class names may change in the
future. */
.warning { color: purple; }
.error { color: red; }
.note { color: cyan; }
/* Semantic values in Bison's parser traces. */
.value { color: green; }
+1 -1
View File
@@ -16,7 +16,7 @@
dist_pkgdata_DATA = \ dist_pkgdata_DATA = \
data/README.md \ data/README.md \
data/diagnostics.css data/bison-default.css
skeletonsdir = $(pkgdatadir)/skeletons skeletonsdir = $(pkgdatadir)/skeletons
dist_skeletons_DATA = \ dist_skeletons_DATA = \
+1 -1
View File
@@ -218,7 +218,7 @@ m4_define([b4_shared_declarations],
]b4_token_constructor_define[ ]b4_token_constructor_define[
private: private:
/// This class is not copyable. /// This class is not copiable.
]b4_parser_class[ (const ]b4_parser_class[&); ]b4_parser_class[ (const ]b4_parser_class[&);
]b4_parser_class[& operator= (const ]b4_parser_class[&); ]b4_parser_class[& operator= (const ]b4_parser_class[&);
+122 -74
View File
@@ -7,6 +7,51 @@
@settitle Bison @value{VERSION} @settitle Bison @value{VERSION}
@setchapternewpage odd @setchapternewpage odd
@tex
\gdef\rgbWarning{0.50 0 0.50}
\gdef\colorWarning{%
\setcolor{\rgbWarning}%
}
\gdef\rgbError{0.80 0 0}
\gdef\colorError{%
\setcolor{\rgbError}%
}
\gdef\rgbNotice{0 0 0.80}
\gdef\colorNotice{%
\setcolor{\rgbNotice}%
}
\gdef\colorOff{%
\setcolor{\maincolor}%
}
@end tex
@ifnottex
@macro colorWarning
@inlineraw{html, <b style="color:darkviolet">}
@end macro
@macro colorError
@inlineraw{html, <b style="color:red">}
@end macro
@macro colorNotice
@inlineraw{html, <b style="color:darkcyan">}
@end macro
@macro colorOff
@inlineraw{html, </b>}
@end macro
@end ifnottex
@macro dwarning{text}
@colorWarning{}\text\@colorOff{}
@end macro
@macro derror{text}
@colorError{}\text\@colorOff{}
@end macro
@macro dnotice{text}
@colorNotice{}\text\@colorOff{}
@end macro
@finalout @finalout
@c SMALL BOOK version @c SMALL BOOK version
@@ -4280,24 +4325,24 @@ $@@3: %empty @{ d(); @};
exp: @@1 "b" @@2 $@@3 "e" @{ f = $1; @} exp: @@1 "b" @@2 $@@3 "e" @{ f = $1; @}
@end example @end example
There are probably two errors in the above example: the first midrule There are probably two errors in the above example: the first midrule action
action does not generate a value (it does not use @code{$$} although the does not generate a value (it does not use @code{$$} although the final
final action uses it), and the value of the second one is not used (the action uses it), and the value of the second one is not used (the final
final action does not use @code{$3}). Bison reports these errors when the action does not use @code{$3}). Bison reports these errors when the
@code{midrule-value} warnings are enabled (@pxref{Invocation, ,Invoking @code{midrule-value} warnings are enabled (@pxref{Invocation, ,Invoking
Bison}): Bison}):
@example @example
$ @kbd{bison -Wmidrule-value mid.y} $ @kbd{bison -Wmidrule-value mid.y}
@group @group
mid.y:2.6-13: warning: unset value: $$ mid.y:2.6-13: @dwarning{warning}: unset value: $$
2 | exp: @{ a(); @} "b" @{ $$ = c(); @} @{ d(); @} "e" @{ f = $1; @}; 2 | exp: @dwarning{@{ a(); @}} "b" @{ $$ = c(); @} @{ d(); @} "e" @{ f = $1; @};
| ^~~~~~~~ | @dwarning{^~~~~~~~}
@end group @end group
@group @group
mid.y:2.19-31: warning: unused value: $3 mid.y:2.19-31: @dwarning{warning}: unused value: $3
2 | exp: @{ a(); @} "b" @{ $$ = c(); @} @{ d(); @} "e" @{ f = $1; @}; 2 | exp: @{ a(); @} "b" @dwarning{@{ $$ = c(); @}} @{ d(); @} "e" @{ f = $1; @};
| ^~~~~~~~~~~~~ | @dwarning{^~~~~~~~~~~~~}
@end group @end group
@end example @end example
@@ -4305,9 +4350,9 @@ mid.y:2.19-31: warning: unused value: $3
It is sometimes useful to turn midrule actions into regular actions, e.g., It is sometimes useful to turn midrule actions into regular actions, e.g.,
to factor them, or to escape from their limitations. For instance, as an to factor them, or to escape from their limitations. For instance, as an
alternative to @emph{typed} midrule action, you may bury the midrule alternative to @emph{typed} midrule action, you may bury the midrule action
action inside a nonterminal symbol and to declare a printer and a destructor inside a nonterminal symbol and to declare a printer and a destructor for
for that symbol: that symbol:
@example @example
@group @group
@@ -9342,12 +9387,12 @@ useless: STR;
@command{bison} reports: @command{bison} reports:
@example @example
calc.y: warning: 1 nonterminal useless in grammar [-Wother] calc.y: @dwarning{warning}: 1 nonterminal useless in grammar [@dwarning{-Wother}]
calc.y: warning: 1 rule useless in grammar [-Wother] calc.y: @dwarning{warning}: 1 rule useless in grammar [@dwarning{-Wother}]
calc.y:19.1-7: warning: nonterminal useless in grammar: useless [-Wother] calc.y:19.1-7: @dwarning{warning}: nonterminal useless in grammar: useless [@dwarning{-Wother}]
19 | useless: STR; 19 | @dwarning{useless: STR;}
| ^~~~~~~ | @dwarning{^~~~~~~}
calc.y: warning: 7 shift/reduce conflicts [-Wconflicts-sr] calc.y: @dwarning{warning}: 7 shift/reduce conflicts [@dwarning{-Wconflicts-sr}]
@end example @end example
When given @option{--report=state}, in addition to @file{calc.tab.c}, it When given @option{--report=state}, in addition to @file{calc.tab.c}, it
@@ -9764,7 +9809,7 @@ Parser}, for a detailed analysis of the textual report.
@ifnotinfo @ifnotinfo
@float Figure,fig:graph @float Figure,fig:graph
@image{figs/example, 430pt} @center @image{figs/example, 430pt,,,.svg}
@caption{A graphical rendering of the parser.} @caption{A graphical rendering of the parser.}
@end float @end float
@end ifnotinfo @end ifnotinfo
@@ -9802,7 +9847,7 @@ State 3
A Graphviz rendering of this portion of the graph could be: A Graphviz rendering of this portion of the graph could be:
@center @image{figs/example-shift, 100pt} @center @image{figs/example-shift, 100pt,,,.svg}
@subheading Graphical Representation of Reductions @subheading Graphical Representation of Reductions
@@ -9824,7 +9869,7 @@ State 1
A Graphviz rendering of this portion of the graph could be: A Graphviz rendering of this portion of the graph could be:
@center @image{figs/example-reduce, 120pt} @center @image{figs/example-reduce, 120pt,,,.svg}
When unresolved conflicts are present, because in deterministic parsing When unresolved conflicts are present, because in deterministic parsing
a single decision can be made, Bison can arbitrarily choose to disable a a single decision can be made, Bison can arbitrarily choose to disable a
@@ -10299,15 +10344,15 @@ exp:;
@end group @end group
@group @group
$ @kbd{bison -u foo.y} $ @kbd{bison -u foo.y}
foo.y:1.1-14: warning: deprecated directive, use '%define parse.error verbose' [-Wdeprecated] foo.y:1.1-14: @dwarning{warning}: deprecated directive, use '%define parse.error verbose' [@dwarning{-Wdeprecated}]
1 | %error-verbose 1 | @dwarning{%error-verbose}
| ^~~~~~~~~~~~~~ | @dwarning{^~~~~~~~~~~~~~}
foo.y:2.1-27: error: %define variable 'parse.error' redefined foo.y:2.1-27: @dwarning{warning}: %define variable 'parse.error' redefined [@dwarning{-Wother}]
2 | %define parse.error verbose 2 | @dwarning{%define parse.error verbose}
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~ | @dwarning{^~~~~~~~~~~~~~~~~~~~~~~~~~~}
foo.y:1.1-14: previous definition foo.y:1.1-14: previous definition
1 | %error-verbose 1 | @dnotice{%error-verbose}
| ^~~~~~~~~~~~~~ | @dnotice{^~~~~~~~~~~~~~}
bison: file 'foo.y' was updated (backup: 'foo.y~') bison: file 'foo.y' was updated (backup: 'foo.y~')
@end group @end group
@group @group
@@ -10421,19 +10466,19 @@ Bison reports:
@c width in PDF. @c width in PDF.
@example @example
@group @group
warning: useless precedence and associativity for "=" @dwarning{warning}: useless precedence and associativity for "="
| %nonassoc "=" | %nonassoc @dwarning{"="}
| ^~~ | @dwarning{^~~}
@end group @end group
@group @group
warning: useless associativity for "*", use %precedence @dwarning{warning}: useless associativity for "*", use %precedence
| %left "*" | %left @dwarning{"*"}
| ^~~ | @dwarning{^~~}
@end group @end group
@group @group
warning: useless precedence for "(" @dwarning{warning}: useless precedence for "("
| %precedence "(" | %precedence @dwarning{"("}
| ^~~ | @dwarning{^~~}
@end group @end group
@end example @end example
@@ -10520,29 +10565,29 @@ When invoked with @option{-fcaret} (or nothing), Bison will report:
@example @example
@group @group
in.y:3.20-23: error: ambiguous reference: '$exp' in.y:3.20-23: @derror{error}: ambiguous reference: '$exp'
3 | exp: exp '+' exp @{ $exp = $1 + $2; @}; 3 | exp: exp '+' exp @{ @derror{$exp} = $1 + $2; @};
| ^~~~ | @derror{^~~~}
@end group @end group
@group @group
in.y:3.1-3: refers to: $exp at $$ in.y:3.1-3: refers to: $exp at $$
3 | exp: exp '+' exp @{ $exp = $1 + $2; @}; 3 | @dnotice{exp}: exp '+' exp @{ $exp = $1 + $2; @};
| ^~~ | @dnotice{^~~}
@end group @end group
@group @group
in.y:3.6-8: refers to: $exp at $1 in.y:3.6-8: refers to: $exp at $1
3 | exp: exp '+' exp @{ $exp = $1 + $2; @}; 3 | exp: @dnotice{exp} '+' exp @{ $exp = $1 + $2; @};
| ^~~ | @dnotice{^~~}
@end group @end group
@group @group
in.y:3.14-16: refers to: $exp at $3 in.y:3.14-16: refers to: $exp at $3
3 | exp: exp '+' exp @{ $exp = $1 + $2; @}; 3 | exp: exp '+' @dnotice{exp} @{ $exp = $1 + $2; @};
| ^~~ | @dnotice{^~~}
@end group @end group
@group @group
in.y:3.32-33: error: $2 of 'exp' has no declared type in.y:3.32-33: @derror{error}: $2 of 'exp' has no declared type
3 | exp: exp '+' exp @{ $exp = $1 + $2; @}; 3 | exp: exp '+' exp @{ $exp = $1 + @derror{$2}; @};
| ^~ | @derror{^~}
@end group @end group
@end example @end example
@@ -10550,11 +10595,11 @@ Whereas, when invoked with @option{-fno-caret}, Bison will only report:
@example @example
@group @group
in.y:3.20-23: error: ambiguous reference: $exp in.y:3.20-23: @derror{error}: ambiguous reference: $exp
in.y:3.1-3: refers to: $exp at $$ in.y:3.1-3: refers to: $exp at $$
in.y:3.6-8: refers to: $exp at $1 in.y:3.6-8: refers to: $exp at $1
in.y:3.14-16: refers to: $exp at $3 in.y:3.14-16: refers to: $exp at $3
in.y:3.32-33: error: $2 of exp has no declared type in.y:3.32-33: @derror{error}: $2 of exp has no declared type
@end group @end group
@end example @end example
@@ -10578,14 +10623,14 @@ exp:;
@group @group
$ @kbd{bison -ffixit foo.y} $ @kbd{bison -ffixit foo.y}
foo.y:2.1-24: error: %define variable 'api.prefix' redefined foo.y:2.1-24: @derror{error}: %define variable 'api.prefix' redefined
2 | %define api.prefix @{bar@} 2 | @derror{%define api.prefix @{bar@}}
| ^~~~~~~~~~~~~~~~~~~~~~~~ | @derror{^~~~~~~~~~~~~~~~~~~~~~~~}
foo.y:1.1-24: previous definition foo.y:1.1-24: previous definition
1 | %define api.prefix @{foo@} 1 | @dnotice{%define api.prefix @{foo@}}
| ^~~~~~~~~~~~~~~~~~~~~~~~ | @dnotice{^~~~~~~~~~~~~~~~~~~~~~~~}
fix-it:"foo.y":@{2:1-2:25@}:"" fix-it:"foo.y":@{2:1-2:25@}:""
foo.y: warning: fix-its can be applied. Rerun with option '--update'. [-Wother] foo.y: @dwarning{warning}: fix-its can be applied. Rerun with option '--update'. [@dwarning{-Wother}]
@end group @end group
@end example @end example
@@ -10602,13 +10647,13 @@ exp:;
@end group @end group
@group @group
$ @kbd{bison foo.y} $ @kbd{bison foo.y}
foo.y:1.1-14: warning: deprecated directive, use '%define parse.error verbose' [-Wdeprecated] foo.y:1.1-14: @dwarning{warning}: deprecated directive, use '%define parse.error verbose' [@dwarning{-Wdeprecated}]
1 | %error-verbose 1 | @dwarning{%error-verbose}
| ^~~~~~~~~~~~~~ | @dwarning{^~~~~~~~~~~~~~}
foo.y:2.1-18: warning: deprecated directive, use '%define api.prefix @{foo@}' [-Wdeprecated] foo.y:2.1-18: @dwarning{warning}: deprecated directive, use '%define api.prefix @{foo@}' [@dwarning{-Wdeprecated}]
2 | %name-prefix "foo" 2 | @dwarning{%name-prefix "foo"}
| ^~~~~~~~~~~~~~~~~~ | @dwarning{^~~~~~~~~~~~~~~~~~}
foo.y: warning: fix-its can be applied. Rerun with option '--update'. [-Wother] foo.y: @dwarning{warning}: fix-its can be applied. Rerun with option '--update'. [@dwarning{-Wother}]
@end group @end group
@end example @end example
@@ -11523,7 +11568,7 @@ Instead of using the built-in types you may use the @code{%define} variable
The requirements over your @var{LocationType} are: The requirements over your @var{LocationType} are:
@itemize @itemize
@item @item
it must be copyable; it must be copiable;
@item @item
in order to compute the (default) value of @code{@@$} in a reduction, the in order to compute the (default) value of @code{@@$} in a reduction, the
@@ -11533,7 +11578,7 @@ parser basically runs
@@$.end = @@@var{N}.end; // The location of last right-hand side symbol. @@$.end = @@@var{N}.end; // The location of last right-hand side symbol.
@end example @end example
@noindent @noindent
so there must be copyable @code{begin} and @code{end} members; so there must be copiable @code{begin} and @code{end} members;
@item @item
alternatively you may redefine the computation of the default location, in alternatively you may redefine the computation of the default location, in
@@ -12371,8 +12416,8 @@ You can create documentation for generated parsers using Javadoc.
Contrary to C parsers, Java parsers do not use global variables; the state Contrary to C parsers, Java parsers do not use global variables; the state
of the parser is always local to an instance of the parser class. of the parser is always local to an instance of the parser class.
Therefore, all Java parsers are ``pure'', and the @code{%pure-parser} and Therefore, all Java parsers are ``pure'', and the @code{%define api.pure}
@code{%define api.pure} directives do nothing when used in Java. directive does nothing when used in Java.
Push parsers are currently unsupported in Java and @code{%define Push parsers are currently unsupported in Java and @code{%define
api.push-pull} have no effect. api.push-pull} have no effect.
@@ -14428,7 +14473,7 @@ London, Department of Computer Science, TR-00-12 (December 2000).
@c LocalWords: YYENABLE bindtextdomain Makefile DEFS CPPFLAGS DBISON DeRemer @c LocalWords: YYENABLE bindtextdomain Makefile DEFS CPPFLAGS DBISON DeRemer
@c LocalWords: autoreconf Pennello multisets nondeterminism Generalised baz ACM @c LocalWords: autoreconf Pennello multisets nondeterminism Generalised baz ACM
@c LocalWords: redeclare automata Dparse localedir datadir XSLT midrule Wno @c LocalWords: redeclare automata Dparse localedir datadir XSLT midrule Wno
@c LocalWords: multitable headitem hh basename Doxygen fno filename @c LocalWords: multitable headitem hh basename Doxygen fno filename gdef
@c LocalWords: doxygen ival sval deftypemethod deallocate pos deftypemethodx @c LocalWords: doxygen ival sval deftypemethod deallocate pos deftypemethodx
@c LocalWords: Ctor defcv defcvx arg accessors arithmetics CPP ifndef CALCXX @c LocalWords: Ctor defcv defcvx arg accessors arithmetics CPP ifndef CALCXX
@c LocalWords: lexer's calcxx bool LPAREN RPAREN deallocation cerrno climits @c LocalWords: lexer's calcxx bool LPAREN RPAREN deallocation cerrno climits
@@ -14449,14 +14494,17 @@ London, Department of Computer Science, TR-00-12 (December 2000).
@c LocalWords: errorVerbose subtype subtypes Wmidrule midrule's src rvalues @c LocalWords: errorVerbose subtype subtypes Wmidrule midrule's src rvalues
@c LocalWords: automove evolutions Wother Wconflicts PNG lookaheads Acc sep @c LocalWords: automove evolutions Wother Wconflicts PNG lookaheads Acc sep
@c LocalWords: xsltproc XSL xsl xhtml html num Wprecedence Werror fcaret gv @c LocalWords: xsltproc XSL xsl xhtml html num Wprecedence Werror fcaret gv
@c LocalWords: fdiagnostics setlocale nullptr ast srcdir copyable iff drv @c LocalWords: fdiagnostics setlocale nullptr ast srcdir iff drv rgbWarning
@c LocalWords: deftypefunx pragma Wnull dereference Wdocumentation elif ish @c LocalWords: deftypefunx pragma Wnull dereference Wdocumentation elif ish
@c LocalWords: Wdeprecated Wregister noinput yyloc yypos PODs sstream Wsign @c LocalWords: Wdeprecated Wregister noinput yyloc yypos PODs sstream Wsign
@c LocalWords: typename emplace Wconversion Wshorten yacchack reentrancy @c LocalWords: typename emplace Wconversion Wshorten yacchack reentrancy
@c LocalWords: Relocatability exprs fixit Wyacc parseable fixits ffixit @c LocalWords: Relocatability exprs fixit Wyacc parseable fixits ffixit svg
@c LocalWords: DNDEBUG cstring Wzero workalike POPL workalikes byacc UCB @c LocalWords: DNDEBUG cstring Wzero workalike POPL workalikes byacc UCB
@c LocalWords: Penello's Penello Byson Byson's Corbett's CSD TOPLAS PDP @c LocalWords: Penello's Penello Byson Byson's Corbett's CSD TOPLAS PDP
@c LocalWords: Beazley's goyacc ocamlyacc SIGACT SIGPLAN @c LocalWords: Beazley's goyacc ocamlyacc SIGACT SIGPLAN colorWarning
@c LocalWords: setcolor rgbError colorError rgbNotice colorNotice derror
@c LocalWords: colorOff maincolor inlineraw darkviolet darkcyan dwarning
@c LocalWords: dnotice copiable
@c Local Variables: @c Local Variables:
@c ispell-dictionary: "american" @c ispell-dictionary: "american"
+12 -7
View File
@@ -14,7 +14,12 @@
## You should have received a copy of the GNU General Public License ## You should have received a copy of the GNU General Public License
## along with this program. If not, see <http://www.gnu.org/licenses/>. ## along with this program. If not, see <http://www.gnu.org/licenses/>.
AM_MAKEINFOFLAGS = --no-split AM_MAKEINFOFLAGS = \
--no-split \
--set-customization-variable=SECTION_NAME_IN_TITLE=true \
--set-customization-variable=AVOID_MENU_REDUNDANCY=true \
--set-customization-variable=ICONS=true
info_TEXINFOS = doc/bison.texi info_TEXINFOS = doc/bison.texi
doc_bison_TEXINFOS = \ doc_bison_TEXINFOS = \
$(CROSS_OPTIONS_TEXI) \ $(CROSS_OPTIONS_TEXI) \
@@ -28,7 +33,7 @@ doc_bison = doc/bison
$(doc_bison).dvi: $(FIGS_GV:.gv=.eps) $(doc_bison).dvi: $(FIGS_GV:.gv=.eps)
$(doc_bison).info: $(FIGS_GV:.gv=.txt) $(doc_bison).info: $(FIGS_GV:.gv=.txt)
$(doc_bison).pdf: $(FIGS_GV:.gv=.pdf) $(doc_bison).pdf: $(FIGS_GV:.gv=.pdf)
$(doc_bison).html: $(FIGS_GV:.gv=.png) $(doc_bison).html: $(FIGS_GV:.gv=.svg)
TEXI2DVI = texi2dvi --build-dir=doc/bison.t2d -I doc TEXI2DVI = texi2dvi --build-dir=doc/bison.t2d -I doc
CLEANDIRS += doc/bison.t2d CLEANDIRS += doc/bison.t2d
@@ -137,14 +142,14 @@ endif
## Graphviz examples generation. ## ## Graphviz examples generation. ##
## ----------------------------- ## ## ----------------------------- ##
CLEANFILES += $(FIGS_GV:.gv=.eps) $(FIGS_GV:.gv=.pdf) $(FIGS_GV:.gv=.png) CLEANFILES += $(FIGS_GV:.gv=.eps) $(FIGS_GV:.gv=.pdf) $(FIGS_GV:.gv=.svg)
FIGS_GV = \ FIGS_GV = \
doc/figs/example.gv \ doc/figs/example.gv \
doc/figs/example-reduce.gv doc/figs/example-shift.gv doc/figs/example-reduce.gv doc/figs/example-shift.gv
EXTRA_DIST += \ EXTRA_DIST += \
$(FIGS_GV) $(FIGS_GV:.gv=.txt) \ $(FIGS_GV) $(FIGS_GV:.gv=.txt) \
$(FIGS_GV:.gv=.eps) $(FIGS_GV:.gv=.pdf) $(FIGS_GV:.gv=.png) $(FIGS_GV:.gv=.eps) $(FIGS_GV:.gv=.pdf) $(FIGS_GV:.gv=.svg)
SUFFIXES += .gv .eps .pdf .png SUFFIXES += .gv .eps .pdf .svg
.gv.eps: .gv.eps:
$(AM_V_GEN) $(MKDIR_P) `echo "./$@" | sed -e 's,/[^/]*$$,,'` $(AM_V_GEN) $(MKDIR_P) `echo "./$@" | sed -e 's,/[^/]*$$,,'`
@@ -156,9 +161,9 @@ SUFFIXES += .gv .eps .pdf .png
$(AM_V_at) $(DOT) -Gmargin=0 -Tpdf $< >$@.tmp $(AM_V_at) $(DOT) -Gmargin=0 -Tpdf $< >$@.tmp
$(AM_V_at) mv $@.tmp $@ $(AM_V_at) mv $@.tmp $@
.gv.png: .gv.svg:
$(AM_V_GEN) $(MKDIR_P) `echo "./$@" | sed -e 's,/[^/]*$$,,'` $(AM_V_GEN) $(MKDIR_P) `echo "./$@" | sed -e 's,/[^/]*$$,,'`
$(AM_V_at) $(DOT) -Gmargin=0 -Tpng $< >$@.tmp $(AM_V_at) $(DOT) -Gmargin=0 -Tsvg $< >$@.tmp
$(AM_V_at) mv $@.tmp $@ $(AM_V_at) mv $@.tmp $@
## -------------- ## ## -------------- ##
+1 -1
View File
@@ -41,7 +41,7 @@ DASH = -
$(AM_V_LEX)rm -f $@ $@.tmp $(AM_V_LEX)rm -f $@ $@.tmp
$(AM_V_at)$(MKDIR_P) %D% $(AM_V_at)$(MKDIR_P) %D%
$(AM_V_at)touch $@.tmp $(AM_V_at)touch $@.tmp
$(AM_V_at) $(LEX) -o %D%/scan.c --header-file=%D%/scan.h $< $(AM_V_at)$(LEX) -o%D%/scan.c --header-file=%D%/scan.h $(srcdir)/%D%/scan.l
$(AM_V_at)mv $@.tmp $@ $(AM_V_at)mv $@.tmp $@
# Don't use gnulib's system headers. # Don't use gnulib's system headers.
+2 -2
View File
@@ -27,10 +27,10 @@ EXTRA_DIST += %D%/calc.test
%D%/calc.d: %D%/calc.y $(dependencies) %D%/calc.d: %D%/calc.y $(dependencies)
$(AM_V_GEN)$(MKDIR_P) %D% $(AM_V_GEN)$(MKDIR_P) %D%
$(AM_V_at)$(BISON) $< -o $@ $(AM_V_at)$(BISON) $(srcdir)/%D%/calc.y -o $@
%D%/calc: %D%/calc.d %D%/calc: %D%/calc.d
$(AM_V_GEN) $(DC) $(DCFLAGS) -of$@ $< $(AM_V_GEN) $(DC) $(DCFLAGS) -of$@ %D%/calc.d
dist_d_DATA = %D%/calc.y %D%/Makefile %D%/README.md dist_d_DATA = %D%/calc.y %D%/Makefile %D%/README.md
CLEANFILES += %D%/calc %D%/calc.[do] CLEANFILES += %D%/calc %D%/calc.[do]
+2 -2
View File
@@ -27,10 +27,10 @@ EXTRA_DIST += %D%/Calc.test
%D%/Calc.java: %D%/Calc.y $(dependencies) %D%/Calc.java: %D%/Calc.y $(dependencies)
$(AM_V_GEN)$(MKDIR_P) %D% $(AM_V_GEN)$(MKDIR_P) %D%
$(AM_V_at)$(BISON) $< -o $@ $(AM_V_at)$(BISON) $(srcdir)/%D%/Calc.y -o $@
%D%/Calc.class: %D%/Calc.java %D%/Calc.class: %D%/Calc.java
$(AM_V_GEN) $(SHELL) $(top_builddir)/javacomp.sh $< $(AM_V_GEN) $(SHELL) $(top_builddir)/javacomp.sh %D%/Calc.java
dist_java_DATA = %D%/Calc.y %D%/Makefile %D%/README.md dist_java_DATA = %D%/Calc.y %D%/Makefile %D%/README.md
CLEANFILES += %D%/*.class %D%/Calc.java CLEANFILES += %D%/*.class %D%/Calc.java
+1 -1
Submodule gnulib updated: 14a920195e...d654989d8b
+15
View File
@@ -0,0 +1,15 @@
/*.gmo
/*.po
/LINGUAS
/Makefile.in.in
/Makevars
/Makevars.template
/POTFILES.in
/Rules-quot
/bison-gnulib.pot
/boldquot.sed
/[email protected]
/[email protected]
/insert-header.sin
/quot.sed
/remove-potcdate.sin
+26 -10
View File
@@ -72,7 +72,7 @@ begin_use_class (const char *s, FILE *out)
{ {
if (out == stderr) if (out == stderr)
{ {
if (style_debug) if (color_debug)
fprintf (out, "<%s>", s); fprintf (out, "<%s>", s);
else else
{ {
@@ -87,7 +87,7 @@ end_use_class (const char *s, FILE *out)
{ {
if (out == stderr) if (out == stderr)
{ {
if (style_debug) if (color_debug)
fprintf (out, "</%s>", s); fprintf (out, "</%s>", s);
else else
{ {
@@ -252,25 +252,41 @@ complain_init_color (void)
{ {
#if HAVE_LIBTEXTSTYLE #if HAVE_LIBTEXTSTYLE
if (color_mode == color_yes if (color_mode == color_yes
|| color_mode == color_html
|| (color_mode == color_tty && isatty (STDERR_FILENO))) || (color_mode == color_tty && isatty (STDERR_FILENO)))
{ {
style_file_prepare ("BISON_DIAGNOSTICS_STYLE", NULL, style_file_prepare ("BISON_STYLE", NULL, pkgdatadir (),
pkgdatadir (), "bison-default.css");
"diagnostics.css");
/* As a fallback, use the default in the current directory. */ /* As a fallback, use the default in the current directory. */
struct stat statbuf; struct stat statbuf;
if ((style_file_name == NULL || stat (style_file_name, &statbuf) < 0) if ((style_file_name == NULL || stat (style_file_name, &statbuf) < 0)
&& stat ("diagnostics.css", &statbuf) == 0) && stat ("bison-default.css", &statbuf) == 0)
style_file_name = "diagnostics.css"; style_file_name = "bison-default.css";
} }
else else
/* No styling. */ /* No styling. */
style_file_name = NULL; style_file_name = NULL;
#endif #endif
/* Workaround clang's warning (starting at Clang 3.5) about the stub
code of html_styled_ostream_create:
| src/complain.c:274:7: error: code will never be executed [-Werror,-Wunreachable-code]
| ? html_styled_ostream_create (file_ostream_create (stderr),
| ^~~~~~~~~~~~~~~~~~~~~~~~~~ */
#if defined __clang__
# pragma clang diagnostic push
# pragma clang diagnostic ignored "-Wunreachable-code"
#endif
errstream = errstream =
styled_ostream_create (STDERR_FILENO, "(stderr)", TTYCTL_AUTO, color_mode == color_html
style_file_name); ? html_styled_ostream_create (file_ostream_create (stderr),
style_file_name)
: styled_ostream_create (STDERR_FILENO, "(stderr)", TTYCTL_AUTO,
style_file_name);
#if defined __clang__
# pragma clang diagnostic pop
#endif
} }
void void
@@ -521,7 +537,7 @@ deprecated_directive (location const *loc, char const *old, char const *upd)
_("deprecated directive: %s, use %s"), _("deprecated directive: %s, use %s"),
quote (old), quote_n (1, upd)); quote (old), quote_n (1, upd));
/* Register updates only if -Wdeprecated is enabled. */ /* Register updates only if -Wdeprecated is enabled. */
if (warnings_flag[warning_deprecated] != severity_disabled) if (warning_is_enabled (Wdeprecated))
fixits_register (loc, upd); fixits_register (loc, upd);
} }
+6 -1
View File
@@ -52,6 +52,11 @@ fixit_new (location const *loc, char const* fix)
return res; return res;
} }
static int
fixit_cmp (const fixit *a, const fixit *b)
{
return location_cmp (a->location, b->location);
}
static void static void
fixit_free (fixit *f) fixit_free (fixit *f)
@@ -85,7 +90,7 @@ fixits_register (location const *loc, char const* fix)
(gl_listelement_dispose_fn) fixit_free, (gl_listelement_dispose_fn) fixit_free,
true); true);
fixit *f = fixit_new (loc, fix); fixit *f = fixit_new (loc, fix);
gl_list_add_last (fixits, f); gl_sortedlist_add (fixits, (gl_listelement_compar_fn) fixit_cmp, f);
if (feature_flag & feature_fixit_parsable) if (feature_flag & feature_fixit_parsable)
fixit_print (f, stderr); fixit_print (f, stderr);
} }
+9 -6
View File
@@ -45,7 +45,7 @@ bool no_lines_flag = false;
bool token_table_flag = false; bool token_table_flag = false;
location yacc_loc = EMPTY_LOCATION_INIT; location yacc_loc = EMPTY_LOCATION_INIT;
bool update_flag = false; /* for -u */ bool update_flag = false; /* for -u */
bool style_debug = false; /* --style=debug. */ bool color_debug = false;
bool nondeterministic_parser = false; bool nondeterministic_parser = false;
bool glr_parser = false; bool glr_parser = false;
@@ -596,14 +596,17 @@ getargs_colors (int argc, char *argv[])
{ {
const char *arg = argv[i]; const char *arg = argv[i];
if (STRPREFIX_LIT ("--color=", arg)) if (STRPREFIX_LIT ("--color=", arg))
handle_color_option (arg + strlen ("--color=")); {
const char *color = arg + strlen ("--color=");
if (STREQ (color, "debug"))
color_debug = true;
else
handle_color_option (color);
}
else if (STRPREFIX_LIT ("--style=", arg)) else if (STRPREFIX_LIT ("--style=", arg))
{ {
const char *style = arg + strlen ("--style="); const char *style = arg + strlen ("--style=");
if (STREQ (style, "debug")) handle_style_option (style);
style_debug = true;
else
handle_style_option (style);
} }
} }
complain_init_color (); complain_init_color ();
+1 -1
View File
@@ -41,7 +41,7 @@ extern bool no_lines_flag; /* for -l */
extern bool token_table_flag; /* for -k */ extern bool token_table_flag; /* for -k */
extern location yacc_loc; /* for -y */ extern location yacc_loc; /* for -y */
extern bool update_flag; /* for -u */ extern bool update_flag; /* for -u */
extern bool style_debug; /* --style=debug. */ extern bool color_debug; /* --color=debug. */
/* GLR_PARSER is true if the input file says to use the GLR /* GLR_PARSER is true if the input file says to use the GLR
(Generalized LR) parser, and to output some additional information (Generalized LR) parser, and to output some additional information
used by the GLR algorithm. */ used by the GLR algorithm. */
+1 -1
View File
@@ -203,7 +203,7 @@ typedef struct
int expected_rr_conflicts; int expected_rr_conflicts;
const char *action; const char *action;
location action_location; location action_loc;
} rule; } rule;
/* The used rules (size NRULES). */ /* The used rules (size NRULES). */
+1 -1
View File
@@ -30,7 +30,7 @@
#include "getargs.h" #include "getargs.h"
#include "location.h" #include "location.h"
location const empty_location = EMPTY_LOCATION_INIT; location const empty_loc = EMPTY_LOCATION_INIT;
/* If BUF is null, add BUFSIZE (which in this case must be less than /* If BUF is null, add BUFSIZE (which in this case must be less than
INT_MAX) to COLUMN; otherwise, add mbsnwidth (BUF, BUFSIZE, 0) to INT_MAX) to COLUMN; otherwise, add mbsnwidth (BUF, BUFSIZE, 0) to
+1 -1
View File
@@ -102,7 +102,7 @@ typedef struct
# define GRAM_LTYPE location # define GRAM_LTYPE location
# define EMPTY_LOCATION_INIT {{NULL, 0, 0, 0}, {NULL, 0, 0, 0}} # define EMPTY_LOCATION_INIT {{NULL, 0, 0, 0}, {NULL, 0, 0, 0}}
extern location const empty_location; extern location const empty_loc;
/* Set *LOC and adjust scanner cursor to account for token TOKEN of /* Set *LOC and adjust scanner cursor to account for token TOKEN of
size SIZE. */ size SIZE. */
+2 -2
View File
@@ -372,8 +372,8 @@ user_actions_output (FILE *out)
{ {
fprintf (out, "%s(%d, [b4_syncline(%d, ", fprintf (out, "%s(%d, [b4_syncline(%d, ",
rules[r].is_predicate ? "b4_predicate_case" : "b4_case", rules[r].is_predicate ? "b4_predicate_case" : "b4_case",
r + 1, rules[r].action_location.start.line); r + 1, rules[r].action_loc.start.line);
string_output (out, rules[r].action_location.start.file); string_output (out, rules[r].action_loc.start.file);
fprintf (out, ")dnl\n[ %s]])\n\n", rules[r].action); fprintf (out, ")dnl\n[ %s]])\n\n", rules[r].action);
} }
fputs ("])\n\n", out); fputs ("])\n\n", out);
+363 -339
View File
File diff suppressed because it is too large Load Diff
+37 -34
View File
@@ -1,4 +1,4 @@
/* A Bison parser, made by GNU Bison 3.3.2.153-f5a4-dirty. */ /* A Bison parser, made by GNU Bison 3.4. */
/* Bison interface for Yacc-like parsers in C /* Bison interface for Yacc-like parsers in C
@@ -108,32 +108,33 @@ extern int gram_debug;
PERCENT_NO_LINES = 285, PERCENT_NO_LINES = 285,
PERCENT_NONDETERMINISTIC_PARSER = 286, PERCENT_NONDETERMINISTIC_PARSER = 286,
PERCENT_OUTPUT = 287, PERCENT_OUTPUT = 287,
PERCENT_REQUIRE = 288, PERCENT_PURE_PARSER = 288,
PERCENT_SKELETON = 289, PERCENT_REQUIRE = 289,
PERCENT_START = 290, PERCENT_SKELETON = 290,
PERCENT_TOKEN_TABLE = 291, PERCENT_START = 291,
PERCENT_VERBOSE = 292, PERCENT_TOKEN_TABLE = 292,
PERCENT_YACC = 293, PERCENT_VERBOSE = 293,
BRACED_CODE = 294, PERCENT_YACC = 294,
BRACED_PREDICATE = 295, BRACED_CODE = 295,
BRACKETED_ID = 296, BRACED_PREDICATE = 296,
CHAR = 297, BRACKETED_ID = 297,
COLON = 298, CHAR = 298,
EPILOGUE = 299, COLON = 299,
EQUAL = 300, EPILOGUE = 300,
ID = 301, EQUAL = 301,
ID_COLON = 302, ID = 302,
PERCENT_PERCENT = 303, ID_COLON = 303,
PIPE = 304, PERCENT_PERCENT = 304,
PROLOGUE = 305, PIPE = 305,
SEMICOLON = 306, PROLOGUE = 306,
TAG = 307, SEMICOLON = 307,
TAG_ANY = 308, TAG = 308,
TAG_NONE = 309, TAG_ANY = 309,
INT = 310, TAG_NONE = 310,
PERCENT_PARAM = 311, INT = 311,
PERCENT_UNION = 312, PERCENT_PARAM = 312,
PERCENT_EMPTY = 313 PERCENT_UNION = 313,
PERCENT_EMPTY = 314
}; };
#endif #endif
@@ -159,9 +160,9 @@ union GRAM_STYPE
/* "integer" */ /* "integer" */
int INT; int INT;
/* int.opt */ /* int.opt */
int yytype_80; int yytype_81;
/* named_ref.opt */ /* named_ref.opt */
named_ref* yytype_92; named_ref* yytype_93;
/* "%param" */ /* "%param" */
param_type PERCENT_PARAM; param_type PERCENT_PARAM;
/* token_decl */ /* token_decl */
@@ -177,7 +178,7 @@ union GRAM_STYPE
/* string_as_id */ /* string_as_id */
symbol* string_as_id; symbol* string_as_id;
/* string_as_id.opt */ /* string_as_id.opt */
symbol* yytype_99; symbol* yytype_100;
/* generic_symlist */ /* generic_symlist */
symbol_list* generic_symlist; symbol_list* generic_symlist;
/* generic_symlist_item */ /* generic_symlist_item */
@@ -187,15 +188,15 @@ union GRAM_STYPE
/* token_decls */ /* token_decls */
symbol_list* token_decls; symbol_list* token_decls;
/* token_decl.1 */ /* token_decl.1 */
symbol_list* yytype_78; symbol_list* yytype_79;
/* token_decls_for_prec */ /* token_decls_for_prec */
symbol_list* token_decls_for_prec; symbol_list* token_decls_for_prec;
/* token_decl_for_prec.1 */ /* token_decl_for_prec.1 */
symbol_list* yytype_82; symbol_list* yytype_83;
/* symbol_decls */ /* symbol_decls */
symbol_list* symbol_decls; symbol_list* symbol_decls;
/* symbol_decl.1 */ /* symbol_decl.1 */
symbol_list* yytype_85; symbol_list* yytype_86;
/* "%error-verbose" */ /* "%error-verbose" */
uniqstr PERCENT_ERROR_VERBOSE; uniqstr PERCENT_ERROR_VERBOSE;
/* "%<flag>" */ /* "%<flag>" */
@@ -204,6 +205,8 @@ union GRAM_STYPE
uniqstr PERCENT_FILE_PREFIX; uniqstr PERCENT_FILE_PREFIX;
/* "%name-prefix" */ /* "%name-prefix" */
uniqstr PERCENT_NAME_PREFIX; uniqstr PERCENT_NAME_PREFIX;
/* "%pure-parser" */
uniqstr PERCENT_PURE_PARSER;
/* "%yacc" */ /* "%yacc" */
uniqstr PERCENT_YACC; uniqstr PERCENT_YACC;
/* "[identifier]" */ /* "[identifier]" */
@@ -215,7 +218,7 @@ union GRAM_STYPE
/* "<tag>" */ /* "<tag>" */
uniqstr TAG; uniqstr TAG;
/* tag.opt */ /* tag.opt */
uniqstr yytype_72; uniqstr yytype_73;
/* tag */ /* tag */
uniqstr tag; uniqstr tag;
/* variable */ /* variable */
+22 -4
View File
@@ -49,7 +49,7 @@
#include "xmemdup0.h" #include "xmemdup0.h"
static int current_prec = 0; static int current_prec = 0;
static location current_lhs_location; static location current_lhs_loc;
static named_ref *current_lhs_named_ref; static named_ref *current_lhs_named_ref;
static symbol *current_lhs_symbol; static symbol *current_lhs_symbol;
static symbol_class current_class = unknown_sym; static symbol_class current_class = unknown_sym;
@@ -94,6 +94,9 @@
static void handle_name_prefix (location const *loc, static void handle_name_prefix (location const *loc,
char const *directive, char const *value); char const *directive, char const *value);
/* Handle a %pure-parser directive. */
static void handle_pure_parser (location const *loc, char const *directive);
/* Handle a %require directive. */ /* Handle a %require directive. */
static void handle_require (location const *loc, char const *version); static void handle_require (location const *loc, char const *version);
@@ -181,6 +184,7 @@
PERCENT_NONDETERMINISTIC_PARSER PERCENT_NONDETERMINISTIC_PARSER
"%nondeterministic-parser" "%nondeterministic-parser"
PERCENT_OUTPUT "%output" PERCENT_OUTPUT "%output"
PERCENT_PURE_PARSER "%pure-parser"
PERCENT_REQUIRE "%require" PERCENT_REQUIRE "%require"
PERCENT_SKELETON "%skeleton" PERCENT_SKELETON "%skeleton"
PERCENT_START "%start" PERCENT_START "%start"
@@ -219,7 +223,7 @@
%type <uniqstr> %type <uniqstr>
BRACKETED_ID ID ID_COLON BRACKETED_ID ID ID_COLON
PERCENT_ERROR_VERBOSE PERCENT_FILE_PREFIX PERCENT_FLAG PERCENT_NAME_PREFIX PERCENT_ERROR_VERBOSE PERCENT_FILE_PREFIX PERCENT_FLAG PERCENT_NAME_PREFIX
PERCENT_YACC PERCENT_PURE_PARSER PERCENT_YACC
TAG tag tag.opt variable TAG tag tag.opt variable
%printer { fputs ($$, yyo); } <uniqstr> %printer { fputs ($$, yyo); } <uniqstr>
%printer { fprintf (yyo, "[%s]", $$); } BRACKETED_ID %printer { fprintf (yyo, "[%s]", $$); } BRACKETED_ID
@@ -343,6 +347,7 @@ prologue_declaration:
| "%nondeterministic-parser" { nondeterministic_parser = true; } | "%nondeterministic-parser" { nondeterministic_parser = true; }
| "%output" STRING { spec_outfile = $2; } | "%output" STRING { spec_outfile = $2; }
| "%param" { current_param = $1; } params { current_param = param_none; } | "%param" { current_param = $1; } params { current_param = param_none; }
| "%pure-parser" { handle_pure_parser (&@$, $1); }
| "%require" STRING { handle_require (&@2, $2); } | "%require" STRING { handle_require (&@2, $2); }
| "%skeleton" STRING { handle_skeleton (&@2, $2); } | "%skeleton" STRING { handle_skeleton (&@2, $2); }
| "%token-table" { token_table_flag = true; } | "%token-table" { token_table_flag = true; }
@@ -651,7 +656,7 @@ rhses.1:
%token PERCENT_EMPTY "%empty"; %token PERCENT_EMPTY "%empty";
rhs: rhs:
%empty %empty
{ grammar_current_rule_begin (current_lhs_symbol, current_lhs_location, { grammar_current_rule_begin (current_lhs_symbol, current_lhs_loc,
current_lhs_named_ref); } current_lhs_named_ref); }
| rhs symbol named_ref.opt | rhs symbol named_ref.opt
{ grammar_current_rule_symbol_append ($2, @2, $3); } { grammar_current_rule_symbol_append ($2, @2, $3); }
@@ -910,6 +915,7 @@ handle_file_prefix (location const *loc,
deprecated_directive (dir_loc, directive, "%file-prefix"); deprecated_directive (dir_loc, directive, "%file-prefix");
} }
static void static void
handle_name_prefix (location const *loc, handle_name_prefix (location const *loc,
char const *directive, char const *value) char const *directive, char const *value)
@@ -944,6 +950,16 @@ handle_name_prefix (location const *loc,
} }
static void
handle_pure_parser (location const *loc, char const *directive)
{
bison_directive (loc, directive);
deprecated_directive (loc, directive, "%define api.pure");
muscle_percent_define_insert ("api.pure", *loc, muscle_keyword, "",
MUSCLE_PERCENT_DEFINE_GRAMMAR_FILE);
}
static void static void
handle_require (location const *loc, char const *version) handle_require (location const *loc, char const *version)
{ {
@@ -1006,6 +1022,7 @@ handle_skeleton (location const *loc, char const *skel)
skeleton_arg (skeleton_user, grammar_prio, *loc); skeleton_arg (skeleton_user, grammar_prio, *loc);
} }
static void static void
handle_yacc (location const *loc, char const *directive) handle_yacc (location const *loc, char const *directive)
{ {
@@ -1026,6 +1043,7 @@ handle_yacc (location const *loc, char const *directive)
deprecated_directive (loc, directive, "%fixed-output-files"); deprecated_directive (loc, directive, "%fixed-output-files");
} }
static void static void
gram_error (location const *loc, char const *msg) gram_error (location const *loc, char const *msg)
{ {
@@ -1050,7 +1068,7 @@ void
current_lhs (symbol *sym, location loc, named_ref *ref) current_lhs (symbol *sym, location loc, named_ref *ref)
{ {
current_lhs_symbol = sym; current_lhs_symbol = sym;
current_lhs_location = loc; current_lhs_loc = loc;
if (sym) if (sym)
symbol_location_as_lhs_set (sym, loc); symbol_location_as_lhs_set (sym, loc);
/* In order to simplify memory management, named references for lhs /* In order to simplify memory management, named references for lhs
+38 -37
View File
@@ -62,7 +62,7 @@ grammar_start_symbol_set (symbol *sym, location loc)
{ {
start_flag = true; start_flag = true;
startsymbol = sym; startsymbol = sym;
startsymbol_location = loc; startsymbol_loc = loc;
} }
} }
@@ -131,12 +131,12 @@ record_merge_function_type (int merger, uniqstr type, location declaration_loc)
quote (merge_function->name), type, quote (merge_function->name), type,
merge_function->type); merge_function->type);
indent += SUB_INDENT; indent += SUB_INDENT;
complain_indent (&merge_function->type_declaration_location, complaint, complain_indent (&merge_function->type_declaration_loc, complaint,
&indent, &indent,
_("previous declaration")); _("previous declaration"));
} }
merge_function->type = uniqstr_new (type); merge_function->type = uniqstr_new (type);
merge_function->type_declaration_location = declaration_loc; merge_function->type_declaration_loc = declaration_loc;
} }
/*--------------------------------------. /*--------------------------------------.
@@ -295,7 +295,7 @@ grammar_rule_check_and_complete (symbol_list *r)
char const *rhs_type = char const *rhs_type =
first_rhs->content->type_name ? first_rhs->content->type_name : ""; first_rhs->content->type_name ? first_rhs->content->type_name : "";
if (!UNIQSTR_EQ (lhs_type, rhs_type)) if (!UNIQSTR_EQ (lhs_type, rhs_type))
complain (&r->location, Wother, complain (&r->rhs_loc, Wother,
_("type clash on default action: <%s> != <%s>"), _("type clash on default action: <%s> != <%s>"),
lhs_type, rhs_type); lhs_type, rhs_type);
else else
@@ -308,7 +308,7 @@ grammar_rule_check_and_complete (symbol_list *r)
if (is_cxx) if (is_cxx)
{ {
code_props_rule_action_init (&r->action_props, "{ $$ = $1; }", code_props_rule_action_init (&r->action_props, "{ $$ = $1; }",
r->location, r, r->rhs_loc, r,
/* name */ NULL, /* name */ NULL,
/* type */ NULL, /* type */ NULL,
/* is_predicate */ false); /* is_predicate */ false);
@@ -318,7 +318,7 @@ grammar_rule_check_and_complete (symbol_list *r)
} }
/* Warn if there is no default for $$ but we need one. */ /* Warn if there is no default for $$ but we need one. */
else else
complain (&r->location, Wother, complain (&r->rhs_loc, Wother,
_("empty rule for typed nonterminal, and no action")); _("empty rule for typed nonterminal, and no action"));
} }
@@ -335,9 +335,9 @@ grammar_rule_check_and_complete (symbol_list *r)
{ {
warnings warn_flag = midrule_warning ? Wmidrule_values : Wother; warnings warn_flag = midrule_warning ? Wmidrule_values : Wother;
if (n) if (n)
complain (&l->location, warn_flag, _("unused value: $%d"), n); complain (&l->sym_loc, warn_flag, _("unused value: $%d"), n);
else else
complain (&l->location, warn_flag, _("unset value: $$")); complain (&l->rhs_loc, warn_flag, _("unset value: $$"));
} }
} }
} }
@@ -357,9 +357,10 @@ grammar_rule_check_and_complete (symbol_list *r)
&& !r->percent_empty_loc.start.file && !r->percent_empty_loc.start.file
&& warning_is_enabled (Wempty_rule)) && warning_is_enabled (Wempty_rule))
{ {
complain (&r->location, Wempty_rule, complain (&r->rhs_loc, Wempty_rule, _("empty rule without %%empty"));
_("empty rule without %%empty")); location loc = r->rhs_loc;
fixits_register (&r->location, " %empty "); loc.end = loc.start;
fixits_register (&loc, " %empty ");
} }
/* See comments in grammar_current_rule_prec_set for how POSIX /* See comments in grammar_current_rule_prec_set for how POSIX
@@ -369,12 +370,12 @@ grammar_rule_check_and_complete (symbol_list *r)
&& r->ruleprec->tag[0] != '\'' && r->ruleprec->tag[0] != '"' && r->ruleprec->tag[0] != '\'' && r->ruleprec->tag[0] != '"'
&& r->ruleprec->content->status != declared && r->ruleprec->content->status != declared
&& !r->ruleprec->content->prec) && !r->ruleprec->content->prec)
complain (&r->location, Wother, complain (&r->rhs_loc, Wother,
_("token for %%prec is not defined: %s"), r->ruleprec->tag); _("token for %%prec is not defined: %s"), r->ruleprec->tag);
/* Check that the (main) action was not typed. */ /* Check that the (main) action was not typed. */
if (r->action_props.type) if (r->action_props.type)
complain (&r->location, Wother, complain (&r->rhs_loc, Wother,
_("only midrule actions can be typed: %s"), r->action_props.type); _("only midrule actions can be typed: %s"), r->action_props.type);
} }
@@ -387,8 +388,8 @@ void
grammar_current_rule_end (location loc) grammar_current_rule_end (location loc)
{ {
/* Put an empty link in the list to mark the end of this rule */ /* Put an empty link in the list to mark the end of this rule */
grammar_symbol_append (NULL, grammar_end->location); grammar_symbol_append (NULL, grammar_end->rhs_loc);
current_rule->location = loc; current_rule->rhs_loc = loc;
} }
@@ -408,11 +409,11 @@ grammar_midrule_action (void)
/* Make a DUMMY nonterminal, whose location is that of the midrule /* Make a DUMMY nonterminal, whose location is that of the midrule
action. Create the MIDRULE. */ action. Create the MIDRULE. */
location dummy_location = current_rule->action_props.location; location dummy_loc = current_rule->action_props.location;
symbol *dummy = dummy_symbol_get (dummy_location); symbol *dummy = dummy_symbol_get (dummy_loc);
symbol_type_set(dummy, symbol_type_set(dummy,
current_rule->action_props.type, current_rule->action_props.location); current_rule->action_props.type, current_rule->action_props.location);
symbol_list *midrule = symbol_list_sym_new (dummy, dummy_location); symbol_list *midrule = symbol_list_sym_new (dummy, dummy_loc);
/* Remember named_ref of previous action. */ /* Remember named_ref of previous action. */
named_ref *action_name = current_rule->action_props.named_ref; named_ref *action_name = current_rule->action_props.named_ref;
@@ -422,7 +423,7 @@ grammar_midrule_action (void)
++nrules; ++nrules;
++nritems; ++nritems;
/* Attach its location and actions to that of the DUMMY. */ /* Attach its location and actions to that of the DUMMY. */
midrule->location = dummy_location; midrule->rhs_loc = dummy_loc;
code_props_rule_action_init (&midrule->action_props, code_props_rule_action_init (&midrule->action_props,
current_rule->action_props.code, current_rule->action_props.code,
current_rule->action_props.location, current_rule->action_props.location,
@@ -443,14 +444,14 @@ grammar_midrule_action (void)
grammar = midrule; grammar = midrule;
/* End the dummy's rule. */ /* End the dummy's rule. */
midrule->next = symbol_list_sym_new (NULL, dummy_location); midrule->next = symbol_list_sym_new (NULL, dummy_loc);
midrule->next->next = current_rule; midrule->next->next = current_rule;
previous_rule_end = midrule->next; previous_rule_end = midrule->next;
/* Insert the dummy nonterminal replacing the midrule action into /* Insert the dummy nonterminal replacing the midrule action into
the current rule. Bind it to its dedicated rule. */ the current rule. Bind it to its dedicated rule. */
grammar_current_rule_symbol_append (dummy, dummy_location, grammar_current_rule_symbol_append (dummy, dummy_loc,
action_name); action_name);
grammar_end->midrule = midrule; grammar_end->midrule = midrule;
midrule->midrule_parent_rule = current_rule; midrule->midrule_parent_rule = current_rule;
@@ -509,11 +510,11 @@ grammar_current_rule_dprec_set (int dprec, location loc)
"%dprec"); "%dprec");
else if (current_rule->dprec != 0) else if (current_rule->dprec != 0)
duplicate_rule_directive ("%dprec", duplicate_rule_directive ("%dprec",
current_rule->dprec_location, loc); current_rule->dprec_loc, loc);
else else
{ {
current_rule->dprec = dprec; current_rule->dprec = dprec;
current_rule->dprec_location = loc; current_rule->dprec_loc = loc;
} }
} }
@@ -528,11 +529,11 @@ grammar_current_rule_merge_set (uniqstr name, location loc)
"%merge"); "%merge");
if (current_rule->merger != 0) if (current_rule->merger != 0)
duplicate_rule_directive ("%merge", duplicate_rule_directive ("%merge",
current_rule->merger_declaration_location, loc); current_rule->merger_declaration_loc, loc);
else else
{ {
current_rule->merger = get_merge_function (name); current_rule->merger = get_merge_function (name);
current_rule->merger_declaration_location = loc; current_rule->merger_declaration_loc = loc;
} }
} }
@@ -622,7 +623,7 @@ packgram (void)
{ {
symbol_list *lhs = p; symbol_list *lhs = p;
record_merge_function_type (lhs->merger, lhs->content.sym->content->type_name, record_merge_function_type (lhs->merger, lhs->content.sym->content->type_name,
lhs->merger_declaration_location); lhs->merger_declaration_loc);
/* If the midrule's $$ is set or its $n is used, remove the '$' from the /* If the midrule's $$ is set or its $n is used, remove the '$' from the
symbol name so that it's a user-defined symbol so that the default symbol name so that it's a user-defined symbol so that the default
%destructor and %printer apply. */ %destructor and %printer apply. */
@@ -647,10 +648,10 @@ packgram (void)
rules[ruleno].dprec = lhs->dprec; rules[ruleno].dprec = lhs->dprec;
rules[ruleno].merger = lhs->merger; rules[ruleno].merger = lhs->merger;
rules[ruleno].precsym = NULL; rules[ruleno].precsym = NULL;
rules[ruleno].location = lhs->location; rules[ruleno].location = lhs->rhs_loc;
rules[ruleno].useful = true; rules[ruleno].useful = true;
rules[ruleno].action = lhs->action_props.code; rules[ruleno].action = lhs->action_props.code;
rules[ruleno].action_location = lhs->action_props.location; rules[ruleno].action_loc = lhs->action_props.location;
rules[ruleno].is_predicate = lhs->action_props.is_predicate; rules[ruleno].is_predicate = lhs->action_props.is_predicate;
rules[ruleno].expected_sr_conflicts = lhs->expected_sr_conflicts; rules[ruleno].expected_sr_conflicts = lhs->expected_sr_conflicts;
rules[ruleno].expected_rr_conflicts = lhs->expected_rr_conflicts; rules[ruleno].expected_rr_conflicts = lhs->expected_rr_conflicts;
@@ -713,18 +714,18 @@ reader (void)
symbols_new (); symbols_new ();
/* Construct the accept symbol. */ /* Construct the accept symbol. */
accept = symbol_get ("$accept", empty_location); accept = symbol_get ("$accept", empty_loc);
accept->content->class = nterm_sym; accept->content->class = nterm_sym;
accept->content->number = nvars++; accept->content->number = nvars++;
/* Construct the error token */ /* Construct the error token */
errtoken = symbol_get ("error", empty_location); errtoken = symbol_get ("error", empty_loc);
errtoken->content->class = token_sym; errtoken->content->class = token_sym;
errtoken->content->number = ntokens++; errtoken->content->number = ntokens++;
/* Construct a token that represents all undefined literal tokens. /* Construct a token that represents all undefined literal tokens.
It is always token number 2. */ It is always token number 2. */
undeftoken = symbol_get ("$undefined", empty_location); undeftoken = symbol_get ("$undefined", empty_loc);
undeftoken->content->class = token_sym; undeftoken->content->class = token_sym;
undeftoken->content->number = ntokens++; undeftoken->content->number = ntokens++;
@@ -801,7 +802,7 @@ check_and_convert_grammar (void)
/* If the user did not define her ENDTOKEN, do it now. */ /* If the user did not define her ENDTOKEN, do it now. */
if (!endtoken) if (!endtoken)
{ {
endtoken = symbol_get ("$end", empty_location); endtoken = symbol_get ("$end", empty_loc);
endtoken->content->class = token_sym; endtoken->content->class = token_sym;
endtoken->content->number = 0; endtoken->content->number = 0;
/* Value specified by POSIX. */ /* Value specified by POSIX. */
@@ -823,11 +824,11 @@ check_and_convert_grammar (void)
$accept: %start $end. */ $accept: %start $end. */
{ {
symbol_list *p = symbol_list_sym_new (accept, empty_location); symbol_list *p = symbol_list_sym_new (accept, empty_loc);
p->location = grammar->location; p->rhs_loc = grammar->rhs_loc;
p->next = symbol_list_sym_new (startsymbol, empty_location); p->next = symbol_list_sym_new (startsymbol, empty_loc);
p->next->next = symbol_list_sym_new (endtoken, empty_location); p->next->next = symbol_list_sym_new (endtoken, empty_loc);
p->next->next->next = symbol_list_sym_new (NULL, empty_location); p->next->next->next = symbol_list_sym_new (NULL, empty_loc);
p->next->next->next->next = grammar; p->next->next->next->next = grammar;
nrules += 1; nrules += 1;
nritems += 3; nritems += 3;
+1 -1
View File
@@ -32,7 +32,7 @@ typedef struct merger_list
struct merger_list* next; struct merger_list* next;
uniqstr name; uniqstr name;
uniqstr type; uniqstr type;
location type_declaration_location; location type_declaration_loc;
} merger_list; } merger_list;
/* From the parser. */ /* From the parser. */
+1 -1
View File
@@ -382,7 +382,7 @@ reduce_grammar (void)
reduce_print (); reduce_print ();
if (!bitset_test (N, accept->content->number - ntokens)) if (!bitset_test (N, accept->content->number - ntokens))
complain (&startsymbol_location, fatal, complain (&startsymbol_loc, fatal,
_("start symbol %s does not derive any sentence"), _("start symbol %s does not derive any sentence"),
startsymbol->tag); startsymbol->tag);
+5 -5
View File
@@ -57,8 +57,8 @@ static void handle_action_at (symbol_list *rule, char *cp, location at_loc);
/* A string to be pushed to obstack after dollar/at has been handled. */ /* A string to be pushed to obstack after dollar/at has been handled. */
static char *ref_tail_fields; static char *ref_tail_fields;
static location the_location; static location current_loc;
static location *loc = &the_location; static location *loc = &current_loc;
/* A string representing the most recent translation. */ /* A string representing the most recent translation. */
static char *last_string; static char *last_string;
@@ -187,7 +187,7 @@ ref -?[0-9]+|{id}|"["{id}"]"|"$"
} }
"@$" { "@$" {
obstack_sgrow (&obstack_for_string, "]b4_at_dollar["); obstack_sgrow (&obstack_for_string, "]b4_at_dollar[");
muscle_percent_define_ensure("locations", the_location, true); muscle_percent_define_ensure("locations", *loc, true);
} }
} }
@@ -507,12 +507,12 @@ parse_ref (char *cp, symbol_list *rule, int rule_length,
dollar_or_at); dollar_or_at);
} }
else if (midrule_rhs_index) else if (midrule_rhs_index)
complain_indent (&rule->location, complaint, &indent, complain_indent (&rule->rhs_loc, complaint, &indent,
_("symbol not found in production before $%d: " _("symbol not found in production before $%d: "
"%.*s"), "%.*s"),
midrule_rhs_index, len, cp); midrule_rhs_index, len, cp);
else else
complain_indent (&rule->location, complaint, &indent, complain_indent (&rule->rhs_loc, complaint, &indent,
_("symbol not found in production: %.*s"), _("symbol not found in production: %.*s"),
len, cp); len, cp);
+5 -3
View File
@@ -161,7 +161,7 @@ eqopt ({sp}=)?
int context_state PACIFY_CC (= 0); int context_state PACIFY_CC (= 0);
/* Location of most recent identifier, when applicable. */ /* Location of most recent identifier, when applicable. */
location id_loc PACIFY_CC (= empty_location); location id_loc PACIFY_CC (= empty_loc);
/* Where containing code started, when applicable. Its initial /* Where containing code started, when applicable. Its initial
value is relevant only when yylex is invoked in the SC_EPILOGUE value is relevant only when yylex is invoked in the SC_EPILOGUE
@@ -252,7 +252,6 @@ eqopt ({sp}=)?
"%prec" return PERCENT_PREC; "%prec" return PERCENT_PREC;
"%precedence" return BISON_DIRECTIVE (PRECEDENCE); "%precedence" return BISON_DIRECTIVE (PRECEDENCE);
"%printer" return BISON_DIRECTIVE (PRINTER); "%printer" return BISON_DIRECTIVE (PRINTER);
"%pure-parser" RETURN_PERCENT_FLAG ("api.pure");
"%require" return BISON_DIRECTIVE (REQUIRE); "%require" return BISON_DIRECTIVE (REQUIRE);
"%right" return PERCENT_RIGHT; "%right" return PERCENT_RIGHT;
"%skeleton" return BISON_DIRECTIVE (SKELETON); "%skeleton" return BISON_DIRECTIVE (SKELETON);
@@ -265,6 +264,10 @@ eqopt ({sp}=)?
"%verbose" return BISON_DIRECTIVE (VERBOSE); "%verbose" return BISON_DIRECTIVE (VERBOSE);
"%yacc" RETURN_VALUE (PERCENT_YACC, uniqstr_new (yytext)); "%yacc" RETURN_VALUE (PERCENT_YACC, uniqstr_new (yytext));
/* Deprecated since Bison 2.3b (2008-05-27), but the warning is
issued only since Bison 3.4. */
"%pure"[-_]"parser" RETURN_VALUE (PERCENT_PURE_PARSER, uniqstr_new (yytext));
/* Deprecated since Bison 3.0 (2013-07-25), but the warning is /* Deprecated since Bison 3.0 (2013-07-25), but the warning is
issued only since Bison 3.3. */ issued only since Bison 3.3. */
"%error-verbose" RETURN_VALUE (PERCENT_ERROR_VERBOSE, uniqstr_new (yytext)); "%error-verbose" RETURN_VALUE (PERCENT_ERROR_VERBOSE, uniqstr_new (yytext));
@@ -282,7 +285,6 @@ eqopt ({sp}=)?
"%no"[-_]"default"[-_]"prec" DEPRECATED ("%no-default-prec"); "%no"[-_]"default"[-_]"prec" DEPRECATED ("%no-default-prec");
"%no"[-_]"lines" DEPRECATED ("%no-lines"); "%no"[-_]"lines" DEPRECATED ("%no-lines");
"%output"{eqopt} DEPRECATED ("%output"); "%output"{eqopt} DEPRECATED ("%output");
"%pure"[-_]"parser" DEPRECATED ("%pure-parser");
"%token"[-_]"table" DEPRECATED ("%token-table"); "%token"[-_]"table" DEPRECATED ("%token-table");
"%"{id} { "%"{id} {
+6 -5
View File
@@ -34,7 +34,7 @@ symbol_list_sym_new (symbol *sym, location loc)
res->content_type = SYMLIST_SYMBOL; res->content_type = SYMLIST_SYMBOL;
res->content.sym = sym; res->content.sym = sym;
res->location = res->sym_loc = loc; res->sym_loc = loc;
res->named_ref = NULL; res->named_ref = NULL;
res->midrule = NULL; res->midrule = NULL;
@@ -42,13 +42,14 @@ symbol_list_sym_new (symbol *sym, location loc)
res->midrule_parent_rhs_index = 0; res->midrule_parent_rhs_index = 0;
/* Members used for LHS only. */ /* Members used for LHS only. */
res->rhs_loc = empty_loc;
res->ruleprec = NULL; res->ruleprec = NULL;
res->percent_empty_loc = empty_location; res->percent_empty_loc = empty_loc;
code_props_none_init (&res->action_props); code_props_none_init (&res->action_props);
res->dprec = 0; res->dprec = 0;
res->dprec_location = empty_location; res->dprec_loc = empty_loc;
res->merger = 0; res->merger = 0;
res->merger_declaration_location = empty_location; res->merger_declaration_loc = empty_loc;
res->expected_sr_conflicts = -1; res->expected_sr_conflicts = -1;
res->expected_rr_conflicts = -1; res->expected_rr_conflicts = -1;
@@ -73,7 +74,7 @@ symbol_list_type_new (uniqstr type_name, location loc)
res->content.sem_type->location = loc; res->content.sem_type->location = loc;
res->content.sem_type->status = undeclared; res->content.sem_type->status = undeclared;
res->location = res->sym_loc = loc; res->sym_loc = loc;
res->named_ref = NULL; res->named_ref = NULL;
res->next = NULL; res->next = NULL;
+6 -4
View File
@@ -50,7 +50,6 @@ typedef struct symbol_list
*/ */
semantic_type *sem_type; semantic_type *sem_type;
} content; } content;
location location;
/* Named reference. */ /* Named reference. */
named_ref *named_ref; named_ref *named_ref;
@@ -74,6 +73,9 @@ typedef struct symbol_list
| when several RHSs are bound to a single lhs via "|"). | | when several RHSs are bound to a single lhs via "|"). |
`--------------------------------------------------------------*/ `--------------------------------------------------------------*/
/* Location of the RHS. */
location rhs_loc;
/* Precedence/associativity. */ /* Precedence/associativity. */
symbol *ruleprec; symbol *ruleprec;
@@ -82,13 +84,13 @@ typedef struct symbol_list
code_props action_props; code_props action_props;
/* The location of the first %empty for this rule, or \a /* The location of the first %empty for this rule, or \a
empty_location. */ empty_loc. */
location percent_empty_loc; location percent_empty_loc;
int dprec; int dprec;
location dprec_location; location dprec_loc;
int merger; int merger;
location merger_declaration_location; location merger_declaration_loc;
/* Counts of the number of expected conflicts for this rule, or -1 if none /* Counts of the number of expected conflicts for this rule, or -1 if none
given. */ given. */
+15 -15
View File
@@ -46,7 +46,7 @@ symbol *undeftoken = NULL;
symbol *endtoken = NULL; symbol *endtoken = NULL;
symbol *accept = NULL; symbol *accept = NULL;
symbol *startsymbol = NULL; symbol *startsymbol = NULL;
location startsymbol_location; location startsymbol_loc;
/* Precedence relation graph. */ /* Precedence relation graph. */
static symgraph **prec_nodes; static symgraph **prec_nodes;
@@ -198,7 +198,7 @@ semantic_type_new (uniqstr tag, const location *loc)
uniqstr_assert (tag); uniqstr_assert (tag);
res->tag = tag; res->tag = tag;
res->location = loc ? *loc : empty_location; res->location = loc ? *loc : empty_loc;
res->status = undeclared; res->status = undeclared;
for (int i = 0; i < CODE_PROPS_SIZE; ++i) for (int i = 0; i < CODE_PROPS_SIZE; ++i)
code_props_none_init (&res->props[i]); code_props_none_init (&res->props[i]);
@@ -339,12 +339,12 @@ symbol_type_set (symbol *sym, uniqstr type_name, location loc)
tag_seen = true; tag_seen = true;
if (sym->content->type_name) if (sym->content->type_name)
complain_symbol_redeclared (sym, "%type", complain_symbol_redeclared (sym, "%type",
sym->content->type_location, loc); sym->content->type_loc, loc);
else else
{ {
uniqstr_assert (type_name); uniqstr_assert (type_name);
sym->content->type_name = type_name; sym->content->type_name = type_name;
sym->content->type_location = loc; sym->content->type_loc = loc;
} }
} }
} }
@@ -426,12 +426,12 @@ symbol_precedence_set (symbol *sym, int prec, assoc a, location loc)
sym_content *s = sym->content; sym_content *s = sym->content;
if (s->prec) if (s->prec)
complain_symbol_redeclared (sym, assoc_to_string (a), complain_symbol_redeclared (sym, assoc_to_string (a),
s->prec_location, loc); s->prec_loc, loc);
else else
{ {
s->prec = prec; s->prec = prec;
s->assoc = a; s->assoc = a;
s->prec_location = loc; s->prec_loc = loc;
} }
} }
@@ -587,10 +587,10 @@ symbol_merge_properties (symbol *sym, symbol *str)
{ {
if (str->content->type_name) if (str->content->type_name)
symbol_type_set (sym, symbol_type_set (sym,
str->content->type_name, str->content->type_location); str->content->type_name, str->content->type_loc);
else else
symbol_type_set (str, symbol_type_set (str,
sym->content->type_name, sym->content->type_location); sym->content->type_name, sym->content->type_loc);
} }
@@ -604,10 +604,10 @@ symbol_merge_properties (symbol *sym, symbol *str)
{ {
if (str->content->prec) if (str->content->prec)
symbol_precedence_set (sym, str->content->prec, str->content->assoc, symbol_precedence_set (sym, str->content->prec, str->content->assoc,
str->content->prec_location); str->content->prec_loc);
else else
symbol_precedence_set (str, sym->content->prec, sym->content->assoc, symbol_precedence_set (str, sym->content->prec, sym->content->assoc,
sym->content->prec_location); sym->content->prec_loc);
} }
} }
@@ -1034,11 +1034,11 @@ symbols_pack (void)
symbols_token_translations_init (); symbols_token_translations_init ();
if (startsymbol->content->class == unknown_sym) if (startsymbol->content->class == unknown_sym)
complain (&startsymbol_location, fatal, complain (&startsymbol_loc, fatal,
_("the start symbol %s is undefined"), _("the start symbol %s is undefined"),
startsymbol->tag); startsymbol->tag);
else if (startsymbol->content->class == token_sym) else if (startsymbol->content->class == token_sym)
complain (&startsymbol_location, fatal, complain (&startsymbol_loc, fatal,
_("the start symbol %s is a token"), _("the start symbol %s is a token"),
startsymbol->tag); startsymbol->tag);
} }
@@ -1209,14 +1209,14 @@ print_precedence_warnings (void)
&& !prec_nodes[i]->succ) && !prec_nodes[i]->succ)
{ {
if (is_assoc_useless (s)) if (is_assoc_useless (s))
complain (&s->content->prec_location, Wprecedence, complain (&s->content->prec_loc, Wprecedence,
_("useless precedence and associativity for %s"), s->tag); _("useless precedence and associativity for %s"), s->tag);
else if (s->content->assoc == precedence_assoc) else if (s->content->assoc == precedence_assoc)
complain (&s->content->prec_location, Wprecedence, complain (&s->content->prec_loc, Wprecedence,
_("useless precedence for %s"), s->tag); _("useless precedence for %s"), s->tag);
} }
else if (is_assoc_useless (s)) else if (is_assoc_useless (s))
complain (&s->content->prec_location, Wprecedence, complain (&s->content->prec_loc, Wprecedence,
_("useless associativity for %s, use %%precedence"), s->tag); _("useless associativity for %s, use %%precedence"), s->tag);
} }
free (used_assoc); free (used_assoc);
+3 -3
View File
@@ -122,7 +122,7 @@ struct sym_content
uniqstr type_name; uniqstr type_name;
/** Its \c \%type's location. */ /** Its \c \%type's location. */
location type_location; location type_loc;
/** Any \c \%destructor (resp. \%printer) declared specificially for this /** Any \c \%destructor (resp. \%printer) declared specificially for this
symbol. symbol.
@@ -134,7 +134,7 @@ struct sym_content
code_props props[CODE_PROPS_SIZE]; code_props props[CODE_PROPS_SIZE];
symbol_number number; symbol_number number;
location prec_location; location prec_loc;
int prec; int prec;
assoc assoc; assoc assoc;
@@ -246,7 +246,7 @@ extern symbol *accept;
/** The user start symbol. */ /** The user start symbol. */
extern symbol *startsymbol; extern symbol *startsymbol;
/** The location of the \c \%start declaration. */ /** The location of the \c \%start declaration. */
extern location startsymbol_location; extern location startsymbol_loc;
/** Whether a symbol declared with a type tag. */ /** Whether a symbol declared with a type tag. */
extern bool tag_seen; extern bool tag_seen;
+43 -11
View File
@@ -196,16 +196,8 @@ one.y:11.3-8: previous declaration
bison: file 'one.y' was updated (backup: 'one.y~') bison: file 'one.y' was updated (backup: 'one.y~')
]]) ]])
AT_CHECK([cat one.y], [], AT_CHECK([sed -e '1,8d' one.y], [],
[[%code top { [[%%
/* Load config.h, and adjust to the compiler.
We used to do it here, but each time we add a new line,
we have to adjust all the line numbers in error messages.
It's simpler to use a constant include to a varying file. */
#include <testsuite.h>
}
%%
exp: exp:
%empty {} @&t@ %empty {} @&t@
; ;
@@ -267,6 +259,46 @@ AT_BISON_OPTION_POPDEFS
AT_CLEANUP AT_CLEANUP
## -------------------- ##
## Add missing %empty. ##
## -------------------- ##
AT_SETUP([Add missing %empty])
AT_DATA([input.y],
[[%%
exp: a b c d e
a: {}
b:{
};
c:
d
:
e:
%%
]])
AT_BISON_CHECK([--update -Wall input.y], [], [], [ignore])
AT_CHECK([cat input.y], [],
[[%%
exp: a b c d e
a: %empty {}
b: %empty {
};
c: %empty @&t@
d
: %empty @&t@
e: %empty @&t@
%%
]])
# No warnings.
AT_BISON_CHECK([-Wall input.y])
AT_CLEANUP
## ------------------ ## ## ------------------ ##
## Initial location. ## ## Initial location. ##
## ------------------ ## ## ------------------ ##
@@ -1838,7 +1870,7 @@ AT_DATA_GRAMMAR([input.y],
[[ [[
%define parse.error verbose %define parse.error verbose
%debug %debug
%pure-parser %define api.pure
%code { %code {
# include <stdio.h> # include <stdio.h>
# include <stdlib.h> # include <stdlib.h>
+6
View File
@@ -118,8 +118,14 @@ fi
## Other. ## ## Other. ##
## ------- ## ## ------- ##
# Empty if no D compiler was found.
: ${DC='@DC@'} : ${DC='@DC@'}
: ${DCFLAGS='@DCFLAGS@'} : ${DCFLAGS='@DCFLAGS@'}
if test x"$DC" = x; then
BISON_DC_WORKS=false
else
BISON_DC_WORKS=true
fi
# Empty if no javac was found # Empty if no javac was found
: ${CONF_JAVAC='@CONF_JAVAC@'} : ${CONF_JAVAC='@CONF_JAVAC@'}
+1 -1
View File
@@ -893,7 +893,7 @@ error-reduce:
consistent-error: consistent-error:
'a' 'a'
| /*empty*/ %prec 'a' | %empty %prec 'a'
; ;
// Provide another context in which all rules are useful so that this // Provide another context in which all rules are useful so that this
+5 -5
View File
@@ -278,17 +278,17 @@ AT_DATA([[input.y]],
[[%expect 1 [[%expect 1
%% %%
exp: e 'e'; exp: e 'e';
e: 'e' | /* Nothing. */; e: 'e' | %empty;
]]) ]])
AT_BISON_CHECK([-o input.c input.y], 0, [], AT_BISON_CHECK([-o input.c input.y], 0, [],
[[input.y:4.9: warning: rule useless in parser due to conflicts [-Wother] [[input.y:4.10-15: warning: rule useless in parser due to conflicts [-Wother]
]]) ]])
AT_BISON_CHECK([-fcaret -o input.c input.y], 0, [], AT_BISON_CHECK([-fcaret -o input.c input.y], 0, [],
[[input.y:4.9: warning: rule useless in parser due to conflicts [-Wother] [[input.y:4.10-15: warning: rule useless in parser due to conflicts [-Wother]
4 | e: 'e' | /* Nothing. */; 4 | e: 'e' | %empty;
| ^ | ^~~~~~
]]) ]])
AT_CLEANUP AT_CLEANUP
+4 -2
View File
@@ -20,6 +20,8 @@ AT_BANNER([[Diagnostics.]])
# AT_TEST($1: TITLE, $2: GRAMMAR, $3: EXIT-STATUS, $4: OUTPUT-WITH-STYLE) # AT_TEST($1: TITLE, $2: GRAMMAR, $3: EXIT-STATUS, $4: OUTPUT-WITH-STYLE)
# ----------------------------------------------------------------------- # -----------------------------------------------------------------------
# Run Bison on GRAMMAR with debugging style enabled, and expect
# OUTPUT-WITH-STYLE as diagnostics.
m4_pushdef([AT_TEST], m4_pushdef([AT_TEST],
[ [
AT_SETUP([$1]) AT_SETUP([$1])
@@ -43,7 +45,7 @@ AT_CHECK([perl -p -e 's{</?\w+>}{}g' <experr.orig >experr])
AT_CHECK([LC_ALL=en_US.UTF-8 bison -fcaret -Wall input.y], [$3], [], [experr]) AT_CHECK([LC_ALL=en_US.UTF-8 bison -fcaret -Wall input.y], [$3], [], [experr])
AT_CHECK([cp experr.orig experr]) AT_CHECK([cp experr.orig experr])
AT_CHECK([LC_ALL=en_US.UTF-8 bison -fcaret --style=debug -Wall input.y], [$3], [], [experr]) AT_CHECK([LC_ALL=en_US.UTF-8 bison -fcaret --color=debug -Wall input.y], [$3], [], [experr])
AT_BISON_OPTION_POPDEFS AT_BISON_OPTION_POPDEFS
@@ -221,7 +223,7 @@ input.y: <warning>warning:</warning> fix-its can be applied. Rerun with option
# Locations coming from m4 need the byte-column for diagnostics. # Locations coming from m4 need the byte-column for diagnostics.
AT_TEST([[Locations from M4]], AT_TEST([[Tabulations and multibyte characters from M4]],
[[%define api.prefix {sun} [[%define api.prefix {sun}
%define api.prefix {🌞} %define api.prefix {🌞}
%% %%
+3 -3
View File
@@ -591,7 +591,7 @@ AT_DATA_GRAMMAR([glr-regr7.y],
start: start:
stack1 start stack1 start
| stack2 start | stack2 start
| /* empty */ | %empty
; ;
stack1: 'a' ; stack1: 'a' ;
stack2: 'a' ; stack2: 'a' ;
@@ -680,11 +680,11 @@ InterfaceDeclaration : OptConstantWord %dprec 1
| OptSignalWord %dprec 2 | OptSignalWord %dprec 2
; ;
OptConstantWord : /* empty */ OptConstantWord : %empty
| T_CONSTANT | T_CONSTANT
; ;
OptSignalWord : /* empty */ OptSignalWord : %empty
{ printf("empty: %d/%d\n", @$.first_column, @$.last_column); } { printf("empty: %d/%d\n", @$.first_column, @$.last_column); }
| T_SIGNAL | T_SIGNAL
; ;
+5 -14
View File
@@ -2556,8 +2556,8 @@ input.y:23.1-9: warning: deprecated directive: '%no_lines', use '%no-lines' [-Wd
fix-it:"input.y":{23:1-23:10}:"%no-lines" fix-it:"input.y":{23:1-23:10}:"%no-lines"
input.y:24.1-9: warning: deprecated directive: '%output =', use '%output' [-Wdeprecated] input.y:24.1-9: warning: deprecated directive: '%output =', use '%output' [-Wdeprecated]
fix-it:"input.y":{24:1-24:10}:"%output" fix-it:"input.y":{24:1-24:10}:"%output"
input.y:25.1-12: warning: deprecated directive: '%pure_parser', use '%pure-parser' [-Wdeprecated] input.y:25.1-12: warning: deprecated directive: '%pure_parser', use '%define api.pure' [-Wdeprecated]
fix-it:"input.y":{25:1-25:13}:"%pure-parser" fix-it:"input.y":{25:1-25:13}:"%define api.pure"
input.y:26.1-12: warning: deprecated directive: '%token_table', use '%token-table' [-Wdeprecated] input.y:26.1-12: warning: deprecated directive: '%token_table', use '%token-table' [-Wdeprecated]
fix-it:"input.y":{26:1-26:13}:"%token-table" fix-it:"input.y":{26:1-26:13}:"%token-table"
input.y:27.1-14: warning: %define variable 'parse.error' redefined [-Wother] input.y:27.1-14: warning: %define variable 'parse.error' redefined [-Wother]
@@ -2590,16 +2590,8 @@ AT_CHECK([diff input.y.orig input.y~])
AT_CHECK([test ! -f output.c]) AT_CHECK([test ! -f output.c])
# Check the update. # Check the update.
AT_CHECK([cat input.y], [], AT_CHECK([sed -e '1,8d' input.y], [],
[[%code top { [[
/* Load config.h, and adjust to the compiler.
We used to do it here, but each time we add a new line,
we have to adjust all the line numbers in error messages.
It's simpler to use a constant include to a varying file. */
#include <testsuite.h>
}
%default-prec %default-prec
%define parse.error verbose %define parse.error verbose
%expect-rr 0 %expect-rr 0
@@ -2611,7 +2603,7 @@ AT_CHECK([cat input.y], [],
%no-default-prec %no-default-prec
%no-lines %no-lines
%output "output.c" %output "output.c"
%pure-parser %define api.pure
%token-table %token-table
%glr-parser %glr-parser
%% %%
@@ -2686,7 +2678,6 @@ AT_DATA_GRAMMAR([[input.y]],
%no-default-prec %no-default-prec
%no-lines %no-lines
%output "foo" %output "foo"
%pure-parser
%token-table %token-table
%% exp : '0' %% exp : '0'
]]) ]])
+4 -3
View File
@@ -390,7 +390,7 @@ m4_define([AT_DATA_SOURCE_PROLOGUE],
# AT_DATA_GRAMMAR_PROLOGUE # AT_DATA_GRAMMAR_PROLOGUE
# ------------------------ # ------------------------
# The prologue that should be included in any grammar which parser is # The prologue that should be included in any grammar whose parser is
# meant to be compiled. # meant to be compiled.
m4_define([AT_DATA_GRAMMAR_PROLOGUE], m4_define([AT_DATA_GRAMMAR_PROLOGUE],
[[%code top { [[%code top {
@@ -400,7 +400,7 @@ m4_define([AT_DATA_GRAMMAR_PROLOGUE],
# AT_DATA_SOURCE(NAME, CONTENT) # AT_DATA_SOURCE(NAME, CONTENT)
# ----------------------------- # -----------------------------
# Generate the file NAME, which CONTENT is preceded by # Generate the file NAME, whose CONTENT is preceded by
# AT_DATA_SOURCE_PROLOGUE. # AT_DATA_SOURCE_PROLOGUE.
m4_define([AT_DATA_SOURCE], m4_define([AT_DATA_SOURCE],
[AT_DATA([$1], [AT_DATA([$1],
@@ -411,7 +411,7 @@ $2])
# AT_DATA_GRAMMAR(NAME, CONTENT) # AT_DATA_GRAMMAR(NAME, CONTENT)
# ------------------------------ # ------------------------------
# Generate the file NAME, which CONTENT is preceded by # Generate the file NAME, whose CONTENT is preceded by
# AT_DATA_GRAMMAR_PROLOGUE. # AT_DATA_GRAMMAR_PROLOGUE.
m4_define([AT_DATA_GRAMMAR], [AT_LANG_DISPATCH([$0], $@)]) m4_define([AT_DATA_GRAMMAR], [AT_LANG_DISPATCH([$0], $@)])
@@ -977,6 +977,7 @@ AT_CHECK(m4_join([ ],
# with trailing ".o" removed, and ".cc" appended. # with trailing ".o" removed, and ".cc" appended.
m4_define([AT_COMPILE_D], m4_define([AT_COMPILE_D],
[AT_KEYWORDS(d) [AT_KEYWORDS(d)
AT_SKIP_IF([[! $BISON_DC_WORKS]])
AT_CHECK(m4_join([ ], AT_CHECK(m4_join([ ],
[$DC $DCFLAGS $3], [$DC $DCFLAGS $3],
[m4_bmatch([$1], [[.]], [-c])], [m4_bmatch([$1], [[.]], [-c])],
+10
View File
@@ -90,7 +90,17 @@ m4_define([_AT_SYNCLINES_COMPILE],
# syncline.c:4:2: error: #error "4" # syncline.c:4:2: error: #error "4"
# #error "4" # #error "4"
# ^~~~~ # ^~~~~
#
# GCC 9 displays a left-hand margin with the line number:
#
# syncline.c: In function 'foo':
# syncline.c:4:2: error: #error "4"
# 4 | #error "4"
# | ^~~~~
AT_CHECK([[$PERL -p -0777 - stderr <<\EOF AT_CHECK([[$PERL -p -0777 - stderr <<\EOF
# Remove left-hand margin.
s/^[\d ]{6}\| //gm;
# 1. Remove useless lines. # 1. Remove useless lines.
# distcc clutter. # distcc clutter.