mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 04:13:03 +00:00
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:
1
README
1
README
@@ -41,6 +41,7 @@ note that the range specifies every single year in that closed interval.
|
||||
|
||||
Local Variables:
|
||||
mode: outline
|
||||
fill-column: 76
|
||||
End:
|
||||
|
||||
Copyright (C) 1992, 1998-1999, 2003-2005, 2008-2015, 2018 Free Software
|
||||
|
||||
@@ -11066,14 +11066,13 @@ use characters such as @code{':'}, they must be declared with @code{%token}.
|
||||
@node A Complete C++ Example
|
||||
@subsection A Complete C++ Example
|
||||
|
||||
This section demonstrates the use of a C++ parser with a simple but
|
||||
complete example. This example should be available on your system,
|
||||
ready to compile, in the directory @dfn{.../bison/examples/calc++}. It
|
||||
focuses on the use of Bison, therefore the design of the various C++
|
||||
classes is very naive: no accessors, no encapsulation of members etc.
|
||||
We will use a Lex scanner, and more precisely, a Flex scanner, to
|
||||
demonstrate the various interactions. A hand-written scanner is
|
||||
actually easier to interface with.
|
||||
This section demonstrates the use of a C++ parser with a simple but complete
|
||||
example. This example should be available on your system, ready to compile,
|
||||
in the directory @dfn{.../share/doc/bison/examples/calc++}. It focuses on
|
||||
the use of Bison, therefore the design of the various C++ classes is very
|
||||
naive: no accessors, no encapsulation of members etc. We will use a Lex
|
||||
scanner, and more precisely, a Flex scanner, to demonstrate the various
|
||||
interactions. A hand-written scanner is actually easier to interface with.
|
||||
|
||||
@menu
|
||||
* Calc++ --- C++ Calculator:: The specifications
|
||||
@@ -11086,11 +11085,10 @@ actually easier to interface with.
|
||||
@node Calc++ --- C++ Calculator
|
||||
@subsubsection Calc++ --- C++ Calculator
|
||||
|
||||
Of course the grammar is dedicated to arithmetics, a single
|
||||
expression, possibly preceded by variable assignments. An
|
||||
environment containing possibly predefined variables such as
|
||||
@code{one} and @code{two}, is exchanged with the parser. An example
|
||||
of valid input follows.
|
||||
Of course the grammar is dedicated to arithmetics, a single expression,
|
||||
possibly preceded by variable assignments. An environment containing
|
||||
possibly predefined variables such as @code{one} and @code{two}, is
|
||||
exchanged with the parser. An example of valid input follows.
|
||||
|
||||
@example
|
||||
three := 3
|
||||
|
||||
@@ -5,18 +5,19 @@ A C example of a multi-function calculator. Extracted from the
|
||||
documentation.
|
||||
|
||||
* calc++
|
||||
A C++ version of the canonical example for parsers: a calculator.
|
||||
Also uses Flex for the scanner. Extracted from the documentation.
|
||||
A C++ version of the canonical example for parsers: a calculator. Also uses
|
||||
Flex for the scanner. Extracted from the documentation.
|
||||
|
||||
* variant.yy
|
||||
A C++ example that uses variants (they allow to use any C++ type as
|
||||
semantic value type) and symbol constructors (they ensure consistency
|
||||
between declared token type and effective semantic value).
|
||||
A C++ example that uses variants (they allow to use any C++ type as semantic
|
||||
value type) and symbol constructors (they ensure consistency between
|
||||
declared token type and effective semantic value).
|
||||
|
||||
-----
|
||||
|
||||
Local Variables:
|
||||
mode: outline
|
||||
fill-column: 76
|
||||
End:
|
||||
|
||||
Copyright (C) 2018 Free Software Foundation, Inc.
|
||||
|
||||
27
examples/calc++/Makefile
Normal file
27
examples/calc++/Makefile
Normal 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
51
examples/calc++/README
Normal 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
|
||||
@@ -83,3 +83,4 @@ endif
|
||||
|
||||
calcxxdir = $(docdir)/examples/calc++
|
||||
calcxx_DATA = $(calcxx_extracted)
|
||||
dist_calcxx_DATA = %D%/README %D%/Makefile
|
||||
|
||||
Reference in New Issue
Block a user