bug-bison
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Enhancement request: enabling Variant in C parsers


From: Akim Demaille
Subject: Re: Enhancement request: enabling Variant in C parsers
Date: Sat, 25 Aug 2018 08:51:39 +0200


> Le 23 août 2018 à 07:34, Akim Demaille <address@hidden> a écrit :
> 
> 
> 
>> Le 21 août 2018 à 10:46, Hans Åberg <address@hidden> a écrit :
>> 
>> 
>>> On 19 Aug 2018, at 17:23, Akim Demaille <address@hidden> wrote:
>>> 
>>>>> I would strongly suggest that you look at the examples/ in Bison, the C++
>>>>> calculator
>>>> 
>>>> I did look at it - this example scared me off c++ parsers :-(
>>> 
>>> Really???  Then I failed.  Can you be more specific?
>> 
>> I noticed: It does not have a Makefile, so one can’t just copy it and 
>> compile.
> 
> Why not adding one, indeed.

I installed this.

commit de64159e7f3e0b1b7acd8c23cbd76495fe17c311
Author: Akim Demaille <address@hidden>
Date:   Sat Aug 25 08:04:37 2018 +0200

    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.

diff --git a/README b/README
index 5370f335..8689bab8 100644
--- a/README
+++ b/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
diff --git a/doc/bison.texi b/doc/bison.texi
index 6cd52917..b7945343 100644
--- a/doc/bison.texi
+++ b/doc/bison.texi
@@ -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
address@hidden 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
diff --git a/examples/README b/examples/README
index bfdd8c68..9780d829 100644
--- a/examples/README
+++ b/examples/README
@@ -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.
diff --git a/examples/calc++/Makefile b/examples/calc++/Makefile
new file mode 100644
index 00000000..6b6c4998
--- /dev/null
+++ b/examples/calc++/Makefile
@@ -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
diff --git a/examples/calc++/README b/examples/calc++/README
new file mode 100644
index 00000000..679c4a1a
--- /dev/null
+++ b/examples/calc++/README
@@ -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
diff --git a/examples/calc++/local.mk b/examples/calc++/local.mk
index 06c1ed67..28f9f908 100644
--- a/examples/calc++/local.mk
+++ b/examples/calc++/local.mk
@@ -83,3 +83,4 @@ endif
 
 calcxxdir = $(docdir)/examples/calc++
 calcxx_DATA = $(calcxx_extracted)
+dist_calcxx_DATA = %D%/README %D%/Makefile




reply via email to

[Prev in Thread] Current Thread [Next in Thread]