[antlr-interest] Another Comments question
    Tom Davies 
    tomdavies at optushome.com.au
       
    Sun Jul 27 17:53:27 PDT 2003
    
    
  
I'm using the hidden tokens approach, keeping my own List of tokens, and
recording in my parser which ranges of tokens should have their comments
before a particular tree node.
So my parser rule looks like:
program
  : pSection c1:"CL"! c2:COLON!
    (specSection)? (argSection)? (commonSection)? (localSection)?
    (clDeclSection)* (procDeclSection)*
    (statement)* c3:"END"! c4:"CL"! c5:SEP!
  { ## = #([CL,"CL"], ##);
    Context.get().setBeforeComments(##,c1,c2);
    Context.get().setAfterComments(##,c3,c5);
  }
  ;
And the corresponding tree parser rule looks like:
program returns [
  UnitSpec u = null;
  String args="", common="", local="", stats="", psectionComments = ""
  ] 
  : #(c:CL (psectionComments = psection) (args=argSection)?
(common=commonSection)? (local=localSection)? stats=statementList)
  { u = new UnitSpec(
              args,
	      common,
	      local,
	      stats,
	      Context.get().getSubroutines(),
	      psectionComments + Context.get().commentsBefore(c),
	      Context.get().commentsAfter(c)
	);
  }
  ;
(Context is just the place I keep my symbol table and all the functions
which create my target code)
I also have a rule:
pStatement: ("CL"^ | "DEF"^ | "DD"^ | "ZCL"^ | "SCL"^ | "XCL"^)
	EQUALS! IDENTIFIER (FILESUFFIX)? (COMMA! "NEW")? c:SEP!
	;
I'd like to say:
pStatement: a:("CL"^ | "DEF"^ | "DD"^ | "ZCL"^ | "SCL"^ | "XCL"^)
	EQUALS! IDENTIFIER (FILESUFFIX)? (COMMA! "NEW")? b:SEP!
{ Context.get().setBeforeComments(##,a,b); }
	;
but the construct a:(...) is not allowed. Any good alternative? Can I
say ##.getToken() or an equivalent, to get 'a'?
Thanks,
  Tom
-- 
Tom Davies <tomdavies at optushome.com.au>
 
Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ 
    
    
More information about the antlr-interest
mailing list