[antlr-interest] Uninitialised global scope struct instance in C code

Jim Idle jimi at temporal-wave.com
Sat Mar 6 07:37:39 PST 2010


If the scope is null it means (as per the comments and antlr.markmail.org), that you hoave a path in to your rule that does not go through the rule where the scope lives. Put a breakpoint in the if condition and it will tell you which path it is. 

Jim

> -----Original Message-----
> From: antlr-interest-bounces at antlr.org [mailto:antlr-interest-
> bounces at antlr.org] On Behalf Of Kieran Simpson
> Sent: Saturday, March 06, 2010 5:20 AM
> To: antlr-interest at antlr.org
> Subject: [antlr-interest] Uninitialised global scope struct instance in
> C code
> 
> I am using  Antlr Version 3.2 and C libantlr3c-3.2
> 
> I have a grammar "Foo".  In the grammar I have a global scope declared
> 
> scope ParserGlobals {
>   int x;
> }
> 
> and a rule that initialises it before descending further into the parse
> tree
> 
> ruleA returns [int result]
> @init  {
>   $ParserGlobals::x = 0
> }
>   : ruleB { $result = $ParserGlobals::x; }
>  ;
> 
> The code that is generated by the C target is comprised (with other
> code
> omitted for brevity) of the following
> 
> static String ruleA(pFooParser ctx)  {
>   (SCOPE_TOP(ParserGlobals))->x= 0;
> }
> 
> in it's post processed form (by gcc -e)
> 
> static String ruleA(pFooParser ctx)  {
>   (ctx->pFooParser_ParserGlobalsTop)->x= 0;
> }
> 
> However for some reason ctx->pFooParser_ParserGlobalsTop is null.  I
> changed the generated code to the following
> 
> if ((SCOPE_TOP(ParserGlobals)) == NULL)  {
>   printf("ParserGlobals stack is not initialised");
> }
> 
> And the 'if' is evaluated to true.
> 
> In the "constructor" for the parser, I noticed
> 
> ctx->pFooParser_ParserGlobalsTop      = NULL;
> 
> However as far as I can see there is no code in the generated source
> that changes the value of pFooParser_ParserGlobalsTop before my @init
> code accesses it (thus causing a seg fault).
> 
> I noticed that someone else had a similar problem with local scopes
> (http://www.antlr.org/pipermail/antlr-interest/2008-April/027524.html)
> However I'm not sure why a global scope in a grammar is generating code
> that is seg faulting due to the scope not being initialised.
> 
> Any ideas/assistance would be appreciated.
> 
> 
> 
> 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