examples: calc++: a Makefile and a README

* examples/calc++/Makefile, examples/calc++/README: New.
* examples/calc++/local.mk: Ship and install them.
* doc/bison.texi: Formatting changes.
This commit is contained in:
Akim Demaille
2018-08-25 08:04:37 +02:00
parent 280c40a350
commit de64159e7f
6 changed files with 97 additions and 18 deletions

1
README
View File

@@ -41,6 +41,7 @@ note that the range specifies every single year in that closed interval.
Local Variables: Local Variables:
mode: outline mode: outline
fill-column: 76
End: End:
Copyright (C) 1992, 1998-1999, 2003-2005, 2008-2015, 2018 Free Software Copyright (C) 1992, 1998-1999, 2003-2005, 2008-2015, 2018 Free Software

View File

@@ -11066,14 +11066,13 @@ use characters such as @code{':'}, they must be declared with @code{%token}.
@node A Complete C++ Example @node A Complete C++ Example
@subsection A Complete C++ Example @subsection A Complete C++ Example
This section demonstrates the use of a C++ parser with a simple but This section demonstrates the use of a C++ parser with a simple but complete
complete example. This example should be available on your system, example. This example should be available on your system, ready to compile,
ready to compile, in the directory @dfn{.../bison/examples/calc++}. It in the directory @dfn{.../share/doc/bison/examples/calc++}. It focuses on
focuses on the use of Bison, therefore the design of the various C++ the use of Bison, therefore the design of the various C++ classes is very
classes is very naive: no accessors, no encapsulation of members etc. naive: no accessors, no encapsulation of members etc. We will use a Lex
We will use a Lex scanner, and more precisely, a Flex scanner, to scanner, and more precisely, a Flex scanner, to demonstrate the various
demonstrate the various interactions. A hand-written scanner is interactions. A hand-written scanner is actually easier to interface with.
actually easier to interface with.
@menu @menu
* Calc++ --- C++ Calculator:: The specifications * Calc++ --- C++ Calculator:: The specifications
@@ -11086,11 +11085,10 @@ actually easier to interface with.
@node Calc++ --- C++ Calculator @node Calc++ --- C++ Calculator
@subsubsection Calc++ --- C++ Calculator @subsubsection Calc++ --- C++ Calculator
Of course the grammar is dedicated to arithmetics, a single Of course the grammar is dedicated to arithmetics, a single expression,
expression, possibly preceded by variable assignments. An possibly preceded by variable assignments. An environment containing
environment containing possibly predefined variables such as possibly predefined variables such as @code{one} and @code{two}, is
@code{one} and @code{two}, is exchanged with the parser. An example exchanged with the parser. An example of valid input follows.
of valid input follows.
@example @example
three := 3 three := 3

View File

@@ -5,18 +5,19 @@ A C example of a multi-function calculator. Extracted from the
documentation. documentation.
* calc++ * calc++
A C++ version of the canonical example for parsers: a calculator. A C++ version of the canonical example for parsers: a calculator. Also uses
Also uses Flex for the scanner. Extracted from the documentation. Flex for the scanner. Extracted from the documentation.
* variant.yy * variant.yy
A C++ example that uses variants (they allow to use any C++ type as A C++ example that uses variants (they allow to use any C++ type as semantic
semantic value type) and symbol constructors (they ensure consistency value type) and symbol constructors (they ensure consistency between
between declared token type and effective semantic value). declared token type and effective semantic value).
----- -----
Local Variables: Local Variables:
mode: outline mode: outline
fill-column: 76
End: End:
Copyright (C) 2018 Free Software Foundation, Inc. Copyright (C) 2018 Free Software Foundation, Inc.

27
examples/calc++/Makefile Normal file
View File

@@ -0,0 +1,27 @@
# This Makefile is designed to be simple and readable. It does not
# aim at portability. It requires GNU Make.
BISON = bison
CXX = g++
FLEX = flex
all: calc++
%.cc %.hh: %.yy
$(BISON) $(BISONFLAGS) -o $*.cc $<
%.cc: %.ll
$(FLEX) $(FLEXFLAGS) -o$@ $<
%.o: %.cc
$(CXX) $(CXXFLAGS) -c -o$@ $<
calc++: calc++.o driver.o parser.o scanner.o
$(CXX) -o $@ $^
calc++.o: parser.hh
parser.o: parser.hh
scanner.o: parser.hh
clean:
rm -f calc++ *.o parser.hh parser.cc scanner.cc

51
examples/calc++/README Normal file
View File

@@ -0,0 +1,51 @@
This directory contains calc++, a simple Bison grammar file in C++.
Please, read the corresponding chapter in the documentation: "A Complete C++
Example". It is also available on line (maybe with a different version of
Bison):
https://www.gnu.org/software/bison/manual/html_node/A-Complete-C_002b_002b-Example.html
To use it, copy this directory into some work directory, and run `make` to
compile the executable, and try it. It is a simple calculator which accepts
several variable definitions, one per line, and then a single expression to
evaluate.
The program calc++ expects the file to parse as argument; pass `-` to read
the standard input (and then hit <Ctrl-d>, control-d, to end your input).
$ ./calc++ -
one := 1
two := 2
three := 3
(one + two * three) * two * three
<Ctrl-d>
42
You may pass `-p` to activate the parser debug traces, and `-s` to activate
the scanner's.
-----
Local Variables:
mode: outline
fill-column: 76
End:
Copyright (C) 2018 Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler.
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/>.
# LocalWords: mfcalc calc parsers yy MERCHANTABILITY

View File

@@ -83,3 +83,4 @@ endif
calcxxdir = $(docdir)/examples/calc++ calcxxdir = $(docdir)/examples/calc++
calcxx_DATA = $(calcxx_extracted) calcxx_DATA = $(calcxx_extracted)
dist_calcxx_DATA = %D%/README %D%/Makefile