>>> "Marcus" == Marcus Holland-Moritz <[EMAIL PROTECTED]> writes:

 > Hi,
 > I'm using bison for a C parser [1], for which I'm currently rewriting
 > the part that parses expressions.

 > While being at it, I wondered if it's possible to reuse a certain part
 > of a bison generated parser, e.g. by setting a different %start token
 > at runtime.

I use the following technique.

Suppose you want to branch on nonterminals foo and bar.  Introduce
fresh tokens START_FOO and START_BAR, and use the following real
axiom:

start:
  START_FOO foo
| START_BAR bar

then the trick is to have your scanner pass either START token first.
If you have a bleeding edge bison supporting push parsers, that's
trivial :)  If you wrote yylex yourself, it shouldn't be too hard.  If
you use a lex generated scanner, there is a simple means to acheive
this: introduce a variable initial_token, and right after the first
%%, insert something like

%{
  if (initial_token)
    {
      int t = initial_token;
      initial_token = 0;
      return t;
    }
%}




_______________________________________________
Help-bison@gnu.org http://lists.gnu.org/mailman/listinfo/help-bison

Reply via email to