[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Bison 1.30f broke my C++ parser
From: |
Hans Aberg |
Subject: |
Re: Bison 1.30f broke my C++ parser |
Date: |
Sun, 27 Jan 2002 12:18:39 +0100 |
At 11:40 +0100 2002/01/27, Akim Demaille wrote:
>... We are close to have
>a functional beta of our C++ parsers, stay tuned.
The relatively minor changes I had to do (which took me only a few days to
do) was to first introduce macros to write out the $n values in the actions:
YYVAL(x) = A reference to the $$ semantic value.
YYVSP(x, n, rule_length) = A reference to the $n semantic value
Then, for use with Bison's type system, union's will not work with C++
types having non-trivial constructors, so introduce a macro to apply:
YYCAST(x, cast_name) = Cast the a semantic value reference using cast_name.
In C, cast_name is a union field, but under the C++ polymorphy I use, it is
a type name.
Finally, bison.simple uses separate state/semantic/location stacks. In
order to be able t merge them into a single one, I had to introduce a macro
YYLOC(x) = A reference to the location value.
When using a single stack, YYVAL and YYLOC would select different fields in
the stack objects.
This is really only what was needed. But since %union is not so useful
under C++, I made a %typed option. Also, I moved some stuff out from Bison
into the skeleton file, such as the "switch". -- Carrying this on would
start to prepare for output in other languages. Then it looks that keeping
the deprecated semantic parse would be a hurdle, so I think it's time to
remove it.
Hans Aberg
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: Bison 1.30f broke my C++ parser,
Hans Aberg <=