* doc/Doxyfile.in: New.

* doc/Makefile.am: Use it.
* src/lalr.h, src/symtab.h: Initial doxygenation.
This commit is contained in:
Akim Demaille
2006-06-27 14:09:54 +00:00
parent 8ee5b53874
commit 2073e1b602
5 changed files with 1205 additions and 54 deletions

View File

@@ -1,3 +1,9 @@
2006-06-27 Akim Demaille <akim@epita.fr>
* doc/Doxyfile.in: New.
* doc/Makefile.am: Use it.
* src/lalr.h, src/symtab.h: Initial doxygenation.
2006-06-26 Joel E. Denny <jdenny@ces.clemson.edu>
Don't miss %merge result type warnings just because the LHS types are

1087
doc/Doxyfile.in Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -24,11 +24,44 @@ bison_TEXINFOS = gpl.texi fdl.texi
EXTRA_DIST = bison.1 refcard.tex
CLEANFILES = refcard.dvi refcard.log refcard.ps bison.fns
CLEANDIRS = *.t2d
clean-local:
rm -rf *.t2d
rm -rf $(CLEANDIRS)
refcard.dvi: refcard.tex
tex refcard.tex
refcard.ps: refcard.dvi
## -------------- ##
## Doxygenation. ##
## -------------- ##
DOXYGEN = doxygen
.PHONY: doc html
doc: html
html-local: Doxyfile
$(DOXYGEN)
edit = sed -e "s|@ID@|$$Id|" \
-e 's,@PACKAGE_NAME\@,$(PACKAGE_NAME),g' \
-e 's,@PACKAGE_VERSION\@,$(PACKAGE_VERSION),g' \
-e 's,@top_builddir\@,$(top_builddir),g' \
-e 's,@top_srcdir\@,$(top_srcdir),g'
EXTRA_DIST += Doxyfile.in
CLEANFILES += Doxyfile
# Sed is used to generate Doxyfile from Doxyfile.in instead of
# configure, because the former is way faster than the latter.
# Moreover, this file is updated whenever ChangeLog is touched: using
# sed instead of configure saves us a lot of time.
Doxyfile: $(top_srcdir)/ChangeLog $(srcdir)/Doxyfile.in
Id=`grep '^\$$Id' $(top_srcdir)/ChangeLog`; \
$(edit) $(srcdir)/Doxyfile.in >Doxyfile
CLEANDIRS += html latex

View File

@@ -1,6 +1,6 @@
/* Compute lookahead criteria for bison,
Copyright (C) 1984, 1986, 1989, 2000, 2002, 2004 Free Software
Copyright (C) 1984, 1986, 1989, 2000, 2002, 2004, 2006 Free Software
Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler.
@@ -32,35 +32,41 @@
/* Import the definition of CORE, TRANSITIONS and REDUCTIONS. */
# include "state.h"
/* Compute how to make the finite state machine deterministic; find
which rules need lookahead in each state, and which lookahead
tokens they accept. */
/** Build the LALR(1) automaton.
Compute how to make the finite state machine deterministic; find
which rules need lookahead in each state, and which lookahead
tokens they accept.
Builds:
- #goto_map
- #from_state
- #to_state
*/
void lalr (void);
/* Release the information related to lookahead tokens. Can be performed
once the action tables are computed. */
/** Release the information related to lookahead tokens.
Can be performed once the action tables are computed. */
void lalr_free (void);
/* lalr() builds these data structures. */
/* GOTO_MAP, FROM_STATE and TO_STATE -- record each shift transition
which accepts a variable (a nonterminal).
FROM_STATE[T] -- state number which a transition leads from.
TO_STATE[T] -- state number it leads to.
All the transitions that accept a particular variable are grouped
together and GOTO_MAP[I - NTOKENS] is the index in FROM_STATE and
TO_STATE of the first of them. */
typedef size_t goto_number;
# define GOTO_NUMBER_MAXIMUM ((goto_number) -1)
/** Index into #from_state and #to_state.
All the transitions that accept a particular variable are grouped
together and GOTO_MAP[I - NTOKENS] is the index in FROM_STATE and
TO_STATE of the first of them. */
extern goto_number *goto_map;
/** State number which a transition leads from. */
extern state_number *from_state;
/** State number it leads to. */
extern state_number *to_state;

View File

@@ -20,6 +20,11 @@
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA. */
/**
* \file symtab.h
* \brief Manipulating ::symbol.
*/
#ifndef SYMTAB_H_
# define SYMTAB_H_
@@ -31,16 +36,16 @@
| Symbols. |
`----------*/
/* Symbol classes. */
/** Symbol classes. */
typedef enum
{
unknown_sym,
token_sym, /* terminal symbol */
nterm_sym /* non-terminal */
unknown_sym, /**< Undefined. */
token_sym, /**< Terminal. */
nterm_sym /**< Non-terminal. */
} symbol_class;
/* Internal token numbers. */
/** Internal token numbers. */
typedef int symbol_number;
#define SYMBOL_NUMBER_MAXIMUM INT_MAX
@@ -51,20 +56,20 @@ typedef struct symbol symbol;
symbol_check_alias_consistency. */
struct symbol
{
/* The key, name of the symbol. */
/** The key, name of the symbol. */
uniqstr tag;
/* The location of its first occurrence. */
/** The location of its first occurrence. */
location location;
/* Its %type and associated printer and destructor. */
/** Its %type and associated printer and destructor. */
uniqstr type_name;
location type_location;
/* Does not own the memory. */
/** Does not own the memory. */
const char *destructor;
location destructor_location;
/* Printer. */
/** Printer. */
const char *printer;
location printer_location;
@@ -82,7 +87,8 @@ struct symbol
bool declared;
};
/* Undefined user number. */
/** Undefined user number. */
#define USER_NUMBER_UNDEFINED -1
/* `symbol->user_token_number == USER_NUMBER_ALIAS' means this symbol
@@ -94,52 +100,62 @@ struct symbol
/* Undefined internal token number. */
#define NUMBER_UNDEFINED (-1)
/* Print a symbol (for debugging). */
/** Print a symbol (for debugging). */
void symbol_print (symbol *s, FILE *f);
/* Fetch (or create) the symbol associated to KEY. */
/** Fetch (or create) the symbol associated to KEY. */
symbol *symbol_from_uniqstr (const uniqstr key, location loc);
/* Fetch (or create) the symbol associated to KEY. */
/** Fetch (or create) the symbol associated to KEY. */
symbol *symbol_get (const char *key, location loc);
/* Generate a dummy nonterminal, whose name cannot conflict with the
user's names. */
/** Generate a dummy nonterminal.
Its name cannot conflict with the user's names. */
symbol *dummy_symbol_get (location loc);
/* Declare the new symbol SYM. Make it an alias of SYMVAL. */
/** Declare the new symbol \c sym. Make it an alias of \c symval. */
void symbol_make_alias (symbol *sym, symbol *symval, location loc);
/* Set the TYPE_NAME associated with SYM. Do nothing if passed 0 as
TYPE_NAME. */
/** Set the \c type_name associated with \c sym.
Do nothing if passed 0 as \c type_name. */
void symbol_type_set (symbol *sym, uniqstr type_name, location loc);
/* Set the DESTRUCTOR associated with SYM. */
/** Set the \c destructor associated with \c sym. */
void symbol_destructor_set (symbol *sym, const char *destructor, location loc);
/* Set the PRINTER associated with SYM. */
/** Set the \c printer associated with \c sym. */
void symbol_printer_set (symbol *sym, const char *printer, location loc);
/* Set the PRECEDENCE associated with SYM. Ensure that SYMBOL is a
terminal. Do nothing if invoked with UNDEF_ASSOC as ASSOC. */
/* Set the \c precedence associated with \c sym.
Ensure that \a symbol is a terminal.
Do nothing if invoked with \c undef_assoc as \c assoc. */
void symbol_precedence_set (symbol *sym, int prec, assoc a, location loc);
/* Set the CLASS associated with SYM. */
/** Set the \c class associated with \c sym. */
void symbol_class_set (symbol *sym, symbol_class class, location loc,
bool declaring);
/* Set the USER_TOKEN_NUMBER associated with SYM. */
/** Set the \c user_token_number associated with \c sym. */
void symbol_user_token_number_set (symbol *sym, int user_number, location loc);
/* Distinguished symbols. AXIOM is the real start symbol, that used
by the automaton. STARTSYMBOL is the one specified by the user.
*/
/** The error token. */
extern symbol *errtoken;
/** The token for unknown tokens. */
extern symbol *undeftoken;
/** The end of input token. */
extern symbol *endtoken;
/** The genuine start symbol.
$accept: start-symbol $end */
extern symbol *accept;
/** The user start symbol. */
extern symbol *startsymbol;
/** The location of the \c %start declaration. */
extern location startsymbol_location;
@@ -148,18 +164,21 @@ extern location startsymbol_location;
`---------------*/
/* Create the symbol table. */
/** Create the symbol table. */
void symbols_new (void);
/* Free all the memory allocated for symbols. */
/** Free all the memory allocated for symbols. */
void symbols_free (void);
/* Check that all the symbols are defined. Report any undefined
symbols and consider them nonterminals. */
/** Check that all the symbols are defined.
Report any undefined symbols and consider them nonterminals. */
void symbols_check_defined (void);
/* Perform various sanity checks, assign symbol numbers, and set up
TOKEN_TRANSLATIONS. */
/** Sanity checks and #token_translations construction.
Perform various sanity checks, assign symbol numbers, and set up
#token_translations. */
void symbols_pack (void);
#endif /* !SYMTAB_H_ */