mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 12:23:04 +00:00
glr2.cc: fork glr.cc to a c++ version
This is a fork of glr.cc to be c++-first instead of a wrapper around glr.c. * data/skeletons/glr2.cc: New. * data/skeletons/bison.m4, data/skeletons/c++.m4: Adjust. * data/skeletons/c.m4 (b4_user_args_no_comma): New. * src/reader.c (grammar_rule_check_and_complete): glr2.cc is C++. * tests/actions.at, tests/c++.at, tests/calc.at, tests/conflicts.at, * tests/input.at, tests/local.at, tests/regression.at, tests/scanner.at, * tests/synclines.at, tests/types.at: Also check glr2.cc.
This commit is contained in:
committed by
Akim Demaille
parent
a1b7fef045
commit
ef09bf065a
13
NEWS
13
NEWS
@@ -6,6 +6,19 @@ GNU Bison NEWS
|
|||||||
|
|
||||||
Push parsers use YYMALLOC/YYFREE instead of direct calls to malloc/free.
|
Push parsers use YYMALLOC/YYFREE instead of direct calls to malloc/free.
|
||||||
|
|
||||||
|
** Changes
|
||||||
|
|
||||||
|
A new version of the generated C++ GLR parser was added as "glr2.cc". It
|
||||||
|
is forked from the existing glr.c/cc parser, with the objective of making
|
||||||
|
it a more modern, truly C++ parser (instead of a C++ wrapper around a C
|
||||||
|
parser). Down the line, the goal is to support `%define api.value.type
|
||||||
|
variant` and maybe share code with lalr1.cc.
|
||||||
|
|
||||||
|
The current parser should be identical in terms of interface, functionality
|
||||||
|
and performance to "glr.cc". To try it out, simply use
|
||||||
|
|
||||||
|
%skeleton "glr2.cc"
|
||||||
|
|
||||||
* Noteworthy changes in release 3.7.1 (2020-08-02) [stable]
|
* Noteworthy changes in release 3.7.1 (2020-08-02) [stable]
|
||||||
|
|
||||||
** Bug fixes
|
** Bug fixes
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ dist_skeletons_DATA = \
|
|||||||
data/skeletons/c.m4 \
|
data/skeletons/c.m4 \
|
||||||
data/skeletons/glr.c \
|
data/skeletons/glr.c \
|
||||||
data/skeletons/glr.cc \
|
data/skeletons/glr.cc \
|
||||||
|
data/skeletons/glr2.cc \
|
||||||
data/skeletons/java-skel.m4 \
|
data/skeletons/java-skel.m4 \
|
||||||
data/skeletons/java.m4 \
|
data/skeletons/java.m4 \
|
||||||
data/skeletons/lalr1.cc \
|
data/skeletons/lalr1.cc \
|
||||||
|
|||||||
@@ -402,7 +402,7 @@ b4_define_flag_if([yacc]) # Whether POSIX Yacc is emulated.
|
|||||||
# b4_glr_cc_if([IF-TRUE], [IF-FALSE])
|
# b4_glr_cc_if([IF-TRUE], [IF-FALSE])
|
||||||
# -----------------------------------
|
# -----------------------------------
|
||||||
m4_define([b4_glr_cc_if],
|
m4_define([b4_glr_cc_if],
|
||||||
[m4_if(b4_skeleton, ["glr.cc"], $@)])
|
[m4_if(m4_bregexp(b4_skeleton, [^"glr2?.cc"$]), [0], $@)])
|
||||||
|
|
||||||
|
|
||||||
## --------- ##
|
## --------- ##
|
||||||
|
|||||||
@@ -109,7 +109,6 @@ b4_percent_define_default([[api.filename.type]], [[const std::string]])
|
|||||||
# Make it a warning for those who used betas of Bison 3.0.
|
# Make it a warning for those who used betas of Bison 3.0.
|
||||||
b4_percent_define_default([[api.namespace]], m4_defn([b4_prefix]))
|
b4_percent_define_default([[api.namespace]], m4_defn([b4_prefix]))
|
||||||
|
|
||||||
b4_percent_define_default([[global_tokens_and_yystype]], [[false]])
|
|
||||||
b4_percent_define_default([[define_location_comparison]],
|
b4_percent_define_default([[define_location_comparison]],
|
||||||
[m4_if(b4_percent_define_get([[filename_type]]),
|
[m4_if(b4_percent_define_get([[filename_type]]),
|
||||||
[std::string], [[true]], [[false]])])
|
[std::string], [[true]], [[false]])])
|
||||||
|
|||||||
@@ -127,7 +127,12 @@ m4_define([b4_lex],
|
|||||||
# b4_user_args
|
# b4_user_args
|
||||||
# ------------
|
# ------------
|
||||||
m4_define([b4_user_args],
|
m4_define([b4_user_args],
|
||||||
[m4_ifset([b4_parse_param], [, b4_args(b4_parse_param)])])
|
[m4_ifset([b4_parse_param], [, b4_user_args_no_comma])])
|
||||||
|
|
||||||
|
# b4_user_args_no_comma
|
||||||
|
# ------------
|
||||||
|
m4_define([b4_user_args_no_comma],
|
||||||
|
[m4_ifset([b4_parse_param], [b4_args(b4_parse_param)])])
|
||||||
|
|
||||||
|
|
||||||
# b4_user_formals
|
# b4_user_formals
|
||||||
|
|||||||
3306
data/skeletons/glr2.cc
Normal file
3306
data/skeletons/glr2.cc
Normal file
File diff suppressed because it is too large
Load Diff
@@ -297,6 +297,7 @@ grammar_rule_check_and_complete (symbol_list *r)
|
|||||||
const bool is_cxx =
|
const bool is_cxx =
|
||||||
STREQ (language->language, "c++")
|
STREQ (language->language, "c++")
|
||||||
|| (skeleton && (STREQ (skeleton, "glr.cc")
|
|| (skeleton && (STREQ (skeleton, "glr.cc")
|
||||||
|
|| STREQ (skeleton, "glr2.cc")
|
||||||
|| STREQ (skeleton, "lalr1.cc")));
|
|| STREQ (skeleton, "lalr1.cc")));
|
||||||
if (is_cxx)
|
if (is_cxx)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -371,6 +371,7 @@ AT_TEST([glr.c])
|
|||||||
AT_TEST([glr.c], [%define api.pure])
|
AT_TEST([glr.c], [%define api.pure])
|
||||||
AT_TEST([lalr1.cc])
|
AT_TEST([lalr1.cc])
|
||||||
AT_TEST([glr.cc])
|
AT_TEST([glr.cc])
|
||||||
|
AT_TEST([glr2.cc])
|
||||||
|
|
||||||
## A very different test, based on PostgreSQL's implementation of the
|
## A very different test, based on PostgreSQL's implementation of the
|
||||||
## locations. See
|
## locations. See
|
||||||
@@ -474,7 +475,7 @@ AT_CLEANUP
|
|||||||
])
|
])
|
||||||
|
|
||||||
## FIXME: test Java and D.
|
## FIXME: test Java and D.
|
||||||
m4_map_args([AT_TEST], [yacc.c], [glr.c], [lalr1.cc], [glr.cc])
|
m4_map_args([AT_TEST], [yacc.c], [glr.c], [lalr1.cc], [glr.cc], [glr2.cc])
|
||||||
|
|
||||||
m4_popdef([AT_TEST])
|
m4_popdef([AT_TEST])
|
||||||
|
|
||||||
@@ -1055,6 +1056,9 @@ AT_CHECK_PRINTER_AND_DESTRUCTOR([%defines %skeleton "lalr1.cc"], [ with union])
|
|||||||
AT_CHECK_PRINTER_AND_DESTRUCTOR([%defines %skeleton "glr.cc"])
|
AT_CHECK_PRINTER_AND_DESTRUCTOR([%defines %skeleton "glr.cc"])
|
||||||
AT_CHECK_PRINTER_AND_DESTRUCTOR([%defines %skeleton "glr.cc"], [ with union])
|
AT_CHECK_PRINTER_AND_DESTRUCTOR([%defines %skeleton "glr.cc"], [ with union])
|
||||||
|
|
||||||
|
AT_CHECK_PRINTER_AND_DESTRUCTOR([%defines %skeleton "glr2.cc"])
|
||||||
|
AT_CHECK_PRINTER_AND_DESTRUCTOR([%defines %skeleton "glr2.cc"], [ with union])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## ----------------------------------------- ##
|
## ----------------------------------------- ##
|
||||||
@@ -1852,7 +1856,7 @@ AT_BISON_OPTION_POPDEFS
|
|||||||
AT_CLEANUP
|
AT_CLEANUP
|
||||||
])
|
])
|
||||||
|
|
||||||
m4_map_args([AT_TEST], [yacc.c], [glr.c], [lalr1.cc], [glr.cc])
|
m4_map_args([AT_TEST], [yacc.c], [glr.c], [lalr1.cc], [glr.cc], [glr2.cc])
|
||||||
m4_popdef([AT_TEST])
|
m4_popdef([AT_TEST])
|
||||||
|
|
||||||
## -------------------------------------------------- ##
|
## -------------------------------------------------- ##
|
||||||
|
|||||||
@@ -1062,6 +1062,7 @@ AT_CLEANUP
|
|||||||
|
|
||||||
AT_TEST([%skeleton "lalr1.cc"])
|
AT_TEST([%skeleton "lalr1.cc"])
|
||||||
AT_TEST([%skeleton "glr.cc"])
|
AT_TEST([%skeleton "glr.cc"])
|
||||||
|
AT_TEST([%skeleton "glr2.cc"])
|
||||||
|
|
||||||
m4_popdef([AT_TEST])
|
m4_popdef([AT_TEST])
|
||||||
|
|
||||||
|
|||||||
@@ -1204,6 +1204,7 @@ AT_BANNER([[GLR C++ Calculator.]])
|
|||||||
|
|
||||||
# Again, we try also using %skeleton.
|
# Again, we try also using %skeleton.
|
||||||
AT_CHECK_CALC([%skeleton "glr.cc"])
|
AT_CHECK_CALC([%skeleton "glr.cc"])
|
||||||
|
AT_CHECK_CALC([%skeleton "glr2.cc"])
|
||||||
|
|
||||||
m4_define([AT_CHECK_CALC_GLR_CC],
|
m4_define([AT_CHECK_CALC_GLR_CC],
|
||||||
[AT_CHECK_CALC([%language "C++" %glr-parser] $@)])
|
[AT_CHECK_CALC([%language "C++" %glr-parser] $@)])
|
||||||
|
|||||||
@@ -1093,7 +1093,7 @@ AT_CLEANUP
|
|||||||
])
|
])
|
||||||
|
|
||||||
## FIXME: test Java and D.
|
## FIXME: test Java and D.
|
||||||
m4_map_args([AT_TEST], [yacc.c], [glr.c], [lalr1.cc], [glr.cc])
|
m4_map_args([AT_TEST], [yacc.c], [glr.c], [lalr1.cc], [glr.cc], [glr2.cc])
|
||||||
|
|
||||||
m4_popdef([AT_TEST])
|
m4_popdef([AT_TEST])
|
||||||
|
|
||||||
|
|||||||
@@ -2865,6 +2865,7 @@ AT_BISON_CHECK([[-d input.y]])
|
|||||||
AT_BISON_CHECK([[-d -S glr.c input.y]])
|
AT_BISON_CHECK([[-d -S glr.c input.y]])
|
||||||
AT_BISON_CHECK([[-d -S lalr1.cc input.y]])
|
AT_BISON_CHECK([[-d -S lalr1.cc input.y]])
|
||||||
AT_BISON_CHECK([[-d -S glr.cc input.y]])
|
AT_BISON_CHECK([[-d -S glr.cc input.y]])
|
||||||
|
AT_BISON_CHECK([[-d -S glr2.cc input.y]])
|
||||||
AT_BISON_CHECK([[ -S lalr1.java input.y]])
|
AT_BISON_CHECK([[ -S lalr1.java input.y]])
|
||||||
])
|
])
|
||||||
|
|
||||||
|
|||||||
@@ -237,7 +237,7 @@ m4_pushdef([AT_LANG],
|
|||||||
m4_pushdef([AT_C_IF],
|
m4_pushdef([AT_C_IF],
|
||||||
[m4_if(AT_LANG, [c], [$1], [$2])])
|
[m4_if(AT_LANG, [c], [$1], [$2])])
|
||||||
m4_pushdef([AT_GLR_IF],
|
m4_pushdef([AT_GLR_IF],
|
||||||
[m4_bmatch([$3], [%glr-parser\|%skeleton "glr\..*"], [$1], [$2])])
|
[m4_bmatch([$3], [%glr-parser\|%skeleton "glr.*"], [$1], [$2])])
|
||||||
m4_pushdef([AT_LALR1_CC_IF],
|
m4_pushdef([AT_LALR1_CC_IF],
|
||||||
[AT_CXX_IF([AT_GLR_IF([$2], [$1])], [$2])])
|
[AT_CXX_IF([AT_GLR_IF([$2], [$1])], [$2])])
|
||||||
m4_pushdef([AT_GLR_CC_IF],
|
m4_pushdef([AT_GLR_CC_IF],
|
||||||
|
|||||||
@@ -1557,6 +1557,7 @@ AT_TEST([yacc.c])
|
|||||||
AT_TEST([glr.c])
|
AT_TEST([glr.c])
|
||||||
AT_TEST([lalr1.cc])
|
AT_TEST([lalr1.cc])
|
||||||
AT_TEST([glr.cc])
|
AT_TEST([glr.cc])
|
||||||
|
AT_TEST([glr2.cc])
|
||||||
|
|
||||||
m4_popdef([AT_TEST])
|
m4_popdef([AT_TEST])
|
||||||
|
|
||||||
|
|||||||
@@ -333,7 +333,7 @@ AT_BISON_OPTION_POPDEFS
|
|||||||
AT_CLEANUP
|
AT_CLEANUP
|
||||||
])
|
])
|
||||||
|
|
||||||
m4_foreach([b4_skel], [[yacc.c], [glr.c], [lalr1.cc], [glr.cc], [lalr1.java], [lalr1.d]],
|
m4_foreach([b4_skel], [[yacc.c], [glr.c], [lalr1.cc], [glr.cc], [glr2.cc], [lalr1.java], [lalr1.d]],
|
||||||
[AT_TEST([%skeleton "]b4_skel["])
|
[AT_TEST([%skeleton "]b4_skel["])
|
||||||
AT_TEST([%skeleton "]b4_skel[" %define api.token.raw])])
|
AT_TEST([%skeleton "]b4_skel[" %define api.token.raw])])
|
||||||
|
|
||||||
|
|||||||
@@ -437,7 +437,7 @@ AT_BISON_OPTION_POPDEFS
|
|||||||
AT_CLEANUP
|
AT_CLEANUP
|
||||||
])
|
])
|
||||||
|
|
||||||
m4_map_args([AT_TEST], [yacc.c], [glr.c], [lalr1.cc], [glr.cc])
|
m4_map_args([AT_TEST], [yacc.c], [glr.c], [lalr1.cc], [glr.cc], [glr2.cc])
|
||||||
|
|
||||||
m4_popdef([AT_TEST])
|
m4_popdef([AT_TEST])
|
||||||
|
|
||||||
@@ -494,7 +494,7 @@ AT_BISON_OPTION_POPDEFS
|
|||||||
AT_CLEANUP
|
AT_CLEANUP
|
||||||
])
|
])
|
||||||
|
|
||||||
m4_map_args([AT_TEST], [yacc.c], [glr.c], [lalr1.cc], [glr.cc])
|
m4_map_args([AT_TEST], [yacc.c], [glr.c], [lalr1.cc], [glr.cc], [glr2.cc])
|
||||||
|
|
||||||
m4_popdef([AT_TEST])
|
m4_popdef([AT_TEST])
|
||||||
|
|
||||||
|
|||||||
@@ -135,7 +135,7 @@ m4_pushdef([AT_TEST],
|
|||||||
_AT_TEST([$1 %defines], [$2], [$3], [$4], [$5], [$6], [$7])
|
_AT_TEST([$1 %defines], [$2], [$3], [$4], [$5], [$6], [$7])
|
||||||
])
|
])
|
||||||
|
|
||||||
m4_foreach([b4_skel], [[yacc.c], [glr.c], [lalr1.cc], [glr.cc]],
|
m4_foreach([b4_skel], [[yacc.c], [glr.c], [lalr1.cc], [glr.cc], [glr2.cc]],
|
||||||
[# A built-in type.
|
[# A built-in type.
|
||||||
AT_TEST([%skeleton "]b4_skel["
|
AT_TEST([%skeleton "]b4_skel["
|
||||||
%define api.value.type {double}],
|
%define api.value.type {double}],
|
||||||
|
|||||||
Reference in New Issue
Block a user