We always refer to the triplet "kind, value, location". All of them are nouns, and we support api.value.type and api.location.type. On this regard, "semantic_type" was a poor choice. Make it "value_type". The test suite was not updated to use value_type, on purpose, to enforce backward compatibility. * data/skeletons/c++.m4, data/skeletons/glr.cc, data/skeletons/glr2.cc, * data/skeletons/variant.hh, doc/bison.texi: Define value_type rather than semantic_type. Add a backward compatibility typedef. * examples/c++/glr/c++-types.yy: Migrate.
Examples in C++
This directory contains examples of Bison grammar files in C++.
You can run make to compile these examples. And make clean to tidy
afterwards.
simple.yy - Simple example in C++14
A very simple example in C++, based on variants and symbol constructors. Variants allow to use any C++ type as semantic value type, and symbol constructors ensure consistency between declared token kind and effective semantic value.
Run as ./simple.
Extracted from the documentation: A Simple C++ Example.
variant.yy - Self-contained example in C++98
A variation of simple.yy, in C++98.
Run as ./variant.
variant-11.yy - Self-contained example in modern C++
Another variation of simple.yy, closely related to the previous one, but exhibiting support for C++11's move semantics.
Run as ./variant or ./variant NUMBER.
calc++ - A Complete C++ Example
A fully featured C++ version of the canonical example for parsers: a calculator. Also uses Flex for the scanner.
Don't look at this example first: it is fully featured and can serve as a starting point for a clean parser in C++. The previous examples are better introductory examples, and the C examples are also useful introductory examples.
Extracted from the documentation: A Complete C++ Example.