* src/getargs.h, src/getargs.c (trace_e, trace_args, trace_types):

Add support for --trace=skeleton.
* src/scan-skel.l: %option debug.
Scan strings of non-@ or n instead of character by character.
(scan_skel): Handle trace_skeleton.
(QPUTS): New.
(@output_parser_name@, @output_header_name@): ``Restore'' their
support (used to be M4 macros).
* data/yacc.c: Quote larger chunks, a la glr.c.
* data/lalr1.cc: Likewise.
The header guards are no longer available, so use some other
string than `YYLSP_NEEDED'.
This commit is contained in:
Akim Demaille
2002-11-16 12:31:36 +00:00
parent 4c6cc1db75
commit c5e3e51055
6 changed files with 255 additions and 228 deletions

View File

@@ -1,3 +1,18 @@
2002-11-16 Akim Demaille <akim@epita.fr>
* src/getargs.h, src/getargs.c (trace_e, trace_args, trace_types):
Add support for --trace=skeleton.
* src/scan-skel.l: %option debug.
Scan strings of non-@ or \n instead of character by character.
(scan_skel): Handle trace_skeleton.
(QPUTS): New.
(@output_parser_name@, @output_header_name@): ``Restore'' their
support (used to be M4 macros).
* data/yacc.c: Quote larger chunks, a la glr.c.
* data/lalr1.cc: Likewise.
The header guards are no longer available, so use some other
string than `YYLSP_NEEDED'.
2002-11-16 Akim Demaille <akim@epita.fr> 2002-11-16 Akim Demaille <akim@epita.fr>
Make the ``Printers and Destructors'' test more verbose, taking Make the ``Printers and Destructors'' test more verbose, taking

View File

@@ -91,9 +91,11 @@ m4_changecom()
m4_divert(0)dnl m4_divert(0)dnl
@output @output_header_name@ @output @output_header_name@
b4_copyright([C++ Skeleton parser for LALR(1) parsing with Bison], b4_copyright([C++ Skeleton parser for LALR(1) parsing with Bison],
[2002]) [2002])[
#ifndef YYLSP_NEEDED /* FIXME: This is wrong, we want computed header guards.
# define YYLSP_NEEDED I don't know why the macros are missing now. :( */
#ifndef PARSER_HEADER_H
# define PARSER_HEADER_H
#include "stack.hh" #include "stack.hh"
#include "location.hh" #include "location.hh"
@@ -102,50 +104,50 @@ b4_copyright([C++ Skeleton parser for LALR(1) parsing with Bison],
#include <iostream> #include <iostream>
/* Using locations. */ /* Using locations. */
#define YYLSP_NEEDED b4_locations_flag #define YYLSP_NEEDED ]b4_locations_flag[
b4_token_defines(b4_tokens) ]b4_token_defines(b4_tokens)[
/* Copy the first part of user declarations. */ /* Copy the first part of user declarations. */
b4_pre_prologue ]b4_pre_prologue[
/* Line __line__ of __file__. */ ]/* Line __line__ of __file__. */
b4_syncline([@oline@], [@ofile@]) b4_syncline([@oline@], [@ofile@])[
/* Enabling traces. */ /* Enabling traces. */
#ifndef YYDEBUG #ifndef YYDEBUG
# define YYDEBUG b4_debug # define YYDEBUG ]b4_debug[
#endif #endif
/* Enabling verbose error message. */ /* Enabling verbose error message. */
#ifndef YYERROR_VERBOSE #ifndef YYERROR_VERBOSE
# define YYERROR_VERBOSE b4_error_verbose # define YYERROR_VERBOSE ]b4_error_verbose[
#endif #endif
#ifndef YYSTYPE #ifndef YYSTYPE
m4_ifdef([b4_stype], ]m4_ifdef([b4_stype],
[b4_syncline([b4_stype_line], [b4_filename]) [b4_syncline([b4_stype_line], [b4_filename])
typedef union b4_stype yystype; typedef union b4_stype yystype;
/* Line __line__ of __file__. */ /* Line __line__ of __file__. */
b4_syncline([@oline@], [@ofile@])], b4_syncline([@oline@], [@ofile@])],
[typedef int yystype;]) [typedef int yystype;])[
# define YYSTYPE yystype # define YYSTYPE yystype
#endif #endif
/* Copy the second part of user declarations. */ /* Copy the second part of user declarations. */
b4_post_prologue ]b4_post_prologue[
/* Line __line__ of __file__. */ ]/* Line __line__ of __file__. */
b4_syncline([@oline@], [@ofile@]) b4_syncline([@oline@], [@ofile@])[
#ifndef YYLLOC_DEFAULT #ifndef YYLLOC_DEFAULT
# define YYLLOC_DEFAULT(Current, Rhs, N) \ # define YYLLOC_DEFAULT(Current, Rhs, N) \
Current.last_line = Rhs[[N]].last_line; \ Current.last_line = Rhs[N].last_line; \
Current.last_column = Rhs[[N]].last_column; Current.last_column = Rhs[N].last_column;
#endif #endif
namespace yy namespace yy
{ {
class b4_parser_class_name; class ]b4_parser_class_name[;
template < typename P > template < typename P >
struct Traits struct Traits
@@ -153,47 +155,47 @@ namespace yy
}; };
template < > template < >
struct Traits< b4_parser_class_name > struct Traits< ]b4_parser_class_name[ >
{ {
typedef b4_int_type_for([b4_translate]) TokenNumberType; typedef ]b4_int_type_for([b4_translate])[ TokenNumberType;
typedef b4_int_type_for([b4_rhs]) RhsNumberType; typedef ]b4_int_type_for([b4_rhs])[ RhsNumberType;
typedef int StateType; typedef int StateType;
typedef yystype SemanticType; typedef yystype SemanticType;
typedef b4_location_type LocationType; typedef ]b4_location_type[ LocationType;
}; };
} }
namespace yy namespace yy
{ {
class b4_parser_class_name b4_inherit class ]b4_parser_class_name b4_inherit[
{ {
public: public:
typedef Traits< b4_parser_class_name >::TokenNumberType TokenNumberType; typedef Traits< ]b4_parser_class_name[ >::TokenNumberType TokenNumberType;
typedef Traits< b4_parser_class_name >::RhsNumberType RhsNumberType; typedef Traits< ]b4_parser_class_name[ >::RhsNumberType RhsNumberType;
typedef Traits< b4_parser_class_name >::StateType StateType; typedef Traits< ]b4_parser_class_name[ >::StateType StateType;
typedef Traits< b4_parser_class_name >::SemanticType SemanticType; typedef Traits< ]b4_parser_class_name[ >::SemanticType SemanticType;
typedef Traits< b4_parser_class_name >::LocationType LocationType; typedef Traits< ]b4_parser_class_name[ >::LocationType LocationType;
typedef Stack< StateType > StateStack; typedef Stack< StateType > StateStack;
typedef Stack< SemanticType > SemanticStack; typedef Stack< SemanticType > SemanticStack;
typedef Stack< LocationType > LocationStack; typedef Stack< LocationType > LocationStack;
#if YYLSP_NEEDED #if YYLSP_NEEDED
b4_parser_class_name (bool debug, ]b4_parser_class_name[ (bool debug,
LocationType initlocation[]b4_param) : LocationType initlocation][]b4_param[) :
b4_constructor[]debug_ (debug), ]b4_constructor[][debug_ (debug),
cdebug_ (std::cerr), cdebug_ (std::cerr),
initlocation_ (initlocation) initlocation_ (initlocation)
#else #else
b4_parser_class_name (bool debug[]b4_param) : ]b4_parser_class_name[ (bool debug][]b4_param[) :
b4_constructor[]debug_ (debug), ]b4_constructor[][debug_ (debug),
cdebug_ (std::cerr) cdebug_ (std::cerr)
#endif #endif
{ {
} }
virtual ~b4_parser_class_name () virtual ~]b4_parser_class_name[ ()
{ {
} }
@@ -211,28 +213,28 @@ namespace yy
LocationStack location_stack_; LocationStack location_stack_;
/* Tables. */ /* Tables. */
static const b4_int_type_for([b4_pact]) pact_[[]]; static const ]b4_int_type_for([b4_pact])[ pact_[];
static const b4_int_type_for([b4_pact]) pact_ninf_; static const ]b4_int_type_for([b4_pact])[ pact_ninf_;
static const b4_int_type_for([b4_defact]) defact_[[]]; static const ]b4_int_type_for([b4_defact])[ defact_[];
static const b4_int_type_for([b4_pgoto]) pgoto_[[]]; static const ]b4_int_type_for([b4_pgoto])[ pgoto_[];
static const b4_int_type_for([b4_defgoto]) defgoto_[[]]; static const ]b4_int_type_for([b4_defgoto])[ defgoto_[];
static const b4_int_type_for([b4_table]) table_[[]]; static const ]b4_int_type_for([b4_table])[ table_[];
static const b4_int_type_for([b4_table]) table_ninf_; static const ]b4_int_type_for([b4_table])[ table_ninf_;
static const b4_int_type_for([b4_check]) check_[[]]; static const ]b4_int_type_for([b4_check])[ check_[];
static const b4_int_type_for([b4_r1]) r1_[[]]; static const ]b4_int_type_for([b4_r1])[ r1_[];
static const b4_int_type_for([b4_r2]) r2_[[]]; static const ]b4_int_type_for([b4_r2])[ r2_[];
#if YYDEBUG || YYERROR_VERBOSE #if YYDEBUG || YYERROR_VERBOSE
static const char* const name_[[]]; static const char* const name_[];
#endif #endif
/* More tables, for debugging. */ /* More tables, for debugging. */
#if YYDEBUG #if YYDEBUG
static const RhsNumberType rhs_[[]]; static const RhsNumberType rhs_[];
static const b4_int_type_for([b4_prhs]) prhs_[[]]; static const ]b4_int_type_for([b4_prhs])[ prhs_[];
static const b4_int_type_for([b4_rline]) rline_[[]]; static const ]b4_int_type_for([b4_rline])[ rline_[];
static const b4_int_type_for([b4_stos]) stos_[[]]; static const ]b4_int_type_for([b4_stos])[ stos_[];
static const b4_int_type_for([b4_toknum]) token_number_[[]]; static const ]b4_int_type_for([b4_toknum])[ token_number_[];
#endif #endif
/* Even more tables. */ /* Even more tables. */
@@ -281,11 +283,11 @@ namespace yy
}; };
} }
#endif /* ! defined YYLSP_NEEDED */ #endif /* ! defined PARSER_HEADER_H */]
dnl dnl
@output @output_parser_name@ @output @output_parser_name@
b4_copyright([C++ Skeleton parser for LALR(1) parsing with Bison], b4_copyright([C++ Skeleton parser for LALR(1) parsing with Bison],
[2002]) [2002])[
#include @output_header_name@ #include @output_header_name@
@@ -297,7 +299,7 @@ b4_copyright([C++ Skeleton parser for LALR(1) parsing with Bison],
#endif /* !YYDEBUG */ #endif /* !YYDEBUG */
int int
yy::b4_parser_class_name::parse () yy::]b4_parser_class_name[::parse ()
{ {
int nerrs = 0; int nerrs = 0;
int errstatus = 0; int errstatus = 0;
@@ -325,7 +327,7 @@ yy::b4_parser_class_name::parse ()
yybackup: yybackup:
/* Try to take a decision without lookahead. */ /* Try to take a decision without lookahead. */
n_ = pact_[[state_]]; n_ = pact_[state_];
if (n_ == pact_ninf_) if (n_ == pact_ninf_)
goto yydefault; goto yydefault;
@@ -350,7 +352,7 @@ yy::b4_parser_class_name::parse ()
if (debug_) if (debug_)
{ {
YYCDEBUG << "Next token is " << looka_ YYCDEBUG << "Next token is " << looka_
<< " (" << name_[[ilooka_]]; << " (" << name_[ilooka_];
print_ (); print_ ();
YYCDEBUG << ')' << std::endl; YYCDEBUG << ')' << std::endl;
} }
@@ -358,11 +360,11 @@ yy::b4_parser_class_name::parse ()
} }
n_ += ilooka_; n_ += ilooka_;
if (n_ < 0 || last_ < n_ || check_[[n_]] != ilooka_) if (n_ < 0 || last_ < n_ || check_[n_] != ilooka_)
goto yydefault; goto yydefault;
/* Reduce or error. */ /* Reduce or error. */
n_ = table_[[n_]]; n_ = table_[n_];
if (n_ < 0) if (n_ < 0)
{ {
if (n_ == table_ninf_) if (n_ == table_ninf_)
@@ -382,7 +384,7 @@ yy::b4_parser_class_name::parse ()
/* Shift the lookahead token. */ /* Shift the lookahead token. */
YYCDEBUG << "Shifting token " << looka_ YYCDEBUG << "Shifting token " << looka_
<< " (" << name_[[ilooka_]] << "), "; << " (" << name_[ilooka_] << "), ";
/* Discard the token being shifted unless it is eof. */ /* Discard the token being shifted unless it is eof. */
if (looka_ != eof_) if (looka_ != eof_)
@@ -401,34 +403,34 @@ yy::b4_parser_class_name::parse ()
/* Default action. */ /* Default action. */
yydefault: yydefault:
n_ = defact_[[state_]]; n_ = defact_[state_];
if (n_ == 0) if (n_ == 0)
goto yyerrlab; goto yyerrlab;
goto yyreduce; goto yyreduce;
/* Reduce. */ /* Reduce. */
yyreduce: yyreduce:
len_ = r2_[[n_]]; len_ = r2_[n_];
if (len_) if (len_)
{ {
yyval = semantic_stack_[[len_ - 1]]; yyval = semantic_stack_[len_ - 1];
yyloc = location_stack_[[len_ - 1]]; yyloc = location_stack_[len_ - 1];
} }
else else
{ {
yyval = semantic_stack_[[0]]; yyval = semantic_stack_[0];
yyloc = location_stack_[[0]]; yyloc = location_stack_[0];
} }
#if YYDEBUG #if YYDEBUG
if (debug_) if (debug_)
{ {
YYCDEBUG << "Reducing via rule " << n_ - 1 YYCDEBUG << "Reducing via rule " << n_ - 1
<< " (line " << rline_[[n_]] << "), "; << " (line " << rline_[n_] << "), ";
for (b4_int_type_for([b4_prhs]) i = prhs_[[n_]]; for (]b4_int_type_for([b4_prhs])[ i = prhs_[n_];
0 <= rhs_[[i]]; ++i) 0 <= rhs_[i]; ++i)
YYCDEBUG << name_[[rhs_[i]]] << ' '; YYCDEBUG << name_[rhs_[i]] << ' ';
YYCDEBUG << "-> " << name_[[r1_[n_]]] << std::endl; YYCDEBUG << "-> " << name_[r1_[n_]] << std::endl;
} }
#endif #endif
@@ -440,11 +442,11 @@ yy::b4_parser_class_name::parse ()
switch (n_) switch (n_)
{ {
b4_actions ]b4_actions[
} }
/* Line __line__ of __file__. */ ]/* Line __line__ of __file__. */
b4_syncline([@oline@], [@ofile@]) b4_syncline([@oline@], [@ofile@])[
state_stack_.pop (len_); state_stack_.pop (len_);
semantic_stack_.pop (len_); semantic_stack_.pop (len_);
@@ -465,12 +467,12 @@ b4_syncline([@oline@], [@ofile@])
location_stack_.push (yyloc); location_stack_.push (yyloc);
/* Shift the result of the reduction. */ /* Shift the result of the reduction. */
n_ = r1_[[n_]]; n_ = r1_[n_];
state_ = pgoto_[[n_ - ntokens_]] + state_stack_[[0]]; state_ = pgoto_[n_ - ntokens_] + state_stack_[0];
if (0 <= state_ && state_ <= last_ && check_[[state_]] == state_stack_[[0]]) if (0 <= state_ && state_ <= last_ && check_[state_] == state_stack_[0])
state_ = table_[[state_]]; state_ = table_[state_];
else else
state_ = defgoto_[[n_ - ntokens_]]; state_ = defgoto_[n_ - ntokens_];
goto yynewstate; goto yynewstate;
/* Report and recover from errors. This is very incomplete. */ /* Report and recover from errors. This is very incomplete. */
@@ -481,24 +483,24 @@ b4_syncline([@oline@], [@ofile@])
++nerrs; ++nerrs;
#if YYERROR_VERBOSE #if YYERROR_VERBOSE
n_ = pact_[[state_]]; n_ = pact_[state_];
if (pact_ninf_ < n_ && n_ < last_) if (pact_ninf_ < n_ && n_ < last_)
{ {
message = "syntax error, unexpected "; message = "syntax error, unexpected ";
message += name_[[ilooka_]]; message += name_[ilooka_];
{ {
int count = 0; int count = 0;
for (int x = (n_ < 0 ? -n_ : 0); x < ntokens_ + nnts_; ++x) for (int x = (n_ < 0 ? -n_ : 0); x < ntokens_ + nnts_; ++x)
if (check_[[x + n_]] == x && x != terror_) if (check_[x + n_] == x && x != terror_)
++count; ++count;
if (count < 5) if (count < 5)
{ {
count = 0; count = 0;
for (int x = (n_ < 0 ? -n_ : 0); x < ntokens_ + nnts_; ++x) for (int x = (n_ < 0 ? -n_ : 0); x < ntokens_ + nnts_; ++x)
if (check_[[x + n_]] == x && x != terror_) if (check_[x + n_] == x && x != terror_)
{ {
message += (!count++) ? ", expecting " : " or "; message += (!count++) ? ", expecting " : " or ";
message += name_[[x]]; message += name_[x];
} }
} }
} }
@@ -521,7 +523,7 @@ b4_syncline([@oline@], [@ofile@])
if (looka_ == eof_) if (looka_ == eof_)
goto yyabortlab; goto yyabortlab;
YYCDEBUG << "Discarding token " << looka_ YYCDEBUG << "Discarding token " << looka_
<< " (" << name_[[ilooka_]] << ")." << std::endl; << " (" << name_[ilooka_] << ")." << std::endl;
looka_ = empty_; looka_ = empty_;
} }
@@ -532,13 +534,13 @@ b4_syncline([@oline@], [@ofile@])
for (;;) for (;;)
{ {
n_ = pact_[[state_]]; n_ = pact_[state_];
if (n_ != pact_ninf_) if (n_ != pact_ninf_)
{ {
n_ += terror_; n_ += terror_;
if (0 <= n_ && n_ <= last_ && check_[[n_]] == terror_) if (0 <= n_ && n_ <= last_ && check_[n_] == terror_)
{ {
n_ = table_[[n_]]; n_ = table_[n_];
if (0 < n_) if (0 < n_)
break; break;
} }
@@ -551,13 +553,13 @@ b4_syncline([@oline@], [@ofile@])
#if YYDEBUG #if YYDEBUG
if (debug_) if (debug_)
{ {
if (stos_[[state_]] < ntokens_) if (stos_[state_] < ntokens_)
{ {
YYCDEBUG << "Error: popping token " YYCDEBUG << "Error: popping token "
<< token_number_[[stos_[state_]]] << token_number_[stos_[state_]]
<< " (" << name_[[stos_[state_]]]; << " (" << name_[stos_[state_]];
# ifdef YYPRINT # ifdef YYPRINT
YYPRINT (stderr, token_number_[[stos_[state_]]], YYPRINT (stderr, token_number_[stos_[state_]],
semantic_stack_.top ()); semantic_stack_.top ());
# endif # endif
YYCDEBUG << ')' << std::endl; YYCDEBUG << ')' << std::endl;
@@ -565,12 +567,12 @@ b4_syncline([@oline@], [@ofile@])
else else
{ {
YYCDEBUG << "Error: popping nonterminal (" YYCDEBUG << "Error: popping nonterminal ("
<< name_[[stos_[state_]]] << ')' << std::endl; << name_[stos_[state_]] << ')' << std::endl;
} }
} }
#endif #endif
state_ = (state_stack_.pop (), state_stack_[[0]]); state_ = (state_stack_.pop (), state_stack_[0]);
semantic_stack_.pop (); semantic_stack_.pop ();
location_stack_.pop ();; location_stack_.pop ();;
@@ -607,7 +609,7 @@ b4_syncline([@oline@], [@ofile@])
} }
void void
yy::b4_parser_class_name::lex_ () yy::]b4_parser_class_name[::lex_ ()
{ {
#if YYLSP_NEEDED #if YYLSP_NEEDED
looka_ = yylex (&value, &location); looka_ = yylex (&value, &location);
@@ -616,154 +618,154 @@ yy::b4_parser_class_name::lex_ ()
#endif #endif
} }
/* YYPACT[[STATE-NUM]] -- Index in YYTABLE of the portion describing /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
STATE-NUM. */ STATE-NUM. */
const b4_int_type_for([b4_pact]) yy::b4_parser_class_name::pact_ninf_ = b4_pact_ninf; const ]b4_int_type_for([b4_pact]) yy::b4_parser_class_name::pact_ninf_ = b4_pact_ninf[;
const b4_int_type_for([b4_pact]) const ]b4_int_type_for([b4_pact])[
yy::b4_parser_class_name::pact_[[]] = yy::]b4_parser_class_name[::pact_[] =
{ {
b4_pact ]b4_pact[
}; };
/* YYDEFACT[[S]] -- default rule to reduce with in state S when YYTABLE /* YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE
doesn't specify something else to do. Zero means the default is an doesn't specify something else to do. Zero means the default is an
error. */ error. */
const b4_int_type_for([b4_defact]) const ]b4_int_type_for([b4_defact])[
yy::b4_parser_class_name::defact_[[]] = yy::]b4_parser_class_name[::defact_[] =
{ {
b4_defact ]b4_defact[
}; };
/* YYPGOTO[[NTERM-NUM]]. */ /* YYPGOTO[NTERM-NUM]. */
const b4_int_type_for([b4_pgoto]) const ]b4_int_type_for([b4_pgoto])[
yy::b4_parser_class_name::pgoto_[[]] = yy::]b4_parser_class_name[::pgoto_[] =
{ {
b4_pgoto ]b4_pgoto[
}; };
/* YYDEFGOTO[[NTERM-NUM]]. */ /* YYDEFGOTO[NTERM-NUM]. */
const b4_int_type_for([b4_defgoto]) const ]b4_int_type_for([b4_defgoto])[
yy::b4_parser_class_name::defgoto_[[]] = yy::]b4_parser_class_name[::defgoto_[] =
{ {
b4_defgoto ]b4_defgoto[
}; };
/* YYTABLE[[YYPACT[STATE-NUM]]]. What to do in state STATE-NUM. If /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
positive, shift that token. If negative, reduce the rule which positive, shift that token. If negative, reduce the rule which
number is the opposite. If zero, do what YYDEFACT says. */ number is the opposite. If zero, do what YYDEFACT says. */
const b4_int_type_for([b4_table]) yy::b4_parser_class_name::table_ninf_ = b4_table_ninf; const ]b4_int_type_for([b4_table]) yy::b4_parser_class_name::table_ninf_ = b4_table_ninf[;
const b4_int_type_for([b4_table]) const ]b4_int_type_for([b4_table])[
yy::b4_parser_class_name::table_[[]] = yy::]b4_parser_class_name[::table_[] =
{ {
b4_table ]b4_table[
}; };
/* YYCHECK. */ /* YYCHECK. */
const b4_int_type_for([b4_check]) const ]b4_int_type_for([b4_check])[
yy::b4_parser_class_name::check_[[]] = yy::]b4_parser_class_name[::check_[] =
{ {
b4_check ]b4_check[
}; };
#if YYDEBUG #if YYDEBUG
/* STOS_[[STATE-NUM]] -- The (internal number of the) accessing /* STOS_[STATE-NUM] -- The (internal number of the) accessing
symbol of state STATE-NUM. */ symbol of state STATE-NUM. */
const b4_int_type_for([b4_stos]) const ]b4_int_type_for([b4_stos])[
yy::b4_parser_class_name::stos_[[]] = yy::]b4_parser_class_name[::stos_[] =
{ {
b4_stos ]b4_stos[
}; };
/* TOKEN_NUMBER_[[YYLEX-NUM]] -- Internal token number corresponding /* TOKEN_NUMBER_[YYLEX-NUM] -- Internal token number corresponding
to YYLEX-NUM. */ to YYLEX-NUM. */
const b4_int_type_for([b4_toknum]) const ]b4_int_type_for([b4_toknum])[
yy::b4_parser_class_name::token_number_[[]] = yy::]b4_parser_class_name[::token_number_[] =
{ {
b4_toknum ]b4_toknum[
}; };
#endif #endif
/* YYR1[[YYN]] -- Symbol number of symbol that rule YYN derives. */ /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
const b4_int_type_for([b4_r1]) const ]b4_int_type_for([b4_r1])[
yy::b4_parser_class_name::r1_[[]] = yy::]b4_parser_class_name[::r1_[] =
{ {
b4_r1 ]b4_r1[
}; };
/* YYR2[[YYN]] -- Number of symbols composing right hand side of rule YYN. */ /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
const b4_int_type_for([b4_r2]) const ]b4_int_type_for([b4_r2])[
yy::b4_parser_class_name::r2_[[]] = yy::]b4_parser_class_name[::r2_[] =
{ {
b4_r2 ]b4_r2[
}; };
#if YYDEBUG || YYERROR_VERBOSE #if YYDEBUG || YYERROR_VERBOSE
/* YYTNAME[[SYMBOL-NUM]] -- String name of the symbol SYMBOL-NUM. /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
First, the terminals, then, starting at YYNTOKENS, nonterminals. */ First, the terminals, then, starting at YYNTOKENS, nonterminals. */
const char* const char*
const yy::b4_parser_class_name::name_[[]] = const yy::]b4_parser_class_name[::name_[] =
{ {
b4_tname ]b4_tname[
}; };
#endif #endif
#if YYDEBUG #if YYDEBUG
/* YYRHS -- A `-1'-separated list of the rules' RHS. */ /* YYRHS -- A `-1'-separated list of the rules' RHS. */
const yy::b4_parser_class_name::RhsNumberType const yy::]b4_parser_class_name[::RhsNumberType
yy::b4_parser_class_name::rhs_[[]] = yy::]b4_parser_class_name[::rhs_[] =
{ {
b4_rhs ]b4_rhs[
}; };
/* YYPRHS[[YYN]] -- Index of the first RHS symbol of rule number YYN in /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
YYRHS. */ YYRHS. */
const b4_int_type_for([b4_prhs]) const ]b4_int_type_for([b4_prhs])[
yy::b4_parser_class_name::prhs_[[]] = yy::]b4_parser_class_name[::prhs_[] =
{ {
b4_prhs ]b4_prhs[
}; };
/* YYRLINE[[YYN]] -- source line where rule number YYN was defined. */ /* YYRLINE[YYN] -- source line where rule number YYN was defined. */
const b4_int_type_for([b4_rline]) const ]b4_int_type_for([b4_rline])[
yy::b4_parser_class_name::rline_[[]] = yy::]b4_parser_class_name[::rline_[] =
{ {
b4_rline ]b4_rline[
}; };
#endif #endif
/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
yy::b4_parser_class_name::TokenNumberType yy::]b4_parser_class_name[::TokenNumberType
yy::b4_parser_class_name::translate_ (int token) yy::]b4_parser_class_name[::translate_ (int token)
{ {
static static
const TokenNumberType const TokenNumberType
translate_[[]] = translate_[] =
{ {
b4_translate ]b4_translate[
}; };
if ((unsigned) token <= user_token_number_max_) if ((unsigned) token <= user_token_number_max_)
return translate_[[token]]; return translate_[token];
else else
return undef_token_; return undef_token_;
} }
const int yy::b4_parser_class_name::eof_ = 0; const int yy::]b4_parser_class_name[::eof_ = 0;
const int yy::b4_parser_class_name::last_ = b4_last; const int yy::]b4_parser_class_name[::last_ = ]b4_last[;
const int yy::b4_parser_class_name::nnts_ = b4_nterms_number; const int yy::]b4_parser_class_name[::nnts_ = ]b4_nterms_number[;
const int yy::b4_parser_class_name::empty_ = -2; const int yy::]b4_parser_class_name[::empty_ = -2;
const int yy::b4_parser_class_name::final_ = b4_final_state_number; const int yy::]b4_parser_class_name[::final_ = ]b4_final_state_number[;
const int yy::b4_parser_class_name::terror_ = 1; const int yy::]b4_parser_class_name[::terror_ = 1;
const int yy::b4_parser_class_name::errcode_ = 256; const int yy::]b4_parser_class_name[::errcode_ = 256;
const int yy::b4_parser_class_name::ntokens_ = b4_tokens_number; const int yy::]b4_parser_class_name[::ntokens_ = ]b4_tokens_number[;
const int yy::b4_parser_class_name::initdepth_ = b4_stack_depth_init; const int yy::]b4_parser_class_name[::initdepth_ = ]b4_stack_depth_init[;
const unsigned yy::b4_parser_class_name::user_token_number_max_ = b4_user_token_number_max; const unsigned yy::]b4_parser_class_name[::user_token_number_max_ = ]b4_user_token_number_max[;
const yy::b4_parser_class_name::TokenNumberType yy::b4_parser_class_name::undef_token_ = b4_undef_token_number; const yy::]b4_parser_class_name[::TokenNumberType yy::]b4_parser_class_name[::undef_token_ = ]b4_undef_token_number[;
b4_epilogue ]b4_epilogue
dnl dnl
@output stack.hh @output stack.hh
b4_copyright([2002]) b4_copyright([2002])[
#ifndef BISON_STACK_HH #ifndef BISON_STACK_HH
# define BISON_STACK_HH # define BISON_STACK_HH
@@ -790,16 +792,16 @@ namespace yy
inline inline
T& T&
operator [[]] (unsigned index) operator [] (unsigned index)
{ {
return seq_[[index]]; return seq_[index];
} }
inline inline
const T& const T&
operator [[]] (unsigned index) const operator [] (unsigned index) const
{ {
return seq_[[index]]; return seq_[index];
} }
inline inline
@@ -845,9 +847,9 @@ namespace yy
inline inline
const T& const T&
operator [[]] (unsigned index) const operator [] (unsigned index) const
{ {
return stack_[[range_ - index]]; return stack_[range_ - index];
} }
private: private:
@@ -857,10 +859,10 @@ namespace yy
}; };
} }
#endif // not BISON_STACK_HH #endif // not BISON_STACK_HH]
dnl dnl
@output location.hh @output location.hh
b4_copyright([2002]) b4_copyright([2002])[
#ifndef BISON_LOCATION_HH #ifndef BISON_LOCATION_HH
# define BISON_LOCATION_HH # define BISON_LOCATION_HH
@@ -880,4 +882,4 @@ namespace yy
}; };
} }
#endif // not BISON_LOCATION_HH #endif // not BISON_LOCATION_HH]

View File

@@ -340,108 +340,108 @@ union yyalloc
/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
static const ]b4_int_type_for([b4_translate])[ yytranslate[] = static const ]b4_int_type_for([b4_translate])[ yytranslate[] =
{ {
]b4_translate ]b4_translate[
}; };
#if YYDEBUG #if YYDEBUG
/* YYPRHS[[YYN]] -- Index of the first RHS symbol of rule number YYN in /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
YYRHS. */ YYRHS. */
static const b4_int_type_for([b4_prhs]) yyprhs[[]] = static const ]b4_int_type_for([b4_prhs])[ yyprhs[] =
{ {
b4_prhs ]b4_prhs[
}; };
/* YYRHS -- A `-1'-separated list of the rules' RHS. */ /* YYRHS -- A `-1'-separated list of the rules' RHS. */
static const b4_int_type_for([b4_rhs]) yyrhs[[]] = static const ]b4_int_type_for([b4_rhs])[ yyrhs[] =
{ {
b4_rhs ]b4_rhs[
}; };
/* YYRLINE[[YYN]] -- source line where rule number YYN was defined. */ /* YYRLINE[YYN] -- source line where rule number YYN was defined. */
static const b4_int_type_for([b4_rline]) yyrline[[]] = static const ]b4_int_type_for([b4_rline])[ yyrline[] =
{ {
b4_rline ]b4_rline[
}; };
#endif #endif
#if YYDEBUG || YYERROR_VERBOSE #if YYDEBUG || YYERROR_VERBOSE
/* YYTNME[[SYMBOL-NUM]] -- String name of the symbol SYMBOL-NUM. /* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
First, the terminals, then, starting at YYNTOKENS, nonterminals. */ First, the terminals, then, starting at YYNTOKENS, nonterminals. */
static const char *const yytname[[]] = static const char *const yytname[] =
{ {
b4_tname ]b4_tname[
}; };
#endif #endif
# ifdef YYPRINT # ifdef YYPRINT
/* YYTOKNUM[[YYLEX-NUM]] -- Internal token number corresponding to /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
token YYLEX-NUM. */ token YYLEX-NUM. */
static const b4_int_type_for([b4_toknum]) yytoknum[[]] = static const ]b4_int_type_for([b4_toknum])[ yytoknum[] =
{ {
b4_toknum ]b4_toknum[
}; };
# endif # endif
/* YYR1[[YYN]] -- Symbol number of symbol that rule YYN derives. */ /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
static const b4_int_type_for([b4_r1]) yyr1[[]] = static const ]b4_int_type_for([b4_r1])[ yyr1[] =
{ {
b4_r1 ]b4_r1[
}; };
/* YYR2[[YYN]] -- Number of symbols composing right hand side of rule YYN. */ /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
static const b4_int_type_for([b4_r2]) yyr2[[]] = static const ]b4_int_type_for([b4_r2])[ yyr2[] =
{ {
b4_r2 ]b4_r2[
}; };
/* YYDEFACT[[STATE-NAME]] -- Default rule to reduce with in state /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
STATE-NUM when YYTABLE doesn't specify something else to do. Zero STATE-NUM when YYTABLE doesn't specify something else to do. Zero
means the default is an error. */ means the default is an error. */
static const b4_int_type_for([b4_defact]) yydefact[[]] = static const ]b4_int_type_for([b4_defact])[ yydefact[] =
{ {
b4_defact ]b4_defact[
}; };
/* YYDEFGOTO[[NTERM-NUM]]. */ /* YYDEFGOTO[NTERM-NUM]. */
static const b4_int_type_for([b4_defgoto]) yydefgoto[[]] = static const ]b4_int_type_for([b4_defgoto])[ yydefgoto[] =
{ {
b4_defgoto ]b4_defgoto[
}; };
/* YYPACT[[STATE-NUM]] -- Index in YYTABLE of the portion describing /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
STATE-NUM. */ STATE-NUM. */
#define YYPACT_NINF b4_pact_ninf #define YYPACT_NINF ]b4_pact_ninf[
static const b4_int_type_for([b4_pact]) yypact[[]] = static const ]b4_int_type_for([b4_pact])[ yypact[] =
{ {
b4_pact ]b4_pact[
}; };
/* YYPGOTO[[NTERM-NUM]]. */ /* YYPGOTO[NTERM-NUM]. */
static const b4_int_type_for([b4_pgoto]) yypgoto[[]] = static const ]b4_int_type_for([b4_pgoto])[ yypgoto[] =
{ {
b4_pgoto ]b4_pgoto[
}; };
/* YYTABLE[[YYPACT[STATE-NUM]]]. What to do in state STATE-NUM. If /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
positive, shift that token. If negative, reduce the rule which positive, shift that token. If negative, reduce the rule which
number is the opposite. If zero, do what YYDEFACT says. number is the opposite. If zero, do what YYDEFACT says.
If YYTABLE_NINF, syntax error. */ If YYTABLE_NINF, syntax error. */
#define YYTABLE_NINF b4_table_ninf #define YYTABLE_NINF ]b4_table_ninf[
static const b4_int_type_for([b4_table]) yytable[[]] = static const ]b4_int_type_for([b4_table])[ yytable[] =
{ {
b4_table ]b4_table[
}; };
static const b4_int_type_for([b4_check]) yycheck[[]] = static const ]b4_int_type_for([b4_check])[ yycheck[] =
{ {
b4_check ]b4_check[
}; };
/* YYSTOS[[STATE-NUM]] -- The (internal number of the) accessing /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
symbol of state STATE-NUM. */ symbol of state STATE-NUM. */
static const b4_int_type_for([b4_stos]) yystos[[]] = static const ]b4_int_type_for([b4_stos])[ yystos[] =
{ {
b4_stos[ ]b4_stos[
}; };
#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
@@ -529,11 +529,13 @@ do { \
if (yydebug) \ if (yydebug) \
YYFPRINTF Args; \ YYFPRINTF Args; \
} while (0) } while (0)
# define YYDSYMPRINT(Args) \ # define YYDSYMPRINT(Args) \
do { \ do { \
if (yydebug) \ if (yydebug) \
yysymprint Args; \ yysymprint Args; \
} while (0) } while (0)
# define YYDSYMPRINTF(Title, Token, Value, Location) \ # define YYDSYMPRINTF(Title, Token, Value, Location) \
do { \ do { \
if (yydebug) \ if (yydebug) \
@@ -633,7 +635,7 @@ yystpcpy (yydest, yysrc)
#if YYDEBUG #if YYDEBUG
]b4_yysymprint_generate([b4_c_function_def])[ ]b4_yysymprint_generate([b4_c_function_def])[
#endif /* YYDEBUG. */ #endif /* ! YYDEBUG */
]b4_yydestruct_generate([b4_c_function_def]) ]b4_yydestruct_generate([b4_c_function_def])
@@ -647,7 +649,7 @@ int yyparse ();
# endif # endif
#else /* ! YYPARSE_PARAM */ #else /* ! YYPARSE_PARAM */
b4_c_function_decl([yyparse], [int], b4_parse_param) b4_c_function_decl([yyparse], [int], b4_parse_param)
#endif #endif /* ! YYPARSE_PARAM */
m4_divert_push([KILL])# ======================== M4 code. m4_divert_push([KILL])# ======================== M4 code.

View File

@@ -54,15 +54,16 @@ static const char * const trace_args[] =
/* In a series of synonyms, present the most meaningful first, so /* In a series of synonyms, present the most meaningful first, so
that argmatch_valid be more readable. */ that argmatch_valid be more readable. */
"none - no report", "none - no report",
"scan - scanner traces", "scan - grammar scanner traces",
"parse - parser traces", "parse - grammar parser traces",
"automaton - contruction of the automaton", "automaton - contruction of the automaton",
"bitsets - use of bitsets", "bitsets - use of bitsets",
"grammar - reading, reducing of the grammar", "grammar - reading, reducing of the grammar",
"resource - memory consumption (where available)", "resource - memory consumption (where available)",
"sets - grammar sets: firsts, nullable etc.", "sets - grammar sets: firsts, nullable etc.",
"time - time consumption",
"tools - m4 invocation and preserve the temporary file", "tools - m4 invocation and preserve the temporary file",
"skeleton - skeleton postprocessing",
"time - time consumption",
"all - all of the above", "all - all of the above",
0 0
}; };
@@ -77,8 +78,9 @@ static const int trace_types[] =
trace_grammar, trace_grammar,
trace_resource, trace_resource,
trace_sets, trace_sets,
trace_time,
trace_tools, trace_tools,
trace_skeleton,
trace_time,
trace_all trace_all
}; };

View File

@@ -48,6 +48,7 @@ enum trace_e
trace_automaton = 1 << 6, trace_automaton = 1 << 6,
trace_grammar = 1 << 7, trace_grammar = 1 << 7,
trace_time = 1 << 8, trace_time = 1 << 8,
trace_skeleton = 1 << 9,
trace_all = ~0 trace_all = ~0
}; };
extern int trace_flag; extern int trace_flag;

View File

@@ -18,7 +18,7 @@
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA. */ 02111-1307, USA. */
%option nodefault noyywrap nounput never-interactive %option nodefault noyywrap nounput never-interactive debug
%option prefix="skel_" outfile="lex.yy.c" %option prefix="skel_" outfile="lex.yy.c"
%{ %{
@@ -30,6 +30,9 @@
int skel_lex (void); int skel_lex (void);
#define QPUTS(String) \
fputs (quotearg_style (c_quoting_style, (String)), yyout);
%} %}
%% %%
@@ -63,11 +66,13 @@ int skel_lex (void);
"@}" fputc (']', yyout); "@}" fputc (']', yyout);
"@oline@" fprintf (yyout, "%d", lineno); "@oline@" fprintf (yyout, "%d", lineno);
"@ofile@" fputs (quotearg_style (c_quoting_style, outname), yyout); "@ofile@" QPUTS (outname);
"@output_parser_name@" QPUTS (parser_file_name);
"@output_header_name@" QPUTS (spec_defines_file);
"@" abort (); "@" abort ();
\n lineno++; ECHO; \n lineno++; ECHO;
. ECHO; [^@\n]+ ECHO;
<<EOF>> xfclose (yyout); free (outname); return EOF; <<EOF>> xfclose (yyout); free (outname); return EOF;
%% %%
@@ -82,8 +87,8 @@ void
scan_skel (FILE *in) scan_skel (FILE *in)
{ {
skel_in = in; skel_in = in;
skel__flex_debug = trace_flag & trace_skeleton;
skel_lex (); skel_lex ();
/* Reclaim Flex's buffers. */ /* Reclaim Flex's buffers. */
yy_delete_buffer (YY_CURRENT_BUFFER); yy_delete_buffer (YY_CURRENT_BUFFER);
} }