diff options
author | Akim Demaille <demaille@gostai.com> | 2012-02-16 15:11:13 +0100 |
---|---|---|
committer | Akim Demaille <demaille@gostai.com> | 2012-02-16 15:52:14 +0100 |
commit | aeb57fb68d65623029357887015c2044342e2722 (patch) | |
tree | 75d6c50f9555718cdd5c38ba9a9c3c862871d1f2 | |
parent | f9c75dd016198f9b8c255f1bb139360eef3f071f (diff) | |
download | bison-aeb57fb68d65623029357887015c2044342e2722.tar.gz |
doc: mfcalc: send errors to stderr.
* doc/bison.texinfo (Mfcalc Lexer): New.
(Mfcalc Main): Move the definition of main and yyerror here, for
clarity.
Let yyerror report on stderr.
-rw-r--r-- | doc/bison.texinfo | 60 |
1 files changed, 37 insertions, 23 deletions
diff --git a/doc/bison.texinfo b/doc/bison.texinfo index 8391e714..f39f79ec 100644 --- a/doc/bison.texinfo +++ b/doc/bison.texinfo @@ -178,6 +178,8 @@ Multi-Function Calculator: @code{mfcalc} * Mfcalc Declarations:: Bison declarations for multi-function calculator. * Mfcalc Rules:: Grammar rules for the calculator. * Mfcalc Symbol Table:: Symbol table management subroutines. +* Mfcalc Lexer:: The lexical analyzer. +* Mfcalc Main:: The controlling function. Bison Grammar Files @@ -2320,6 +2322,8 @@ Note that multiple assignment and nested function calls are permitted. * Mfcalc Declarations:: Bison declarations for multi-function calculator. * Mfcalc Rules:: Grammar rules for the calculator. * Mfcalc Symbol Table:: Symbol table management subroutines. +* Mfcalc Lexer:: The lexical analyzer. +* Mfcalc Main:: The controlling function. @end menu @node Mfcalc Declarations @@ -2466,23 +2470,11 @@ symrec *getsym (char const *); @end group @end smallexample -The new version of @code{main} includes a call to @code{init_table}, a -function that initializes the symbol table. Here it is, and -@code{init_table} as well: +The new version of @code{main} will call @code{init_table} to initialize +the symbol table: @comment file: mfcalc.y @smallexample -#include <stdio.h> - -@group -/* Called by yyparse on error. */ -void -yyerror (char const *s) -@{ - printf ("%s\n", s); -@} -@end group - @group struct init @{ @@ -2525,15 +2517,6 @@ init_table (void) @} @} @end group - -@group -int -main (void) -@{ - init_table (); - return yyparse (); -@} -@end group @end smallexample By simply editing the initialization list and adding the necessary include @@ -2577,6 +2560,9 @@ getsym (char const *sym_name) @} @end smallexample +@node Mfcalc Lexer +@subsection The @code{mfcalc} Lexer + The function @code{yylex} must now recognize variables, numeric values, and the single-character arithmetic operators. Strings of alphanumeric characters with a leading letter are recognized as either variables or @@ -2678,6 +2664,34 @@ yylex (void) @end group @end smallexample +@node Mfcalc Main +@subsection The @code{mfcalc} Main + +The error reporting function is unchanged, and the new version of +@code{main} includes a call to @code{init_table}: + +@comment file: mfcalc.y +@smallexample + +@group +@group +/* Called by yyparse on error. */ +void +yyerror (char const *s) +@{ + fprintf (stderr, "%s\n", s); +@} +@end group + +int +main (int argc, char const* argv[]) +@{ + init_table (); + return yyparse (); +@} +@end group +@end smallexample + This program is both powerful and flexible. You may easily add new functions, and it is a simple job to modify this code to install predefined variables such as @code{pi} or @code{e} as well. |