From 24ec08374334f3c4cfb4080384793aa423e29679 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Sun, 19 Feb 2012 13:05:42 +0100 Subject: [PATCH] doc: check the rpcalc. * doc/bison.texinfo: Tag rpcalc.y snippets. Add missing includes. (Rpcalc Rules): Don't issue leading tabs. Complete an Info menu. Use @result. * examples/rpcalc/local.mk: New. * examples/rpcalc/rpcalc.test: New. * examples/local.mk: Use them. * examples/mfcalc/mfcalc.test: Remove dup test. * examples/test: Disable debug traces. --- doc/bison.texinfo | 32 ++++++++++++--------- examples/local.mk | 1 + examples/mfcalc/mfcalc.test | 1 - examples/rpcalc/.gitignore | 3 ++ examples/rpcalc/local.mk | 57 +++++++++++++++++++++++++++++++++++++ examples/rpcalc/rpcalc.test | 46 ++++++++++++++++++++++++++++++ examples/test | 2 +- 7 files changed, 127 insertions(+), 15 deletions(-) create mode 100644 examples/rpcalc/.gitignore create mode 100644 examples/rpcalc/local.mk create mode 100755 examples/rpcalc/rpcalc.test diff --git a/doc/bison.texinfo b/doc/bison.texinfo index 62471f46..0f5dbbb3 100644 --- a/doc/bison.texinfo +++ b/doc/bison.texinfo @@ -163,9 +163,9 @@ Reverse Polish Notation Calculator Grammar Rules for @code{rpcalc} -* Rpcalc Input:: -* Rpcalc Line:: -* Rpcalc Expr:: +* Rpcalc Input:: Explanation of the @code{input} nonterminal +* Rpcalc Line:: Explanation of the @code{line} nonterminal +* Rpcalc Expr:: Explanation of the @code{expr} nonterminal Location Tracking Calculator: @code{ltcalc} @@ -1517,11 +1517,13 @@ The source code for this calculator is named @file{rpcalc.y}. The Here are the C and Bison declarations for the reverse polish notation calculator. As in C, comments are placed between @samp{/*@dots{}*/}. +@comment file: rpcalc.y @example /* Reverse polish notation calculator. */ %@{ #define YYSTYPE double + #include #include int yylex (void); void yyerror (char const *); @@ -1566,13 +1568,14 @@ type for numeric constants. Here are the grammar rules for the reverse polish notation calculator. +@comment file: rpcalc.y @example input: /* empty */ | input line ; line: '\n' - | exp '\n' @{ printf ("\t%.10g\n", $1); @} + | exp '\n' @{ printf ("%.10g\n", $1); @} ; exp: NUM @{ $$ = $1; @} @@ -1607,9 +1610,9 @@ main job of most actions. The semantic values of the components of the rule are referred to as @code{$1}, @code{$2}, and so on. @menu -* Rpcalc Input:: -* Rpcalc Line:: -* Rpcalc Expr:: +* Rpcalc Input:: Explanation of the @code{input} nonterminal +* Rpcalc Line:: Explanation of the @code{line} nonterminal +* Rpcalc Expr:: Explanation of the @code{expr} nonterminal @end menu @node Rpcalc Input @@ -1653,7 +1656,7 @@ Now consider the definition of @code{line}: @example line: '\n' - | exp '\n' @{ printf ("\t%.10g\n", $1); @} + | exp '\n' @{ printf ("%.10g\n", $1); @} ; @end example @@ -1769,6 +1772,7 @@ A token type code of zero is returned if the end-of-input is encountered. Here is the code for the lexical analyzer: +@comment file: rpcalc.y @example @group /* The lexical analyzer returns a double floating point @@ -1817,6 +1821,7 @@ In keeping with the spirit of this example, the controlling function is kept to the bare minimum. The only requirement is that it call @code{yyparse} to start the process of parsing. +@comment file: rpcalc.y @example @group int @@ -1837,6 +1842,7 @@ always @code{"syntax error"}). It is up to the programmer to supply @code{yyerror} (@pxref{Interface, ,Parser C-Language Interface}), so here is the definition we will use: +@comment file: rpcalc.y @example @group #include @@ -1919,15 +1925,15 @@ example session using @code{rpcalc}. @example $ @kbd{rpcalc} @kbd{4 9 +} -13 +@result{} 13 @kbd{3 7 + 3 4 5 *+-} --13 +@result{} -13 @kbd{3 7 + 3 4 5 * + - n} @r{Note the unary minus, @samp{n}} -13 +@result{} 13 @kbd{5 6 / 4 n +} --3.166666667 +@result{} -3.166666667 @kbd{3 4 ^} @r{Exponentiation} -81 +@result{} 81 @kbd{^D} @r{End-of-file indicator} $ @end example diff --git a/examples/local.mk b/examples/local.mk index de4d38fc..0d632023 100644 --- a/examples/local.mk +++ b/examples/local.mk @@ -20,3 +20,4 @@ TEST_LOG_COMPILER = $(top_srcdir)/examples/test include examples/calc++/local.mk include examples/mfcalc/local.mk +include examples/rpcalc/local.mk diff --git a/examples/mfcalc/mfcalc.test b/examples/mfcalc/mfcalc.test index 6f794aaf..f728f01d 100755 --- a/examples/mfcalc/mfcalc.test +++ b/examples/mfcalc/mfcalc.test @@ -19,7 +19,6 @@ cat >input <input <. + +## ------------ ## +## Extracting. ## +## ------------ ## + +# Extract in src. +$(top_srcdir)/examples/rpcalc/rpcalc.stamp: $(doc) $(extexi) + $(AM_V_GEN)rm -f $@ $@.tmp + $(AM_V_at)touch $@.tmp + $(AM_V_at)cd $(top_srcdir)/examples/rpcalc && \ + $(AWK) -f ../extexi -v VERSION="$(VERSION)" \ + ../../doc/bison.texinfo -- calc.h rpcalc.y + $(AM_V_at)mv $@.tmp $@ + +$(rpcalc_extracted): $(top_srcdir)/examples/rpcalc/rpcalc.stamp + $(AM_V_GEN)if test -f $@; then :; else \ + rm -f $< && \ + $(MAKE) $(AM_MAKEFLAGS) $<; \ + fi + +## -------------------- ## +## Building & testing. ## +## -------------------- ## + +BUILT_SOURCES += $(rpcalc_sources) +MAINTAINERCLEANFILES += $(top_srcdir)/examples/rpcalc/rpcalc.stamp $(rpcalc_sources) +EXTRA_DIST += examples/rpcalc/rpcalc.stamp + +rpcalc_extracted = \ + examples/rpcalc/rpcalc.y +rpcalc_sources = \ + $(rpcalc_extracted) + +check_PROGRAMS += examples/rpcalc/rpcalc +examples_rpcalc_rpcalc_LDADD = -lm +examples_rpcalc_rpcalc_SOURCES = \ + $(rpcalc_sources) + +examples_rpcalc_rpcalc_CPPFLAGS = -I$(top_srcdir)/examples/rpcalc +TESTS += examples/rpcalc/rpcalc.test +EXTRA_DIST += examples/rpcalc/rpcalc.test diff --git a/examples/rpcalc/rpcalc.test b/examples/rpcalc/rpcalc.test new file mode 100755 index 00000000..0afbee75 --- /dev/null +++ b/examples/rpcalc/rpcalc.test @@ -0,0 +1,46 @@ +#! /bin/sh + +# Copyright (C) 2005-2012 Free Software Foundation, Inc. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +cat >input <input <input <input <input <input <