mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 20:33:03 +00:00
Various Java skeleton improvements.
* NEWS: Document them.
General Java skeleton improvements.
* configure.ac (gt_JAVACOMP): Request target of 1.4, which allows
using gcj < 4.3 in the testsuite, according to comments in
gnulib/m4/javacomp.m4.
* data/java.m4 (stype, parser_class_name, lex_throws, throws,
location_type, position_type): Remove extraneous brackets from
b4_percent_define_default.
(b4_lex_param, b4_parse_param): Remove extraneous brackets from
m4_define and m4_define_default.
* data/lalr1.java (b4_pre_prologue): Change to b4_user_post_prologue,
which marks the end of user code with appropriate syncline, like all
the other skeletons.
(b4_user_post_prologue): Add. Don't silently drop.
(yylex): Remove.
(parse): Inline yylex.
* doc/bison.texinfo (bisonVersion, bisonSkeleton): Document.
(%{...%}): Fix typo of %code imports.
* tests/java.at (AT_JAVA_COMPILE): Add "java" keyword.
Support annotations on parser class with %define annotations.
* data/lalr1.java (annotations): Add to parser class modifier.
* doc/bison.texinfo (Java Parser Interface): Document
%define annotations.
(Java Declarations Summary): Document %define annotations.
* tests/java.at (Java parser class modifiers): Test annotations.
Do not generate code for %error-verbose unless requested.
* data/lalr1.java (errorVerbose): Rename to yyErrorVerbose.
Make private. Make conditional on %error-verbose.
(getErrorVerbose, setErrorVerbose): New.
(yytnamerr_): Make conditional on %error-verbose.
(yysyntax_error): Make some code conditional on %error-verbose.
* doc/bison.texinfo (Java Bison Interface): Remove the parts
about %error-verbose having no effect.
(getErrorVerbose, setErrorVerbose): Document.
Move constants for token names to Lexer interface.
* data/lalr1.java (Lexer): Move EOF, b4_token_enums(b4_tokens) here.
* data/java.m4 (b4_token_enum): Indent for move to Lexer interface.
(parse): Qualify EOF to Lexer.EOF.
* doc/bison.texinfo (Java Parser Interface): Move documentation of
EOF and token names to Java Lexer Interface.
* tests/java.at (_AT_DATA_JAVA_CALC_Y): Remove Calc qualifier.
Make yyerror public.
* data/lalr1.java (Lexer.yyerror): Use longer parameter name.
(yyerror): Change to public. Add Javadoc comments. Use longer
parameter names. Make the body rather than the declarator
conditional on %locations.
* doc/bison.texinfo (yyerror): Document. Don't mark as protected.
Allow user to add code to the constructor with %code init.
* data/java.m4 (b4_init_throws): New, for %define init_throws.
* data/lalr1.java (YYParser.YYParser): Add b4_init_throws.
Add %code init to the front of the constructor body.
* doc/bison.texinfo (YYParser.YYParser): Document %code init
and %define init_throws.
(Java Declarations Summary): Document %code init and
%define init_throws.
* tests/java.at (Java %parse-param and %lex-param): Adjust grep.
(Java constructor init and init_throws): Add tests.
This commit is contained in:
@@ -148,7 +148,7 @@ AT_LOCATION_IF([[
|
||||
int ttype = st.nextToken ();
|
||||
]AT_LOCATION_IF([[yystartpos = yyendpos;]])[
|
||||
if (ttype == st.TT_EOF)
|
||||
return Calc.EOF;
|
||||
return EOF;
|
||||
|
||||
else if (ttype == st.TT_EOL)
|
||||
{
|
||||
@@ -159,7 +159,7 @@ AT_LOCATION_IF([[
|
||||
else if (ttype == st.TT_WORD)
|
||||
{
|
||||
yylval = new Integer (st.sval);
|
||||
return Calc.NUM;
|
||||
return NUM;
|
||||
}
|
||||
|
||||
else
|
||||
@@ -225,7 +225,8 @@ m4_define([AT_DATA_JAVA_CALC_Y],
|
||||
# Compile SOURCES into Java class files. Skip the test if java or javac is
|
||||
# not installed.
|
||||
m4_define([AT_JAVA_COMPILE],
|
||||
[AT_CHECK([test -n "$CONF_JAVA" || exit 77
|
||||
[AT_KEYWORDS(java)
|
||||
AT_CHECK([test -n "$CONF_JAVA" || exit 77
|
||||
test -n "$CONF_JAVAC" || exit 77])
|
||||
AT_CHECK([$SHELL ../../../javacomp.sh $1],
|
||||
0, [ignore], [ignore])])
|
||||
@@ -549,6 +550,12 @@ AT_CHECK_JAVA_MINIMAL([[
|
||||
%define strictfp]])
|
||||
AT_CHECK_JAVA_GREP([[public final strictfp class YYParser]])
|
||||
|
||||
# FIXME: Can't do a Java compile because javacomp.sh is configured for 1.3
|
||||
AT_CHECK_JAVA_MINIMAL([[
|
||||
%define annotations "/*@Deprecated @SupressWarnings(\"unchecked\") @SupressWarnings({\"unchecked\", \"deprecation\"}) @SupressWarnings(value={\"unchecked\", \"deprecation\"})*/"
|
||||
%define public]])
|
||||
AT_CHECK_JAVA_GREP([[/\*@Deprecated @SupressWarnings("unchecked") @SupressWarnings({"unchecked", "deprecation"}) @SupressWarnings(value={"unchecked", "deprecation"})\*/ public class YYParser]])
|
||||
|
||||
AT_CLEANUP
|
||||
|
||||
|
||||
@@ -579,54 +586,54 @@ AT_CLEANUP
|
||||
AT_SETUP([Java %parse-param and %lex-param])
|
||||
|
||||
AT_CHECK_JAVA_MINIMAL([])
|
||||
AT_CHECK_JAVA_GREP([[ *public YYParser (Lexer yylexer) {]])
|
||||
AT_CHECK_JAVA_GREP([[ *public YYParser (Lexer yylexer) *]])
|
||||
|
||||
AT_CHECK_JAVA_MINIMAL([[%parse-param {int parse_param1}]])
|
||||
AT_CHECK_JAVA_GREP([[ *protected final int parse_param1;]])
|
||||
AT_CHECK_JAVA_GREP([[ *public YYParser (Lexer yylexer, *int parse_param1) {]])
|
||||
AT_CHECK_JAVA_GREP([[[ ]*this.parse_param1 = parse_param1;]])
|
||||
AT_CHECK_JAVA_GREP([[ *public YYParser (Lexer yylexer, *int parse_param1) *]])
|
||||
AT_CHECK_JAVA_GREP([[[ ]*this.parse_param1 = parse_param1;]])
|
||||
|
||||
AT_CHECK_JAVA_MINIMAL([[
|
||||
%parse-param {int parse_param1}
|
||||
%parse-param {long parse_param2}]])
|
||||
AT_CHECK_JAVA_GREP([[ *protected final int parse_param1;]])
|
||||
AT_CHECK_JAVA_GREP([[ *protected final long parse_param2;]])
|
||||
AT_CHECK_JAVA_GREP([[ *public YYParser (Lexer yylexer, *int parse_param1, *long parse_param2) {]])
|
||||
AT_CHECK_JAVA_GREP([[[ ]*this.parse_param1 = parse_param1;]])
|
||||
AT_CHECK_JAVA_GREP([[[ ]*this.parse_param2 = parse_param2;]])
|
||||
AT_CHECK_JAVA_GREP([[ *public YYParser (Lexer yylexer, *int parse_param1, *long parse_param2) *]])
|
||||
AT_CHECK_JAVA_GREP([[[ ]*this.parse_param1 = parse_param1;]])
|
||||
AT_CHECK_JAVA_GREP([[[ ]*this.parse_param2 = parse_param2;]])
|
||||
|
||||
AT_CHECK_JAVA_MINIMAL_W_LEXER([], [], [[return EOF;]])
|
||||
AT_CHECK_JAVA_GREP([[ *public YYParser () {]])
|
||||
AT_CHECK_JAVA_GREP([[ *protected YYParser (Lexer yylexer) {]])
|
||||
AT_CHECK_JAVA_GREP([[ *public YYParser () *]])
|
||||
AT_CHECK_JAVA_GREP([[ *protected YYParser (Lexer yylexer) *]])
|
||||
|
||||
AT_CHECK_JAVA_MINIMAL_W_LEXER([[%parse-param {int parse_param1}]],
|
||||
[], [[return EOF;]])
|
||||
[], [[return EOF;]])
|
||||
AT_CHECK_JAVA_GREP([[ *protected final int parse_param1;]])
|
||||
AT_CHECK_JAVA_GREP([[ *public YYParser (int parse_param1) {]])
|
||||
AT_CHECK_JAVA_GREP([[ *protected YYParser (Lexer yylexer, *int parse_param1) {]])
|
||||
AT_CHECK_JAVA_GREP([[[ ]*this.parse_param1 = parse_param1;]], [2])
|
||||
AT_CHECK_JAVA_GREP([[ *public YYParser (int parse_param1) *]])
|
||||
AT_CHECK_JAVA_GREP([[ *protected YYParser (Lexer yylexer, *int parse_param1) *]])
|
||||
AT_CHECK_JAVA_GREP([[[ ]*this.parse_param1 = parse_param1;]], [2])
|
||||
|
||||
AT_CHECK_JAVA_MINIMAL_W_LEXER([[
|
||||
%parse-param {int parse_param1}
|
||||
%parse-param {long parse_param2}]],
|
||||
[], [[return EOF;]])
|
||||
[], [[return EOF;]])
|
||||
AT_CHECK_JAVA_GREP([[ *protected final int parse_param1;]])
|
||||
AT_CHECK_JAVA_GREP([[ *protected final long parse_param2;]])
|
||||
AT_CHECK_JAVA_GREP([[ *public YYParser (int parse_param1, *long parse_param2) {]])
|
||||
AT_CHECK_JAVA_GREP([[ *protected YYParser (Lexer yylexer, *int parse_param1, *long parse_param2) {]])
|
||||
AT_CHECK_JAVA_GREP([[[ ]*this.parse_param1 = parse_param1;]], [2])
|
||||
AT_CHECK_JAVA_GREP([[[ ]*this.parse_param2 = parse_param2;]], [2])
|
||||
AT_CHECK_JAVA_GREP([[ *public YYParser (int parse_param1, *long parse_param2) *]])
|
||||
AT_CHECK_JAVA_GREP([[ *protected YYParser (Lexer yylexer, *int parse_param1, *long parse_param2) *]])
|
||||
AT_CHECK_JAVA_GREP([[[ ]*this.parse_param1 = parse_param1;]], [2])
|
||||
AT_CHECK_JAVA_GREP([[[ ]*this.parse_param2 = parse_param2;]], [2])
|
||||
|
||||
AT_CHECK_JAVA_MINIMAL_W_LEXER([[%lex-param {char lex_param1}]],
|
||||
[], [[return EOF;]], [[YYLexer (char lex_param1) {}]])
|
||||
AT_CHECK_JAVA_GREP([[ *public YYParser (char lex_param1) {]])
|
||||
[], [[return EOF;]], [[YYLexer (char lex_param1) {}]])
|
||||
AT_CHECK_JAVA_GREP([[ *public YYParser (char lex_param1) *]])
|
||||
AT_CHECK_JAVA_GREP([[.* = new YYLexer *(lex_param1);]])
|
||||
|
||||
AT_CHECK_JAVA_MINIMAL_W_LEXER([[
|
||||
%lex-param {char lex_param1}
|
||||
%lex-param {short lex_param2}]],
|
||||
[], [[return EOF;]], [[YYLexer (char lex_param1, short lex_param2) {}]])
|
||||
AT_CHECK_JAVA_GREP([[ *public YYParser (char lex_param1, *short lex_param2) {]])
|
||||
[], [[return EOF;]], [[YYLexer (char lex_param1, short lex_param2) {}]])
|
||||
AT_CHECK_JAVA_GREP([[ *public YYParser (char lex_param1, *short lex_param2) *]])
|
||||
AT_CHECK_JAVA_GREP([[.* = new YYLexer *(lex_param1, *lex_param2);]])
|
||||
|
||||
AT_CHECK_JAVA_MINIMAL_W_LEXER([[
|
||||
@@ -634,14 +641,14 @@ AT_CHECK_JAVA_MINIMAL_W_LEXER([[
|
||||
%parse-param {long parse_param2}
|
||||
%lex-param {char lex_param1}
|
||||
%lex-param {short lex_param2}]],
|
||||
[], [[return EOF;]], [[YYLexer (char lex_param1, short lex_param2) {}]])
|
||||
[], [[return EOF;]], [[YYLexer (char lex_param1, short lex_param2) {}]])
|
||||
AT_CHECK_JAVA_GREP([[ *protected final int parse_param1;]])
|
||||
AT_CHECK_JAVA_GREP([[ *protected final long parse_param2;]])
|
||||
AT_CHECK_JAVA_GREP([[ *public YYParser (char lex_param1, *short lex_param2, *int parse_param1, *long parse_param2) {]])
|
||||
AT_CHECK_JAVA_GREP([[ *public YYParser (char lex_param1, *short lex_param2, *int parse_param1, *long parse_param2) *]])
|
||||
AT_CHECK_JAVA_GREP([[.* = new YYLexer *(lex_param1, *lex_param2);]])
|
||||
AT_CHECK_JAVA_GREP([[ *protected YYParser (Lexer yylexer, *int parse_param1, *long parse_param2) {]])
|
||||
AT_CHECK_JAVA_GREP([[[ ]*this.parse_param1 = parse_param1;]], [2])
|
||||
AT_CHECK_JAVA_GREP([[[ ]*this.parse_param2 = parse_param2;]], [2])
|
||||
AT_CHECK_JAVA_GREP([[ *protected YYParser (Lexer yylexer, *int parse_param1, *long parse_param2) *]])
|
||||
AT_CHECK_JAVA_GREP([[[ ]*this.parse_param1 = parse_param1;]], [2])
|
||||
AT_CHECK_JAVA_GREP([[[ ]*this.parse_param2 = parse_param2;]], [2])
|
||||
|
||||
AT_CLEANUP
|
||||
|
||||
@@ -735,6 +742,28 @@ AT_CHECK_JAVA_GREP([[ *public boolean parse ()]AT_JT_parse_throws[ *]])
|
||||
AT_CLEANUP
|
||||
|
||||
|
||||
# ------------------------------------- #
|
||||
# Java constructor init and init_throws #
|
||||
# ------------------------------------- #
|
||||
|
||||
AT_SETUP([Java constructor init and init_throws])
|
||||
|
||||
AT_CHECK_JAVA_MINIMAL([[
|
||||
%define extends "Thread"
|
||||
%code init { super("Test Thread"); if (true) throw new InterruptedException(); }
|
||||
%define init_throws "InterruptedException"
|
||||
%lex-param {int lex_param}]])
|
||||
AT_CHECK([[grep -q 'super("Test Thread"); if (true) throw new InterruptedException();' YYParser.java]])
|
||||
|
||||
AT_CHECK_JAVA_MINIMAL_W_LEXER([[
|
||||
%define extends "Thread"
|
||||
%code init { super("Test Thread"); if (true) throw new InterruptedException(); }
|
||||
%define init_throws "InterruptedException"]], [], [[return EOF;]])
|
||||
AT_CHECK([[grep -q 'super("Test Thread"); if (true) throw new InterruptedException();' YYParser.java]])
|
||||
|
||||
AT_CLEANUP
|
||||
|
||||
|
||||
# --------------------------------------------- #
|
||||
# Java stype, position_class and location_class #
|
||||
# --------------------------------------------- #
|
||||
|
||||
Reference in New Issue
Block a user