[antlr-interest] ANTLR 3.4: missing parameter in the method generated for a syntactic predicate for a rule with a parameter
Sam Harwell
sam at tunnelvisionlabs.com
Fri Aug 17 06:26:11 PDT 2012
My guess is you have backtrack=true, which can automatically generate
predicates for many decisions.
--
Sam Harwell
Owner, Lead Developer
http://tunnelvisionlabs.com
-----Original Message-----
From: Francis ANDRE [mailto:francis.andre.kampbell at orange.fr]
Sent: Friday, August 17, 2012 3:45 AM
To: Jim Idle
Cc: antlr ANTLR
Subject: Re: [antlr-interest] ANTLR 3.4: missing parameter in the method
generated for a syntactic predicate for a rule with a parameter
Hi Jim
I got the same missing reference -- here the 'f' parameter of the fooSpec
rule
-- for the following snippet while there is no syntactic predicate
fooStatement
returns[FOO f = null]
@init
{ }
: t = foo { f = new FOO (t); }
(fooSpec[f])?
;
fooSpec
[FOO f]
: blablabla
Is this the same problem?
Does it mean that one cannot have a rule with one or more parameter as soon
as it is embedded in an optional rule?
FA
Le 16/08/2012 18:04, Jim Idle a écrit :
> Hi Francis,
>
> You cannot use a local parameter to a rule in a predicate because the
> predicate can be hoisted in to rules higher up the chain and so the
> predicate is its own function. If you need the local rule variable,
> then place it in a scope and reference it that way - the scope is
> available outside the rule, and you will find that that works.
>
> A question from your snippet here though is what the difference
> between a variable and a function is. For many languages, this can be
> left factored in to something like this:
>
>
> varFuncDecl: ID
> ( LPAREN params RPAREN
> ( funcBody // Function
> | // Function prototype
> )
> | // Variable reference
> )
> ;
>
> I don't know if that is the case for the language you are parsing, but
> keep this kind of technique in mind :)
>
>
> Jim
>
>> -----Original Message-----
>> From: antlr-interest-bounces at antlr.org [mailto:antlr-interest-
>> bounces at antlr.org] On Behalf Of Francis ANDRE
>> Sent: Thursday, August 16, 2012 5:02 AM
>> To: antlr ANTLR
>> Subject: [antlr-interest] ANTLR 3.4: missing parameter in the method
>> generated for a syntactic predicate for a rule with a parameter
>>
>> Hi
>>
>> The generation of the method for the syntactic predicate of a rule
>> with a parameter is missing the parameter in its signature, which
>> leads to a compile error. I did not find out a way to fix this
>> problem in the code base of antlr.
>>
>> I would appreciate that someone looks at it and eventually fix this
>> problem because I am stuck
>>
>> Rgds
>>
>> FA
>>
>> Here the CMinus grammar modified with the variable rule having a
>> parameter and conditioned by a syntactic predicate:
>> ---------------------------------------------------------------------
>> --
>> ---------------------------------------------------------------------
>> --
>> ---------------------------
>> program
>> scope {
>> List globals;
>> List functions;
>> }
>> @init {
>> $program::globals = new ArrayList();
>> $program::functions = new ArrayList(); }
>> : _declaration[2]_+
>> ->
>> program(globals={$program::globals},functions={$program::functions})
>> ;
>>
>> declaration[int i]
>> : _(variable[i])=>variable[i]_
>> {$program::globals.add($variable.st);}
>> | f=function {$program::functions.add($f.st);}
>> ;
>>
>>
>> _variable[int i]_
>> : type declarator ';'
>> -> {$function.size()>0 && $function::name==null}?
>> globalVariable(type={$type.st},name={$declarator.st})
>> -> variable(type={$type.st},name={$declarator.st})
>> ;
>>
>>
>> Here the generated code
>> ---------------------------------
>> // $ANTLR start synpred1_CMinus
>> public final void synpred1_CMinus_fragment() throws
>> RecognitionException {
>> //
>> C:\\Users\\FrancisANDRE\\workspace\\zAntlr3\\src\\cminus\\CMinus.g:39
>> :9
>> : ( variable[i] )
>> //
>> C:\\Users\\FrancisANDRE\\workspace\\zAntlr3\\src\\cminus\\CMinus.g:39
>> :1
>> 0:
>> variable[i]
>> {
>> pushFollow(FOLLOW_variable_in_synpred1_CMinus101);
>> variable(i); _// <== i cannot be resolved to a variable
>> CMinusParser.java /zAntlr3/src/cminus line 1744 Java Problem_
>>
>>
>> state._fsp--;
>> if (state.failed) return ;
>>
>> }
>>
>> }
>> // $ANTLR end synpred1_CMinus
>>
>>
>>
>> _______________________________________________
>> antlr-dev mailing list
>> antlr-dev at antlr.org
>> http://www.antlr.org/mailman/listinfo/antlr-dev
>>
>>
>> List: http://www.antlr.org/mailman/listinfo/antlr-interest
>> Unsubscribe:
>> http://www.antlr.org/mailman/options/antlr-interest/your-
>> email-address
> List: http://www.antlr.org/mailman/listinfo/antlr-interest
> Unsubscribe:
> http://www.antlr.org/mailman/options/antlr-interest/your-email-address
>
List: http://www.antlr.org/mailman/listinfo/antlr-interest
Unsubscribe:
http://www.antlr.org/mailman/options/antlr-interest/your-email-address
More information about the antlr-interest
mailing list