[antlr-interest] Understanding error: Label 'XX' has already been defined

namidsf namidsf at yahoo.com
Mon Sep 23 13:59:39 PDT 2002


Hi relatives in trade,  

I posted the following question on jGuru a few days ago and got 
prompt answer from Monty (thanks again). Sounds like ultimate 
solution will require work in the Code Generator.

I still hope to find somebody who ran into similar behaviour
and may have some ideas on the grammar level ...
The following is my original message to jGuru:

---------------------------------------------------------
There is an existing grammar file (lets say My.g) - that was 
originaly processed with Antlr 2.6.1. 
I'm working on upgrade of the grammar, but prior to appending 
grammar I would like to  recompile My.g with latest Antlr 2.7.2A2 
But there are number of errors:

   "My.g:###:##: Label 'a' has already been defined. 
    Exiting due to errors."

in all rules of the following nature: (skinned) 

CaseNodes returns [CMyNode *pNode]
    {  pNode = NULL ; }
    :
    "null"      { pNode = new CMyNode(CMyNode::Null); }
    |a:CASE1   { pNode = new CMyNode(CMyNode::case1); }
    |a:CASE2   { pNode = new CMyNode(CMyNode::case2); }
    |a:CASE3   { pNode = new CMyNode(CMyNode::case3); }
    |a:DEFAULT { pNode = new CMyNode(CMyNode::dflt ); }
    . . .
    { pNode->t_ = a;  }
;

I figured if I modify this rule to be:

CaseNodes returns [CMyNode *pNode]
    {  pExpr = NULL ; }
    :
    "null"    {pNode = new CMyNode(CMyNode::Null); }
    |a:CASE1  {pNode = new CMyNode(CMyNode::case1); pNode->t_ = a; }
    |a1:CASE2 {pNode = new CMyNode(CMyNode::case2); pNode->t_ = a1;}
    |a2:CASE3 {pNode = new CMyNode(CMyNode::case3); . . .}
    |a3:DEFAULT{pNode = new CMyNode(CMyNode::dflt ); . . .}
    . . .
;
errors are gone , but this will trigger lots of changes in the 
existing grammar file, and can be are very messy.

What is the reason to changes in labels-related code generation 
(in 2.7) ? Is there is another way to approach it ?

Thank you, 

Dmitriy Neyman



 

Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ 



More information about the antlr-interest mailing list