]> git.saurik.com Git - bison.git/commit - examples/variant.yy
Support parametric types.
authorAkim Demaille <demaille@gostai.com>
Fri, 24 Oct 2008 01:01:48 +0000 (20:01 -0500)
committerAkim Demaille <demaille@gostai.com>
Sat, 15 Nov 2008 13:30:05 +0000 (14:30 +0100)
commitcb823b6f0c5d025e3667f994222037476c41ea1a
tree6386f30270f5acaaa2d48297855c237b3ebd6a5a
parent7b6e67533e54ba06ffe69664dee57a39021d2b8d
Support parametric types.

There are two issues to handle: first scanning nested angle bracket pairs
to support types such as std::pair< std::string, std::list<std::string> > >.

Another issue is to address idiosyncracies of C++: do not glue two closing
angle brackets together (otherwise it's operator>>), and avoid sticking
blindly a TYPE to the opening <, as it can result in '<:' which is a
digraph for '['.

* src/scan-gram.l (brace_level): Rename as...
(nesting): this.
(SC_TAG): New.
Implement support for complex tags.
(tag): Accept \n, but not <.
* data/lalr1.cc (b4_symbol_value, b4_symbol_value_template)
(b4_symbol_variant): Leave space around types as parameters.
* examples/variant.yy: Use nested template types and leading ::.
* src/parse-gram.y (TYPE, TYPE_TAG_ANY, TYPE_TAG_NONE, type.opt):
Rename as...
(TAG, TAG_ANY, TAG_NONE, tag.opt): these.
* tests/c++.at: Test parametric types.
ChangeLog
data/lalr1.cc
examples/variant.yy
src/parse-gram.y
src/scan-gram.l
tests/c++.at