doc: style changes.

* doc/bison.texinfo: Avoid line width issues with TeX.
Upgrade ancient messages.
Move some comments to better looking places.
Add more @group.
(Mfcalc Symbol Table): Reduce variable scopes.
Prefer size_t for sizes.
Prefer declarations with an initial value.
Fix a @group environment.
This commit is contained in:
Akim Demaille
2012-03-15 15:36:20 +01:00
parent 1e5d654019
commit aaaa2aaef4

View File

@@ -1274,8 +1274,9 @@ will suffice. Otherwise, we suggest
@example @example
%@{ %@{
#if __STDC_VERSION__ < 199901 && ! defined __GNUC__ && ! defined inline #if (__STDC_VERSION__ < 199901 && ! defined __GNUC__ \
#define inline && ! defined inline)
# define inline
#endif #endif
%@} %@}
@end example @end example
@@ -1464,11 +1465,11 @@ simple program, all the rest of the program can go here.
@cindex simple examples @cindex simple examples
@cindex examples, simple @cindex examples, simple
Now we show and explain three sample programs written using Bison: a Now we show and explain several sample programs written using Bison: a
reverse polish notation calculator, an algebraic (infix) notation reverse polish notation calculator, an algebraic (infix) notation
calculator, and a multi-function calculator. All three have been tested calculator --- later extended to track ``locations'' ---
under BSD Unix 4.3; each produces a usable, though limited, interactive and a multi-function calculator. All
desk-top calculator. produce usable, though limited, interactive desk-top calculators.
These examples are simple, but Bison grammars for real programming These examples are simple, but Bison grammars for real programming
languages are written the same way. You can copy these examples into a languages are written the same way. You can copy these examples into a
@@ -1570,24 +1571,28 @@ Here are the grammar rules for the reverse polish notation calculator.
@comment file: rpcalc.y @comment file: rpcalc.y
@example @example
@group
input: /* empty */ input: /* empty */
| input line | input line
; ;
@end group
@group
line: '\n' line: '\n'
| exp '\n' @{ printf ("%.10g\n", $1); @} | exp '\n' @{ printf ("%.10g\n", $1); @}
; ;
@end group
@group
exp: NUM @{ $$ = $1; @} exp: NUM @{ $$ = $1; @}
| exp exp '+' @{ $$ = $1 + $2; @} | exp exp '+' @{ $$ = $1 + $2; @}
| exp exp '-' @{ $$ = $1 - $2; @} | exp exp '-' @{ $$ = $1 - $2; @}
| exp exp '*' @{ $$ = $1 * $2; @} | exp exp '*' @{ $$ = $1 * $2; @}
| exp exp '/' @{ $$ = $1 / $2; @} | exp exp '/' @{ $$ = $1 / $2; @}
/* Exponentiation */ | exp exp '^' @{ $$ = pow ($1, $2); @} /* Exponentiation */
| exp exp '^' @{ $$ = pow ($1, $2); @} | exp 'n' @{ $$ = -$1; @} /* Unary minus */
/* Unary minus */
| exp 'n' @{ $$ = -$1; @}
; ;
@end group
%% %%
@end example @end example
@@ -1846,7 +1851,9 @@ here is the definition we will use:
@example @example
@group @group
#include <stdio.h> #include <stdio.h>
@end group
@group
/* Called by yyparse on error. */ /* Called by yyparse on error. */
void void
yyerror (char const *s) yyerror (char const *s)
@@ -1952,6 +1959,7 @@ parentheses nested to arbitrary depth. Here is the Bison code for
@example @example
/* Infix notation calculator. */ /* Infix notation calculator. */
@group
%@{ %@{
#define YYSTYPE double #define YYSTYPE double
#include <math.h> #include <math.h>
@@ -1959,32 +1967,41 @@ parentheses nested to arbitrary depth. Here is the Bison code for
int yylex (void); int yylex (void);
void yyerror (char const *); void yyerror (char const *);
%@} %@}
@end group
@group
/* Bison declarations. */ /* Bison declarations. */
%token NUM %token NUM
%left '-' '+' %left '-' '+'
%left '*' '/' %left '*' '/'
%precedence NEG /* negation--unary minus */ %precedence NEG /* negation--unary minus */
%right '^' /* exponentiation */ %right '^' /* exponentiation */
@end group
%% /* The grammar follows. */ %% /* The grammar follows. */
@group
input: /* empty */ input: /* empty */
| input line | input line
; ;
@end group
@group
line: '\n' line: '\n'
| exp '\n' @{ printf ("\t%.10g\n", $1); @} | exp '\n' @{ printf ("\t%.10g\n", $1); @}
; ;
@end group
exp: NUM @{ $$ = $1; @} @group
| exp '+' exp @{ $$ = $1 + $3; @} exp: NUM @{ $$ = $1; @}
| exp '-' exp @{ $$ = $1 - $3; @} | exp '+' exp @{ $$ = $1 + $3; @}
| exp '*' exp @{ $$ = $1 * $3; @} | exp '-' exp @{ $$ = $1 - $3; @}
| exp '/' exp @{ $$ = $1 / $3; @} | exp '*' exp @{ $$ = $1 * $3; @}
| '-' exp %prec NEG @{ $$ = -$2; @} | exp '/' exp @{ $$ = $1 / $3; @}
| '-' exp %prec NEG @{ $$ = -$2; @}
| exp '^' exp @{ $$ = pow ($1, $3); @} | exp '^' exp @{ $$ = pow ($1, $3); @}
| '(' exp ')' @{ $$ = $2; @} | '(' exp ')' @{ $$ = $2; @}
; ;
@end group
%% %%
@end example @end example
@@ -2521,10 +2538,9 @@ void
init_table (void) init_table (void)
@{ @{
int i; int i;
symrec *ptr;
for (i = 0; arith_fncts[i].fname != 0; i++) for (i = 0; arith_fncts[i].fname != 0; i++)
@{ @{
ptr = putsym (arith_fncts[i].fname, FNCT); symrec *ptr = putsym (arith_fncts[i].fname, FNCT);
ptr->value.fnctptr = arith_fncts[i].fnct; ptr->value.fnctptr = arith_fncts[i].fnct;
@} @}
@} @}
@@ -2550,8 +2566,7 @@ found, a pointer to that symbol is returned; otherwise zero is returned.
symrec * symrec *
putsym (char const *sym_name, int sym_type) putsym (char const *sym_name, int sym_type)
@{ @{
symrec *ptr; symrec *ptr = (symrec *) malloc (sizeof (symrec));
ptr = (symrec *) malloc (sizeof (symrec));
ptr->name = (char *) malloc (strlen (sym_name) + 1); ptr->name = (char *) malloc (strlen (sym_name) + 1);
strcpy (ptr->name,sym_name); strcpy (ptr->name,sym_name);
ptr->type = sym_type; ptr->type = sym_type;
@@ -2628,24 +2643,18 @@ yylex (void)
/* Char starts an identifier => read the name. */ /* Char starts an identifier => read the name. */
if (isalpha (c)) if (isalpha (c))
@{ @{
symrec *s;
static char *symbuf = 0;
static int length = 0;
int i;
@end group
@group
/* Initially make the buffer long enough /* Initially make the buffer long enough
for a 40-character symbol name. */ for a 40-character symbol name. */
if (length == 0) static size_t length = 40;
@{ static char *symbuf = 0;
length = 40; symrec *s;
symbuf = (char *) malloc (length + 1); int i;
@} @end group
if (!symbuf)
symbuf = (char *) malloc (length + 1);
i = 0; i = 0;
do do
@end group
@group @group
@{ @{
/* If buffer is full, make it bigger. */ /* If buffer is full, make it bigger. */
@@ -2689,8 +2698,6 @@ The error reporting function is unchanged, and the new version of
@comment file: mfcalc.y @comment file: mfcalc.y
@smallexample @smallexample
@group
@group @group
/* Called by yyparse on error. */ /* Called by yyparse on error. */
void void
@@ -2700,6 +2707,7 @@ yyerror (char const *s)
@} @}
@end group @end group
@group
int int
main (int argc, char const* argv[]) main (int argc, char const* argv[])
@{ @{
@@ -4136,6 +4144,7 @@ By default, @code{YYLLOC_DEFAULT} is defined this way:
@end group @end group
@end smallexample @end smallexample
@noindent
where @code{YYRHSLOC (rhs, k)} is the location of the @var{k}th symbol where @code{YYRHSLOC (rhs, k)} is the location of the @var{k}th symbol
in @var{rhs} when @var{k} is positive, and the location of the symbol in @var{rhs} when @var{k} is positive, and the location of the symbol
just before the reduction when @var{k} and @var{n} are both zero. just before the reduction when @var{k} and @var{n} are both zero.
@@ -9357,9 +9366,9 @@ The types for semantic values and locations (if enabled).
@end defcv @end defcv
@defcv {Type} {parser} {token} @defcv {Type} {parser} {token}
A structure that contains (only) the definition of the tokens as the A structure that contains (only) the @code{yytokentype} enumeration, which
@code{yytokentype} enumeration. To refer to the token @code{FOO}, the defines the tokens. To refer to the token @code{FOO},
scanner should use @code{yy::parser::token::FOO}. The scanner can use use @code{yy::parser::token::FOO}. The scanner can use
@samp{typedef yy::parser::token token;} to ``import'' the token enumeration @samp{typedef yy::parser::token token;} to ``import'' the token enumeration
(@pxref{Calc++ Scanner}). (@pxref{Calc++ Scanner}).
@end defcv @end defcv
@@ -10043,7 +10052,7 @@ calcxx_driver::scan_begin ()
yyin = stdin; yyin = stdin;
else if (!(yyin = fopen (file.c_str (), "r"))) else if (!(yyin = fopen (file.c_str (), "r")))
@{ @{
error (std::string ("cannot open ") + file + ": " + strerror(errno)); error ("cannot open " + file + ": " + strerror(errno));
exit (EXIT_FAILURE); exit (EXIT_FAILURE);
@} @}
@} @}