diff options
author | Akim Demaille <demaille@gostai.com> | 2012-02-19 13:05:42 +0100 |
---|---|---|
committer | Akim Demaille <demaille@gostai.com> | 2012-02-19 13:16:15 +0100 |
commit | 24ec08374334f3c4cfb4080384793aa423e29679 (patch) | |
tree | 6e105dbce89c4405a61e04e827bfc700db26dc3e | |
parent | e7b94cc3607fb08c8724d73f90a365793127af28 (diff) | |
download | bison-24ec08374334f3c4cfb4080384793aa423e29679.tar.gz |
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.
-rw-r--r-- | doc/bison.texinfo | 32 | ||||
-rw-r--r-- | examples/local.mk | 1 | ||||
-rwxr-xr-x | examples/mfcalc/mfcalc.test | 1 | ||||
-rw-r--r-- | examples/rpcalc/.gitignore | 3 | ||||
-rw-r--r-- | examples/rpcalc/local.mk | 57 | ||||
-rwxr-xr-x | examples/rpcalc/rpcalc.test | 46 | ||||
-rwxr-xr-x | examples/test | 2 |
7 files changed, 127 insertions, 15 deletions
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 <stdio.h> #include <math.h> 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 <stdio.h> @@ -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 <<EOF 1+2*3 EOF run 0 7 -run 0 7 cat >input <<EOF (1+2) * 3 diff --git a/examples/rpcalc/.gitignore b/examples/rpcalc/.gitignore new file mode 100644 index 00000000..57fd9019 --- /dev/null +++ b/examples/rpcalc/.gitignore @@ -0,0 +1,3 @@ +/calc.h +/rpcalc.stamp +/rpcalc.y diff --git a/examples/rpcalc/local.mk b/examples/rpcalc/local.mk new file mode 100644 index 00000000..c6cd7a33 --- /dev/null +++ b/examples/rpcalc/local.mk @@ -0,0 +1,57 @@ +## Process this file with automake to produce Makefile.in -*-Makefile-*- + +## Copyright (C) 2005-2006, 2008-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 <http://www.gnu.org/licenses/>. + +## ------------ ## +## 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 <http://www.gnu.org/licenses/>. + +cat >input <<EOF +1 2 3 * + +EOF +run 0 7 + +cat >input <<EOF +1.1 2.2 3.3 * + +EOF +run 0 8.36 + +cat >input <<EOF +1 2 + 3 * +EOF +run 0 9 + +cat >input <<EOF +1 2 3 4 5 6 7 8 9 * * * * * * * * +EOF +run 0 362880 + +cat >input <<EOF +3 7 + 3 4 5 * + - n +EOF +run 0 13 + +cat >input <<EOF +3 4 ^ +EOF +run 0 81 diff --git a/examples/test b/examples/test index 6da1667b..7bf6dab6 100755 --- a/examples/test +++ b/examples/test @@ -1,5 +1,5 @@ #! /bin/sh -set -x + # Copyright (C) 2005-2012 Free Software Foundation, Inc. # # This program is free software: you can redistribute it and/or modify |