Related articles |
---|
multiple entry points in yacc grammer nbhatia@netcom.com (1996-04-19) |
Re: multiple entry points in yacc grammer Xtofd@aol.com (1996-04-29) |
From: | Xtofd@aol.com |
Newsgroups: | comp.compilers |
Date: | 29 Apr 1996 23:06:16 -0400 |
Organization: | Compilers Central |
References: | 96-04-122 |
Keywords: | yacc, comment |
nbhatia@netcom.com (Naresh Bhatia) writes:
>Can a yacc grammar have multiple entry points? For example, if I have
>a grammar that can parse C++ method declarations, can I use it to
>parse standalone method parameters? The knowledge of parsing the
>parameters is obviously embedded in the method parser, so how to use
>this knowledge to parse the parameters alone?
>[No, but you can fake it. (...). -John]
This kludge may help. I did it because in a way to handle C
instructions OR declarations at any point, there is a shift/reduce
conflict ( 'identifier;' can be a valid declaration or instruction )
At the time where you know which entry the parser must take,
make the lexer return the pseudo-token FAKEn
%{
#undef yylex()
#define yylex() my_lex()
int fake_token;
%}
%token FAKE1 FAKE2 FAKE3
%start start
%%
start: FAKE1 rule_1
| FAKE2 rule_2
| FAKE3 rule_3
;
/* those are your multiple entry points :: */
rule_1: .... ;
rule_2: .... ;
...
%%
#undef yylex
int my_lex()
{
int ret;
if( fake_token )
{
ret = fake_token;
fake_token = 0;
return ret;
}
return yylex();
}
Hope this helps,
[Yup, that's how you fake it. -John]
--
Return to the
comp.compilers page.
Search the
comp.compilers archives again.