[stringtemplate-interest] [FIX] ChunkTokens withoutLine/ColumnInformation? St#

Dreyer Ulf (CR/APA3) Ulf.Dreyer at de.bosch.com
Fri Mar 16 07:30:20 PDT 2007


 Hello Terence, hello Kunle

   whoops my Fix does not work as advertised:

   The token   'abeg' is not always defined during ACTION.
   This results in a NullPointerException if something like
   if/else/endif or a region is parsed.

  I made a new fix wich works but is kind of ugly:

1) Add a method to angle.bracket.template.g:

protected IToken GetActionBeginToken(params IToken[] ptokens)
        {
            foreach (IToken token in ptokens)
            {
                if (null != token) return token;
            }
            return null;
        }
   
2) prefix the different occurences of "<"! in ACTION with
   a1:"<"! through a5:"<"!

3) Change my first token-position fix to

	IToken aBegin = GetActionBeginToken(a1,a2,a3,a4,a5);
      ctok.setLine(aBegin.getLine());
      ctok.setColumn(aBegin.getColumn());

Any Ideas to fix this that result in a cleaner grammar?

-Ulf

> -----Original Message-----
> From: stringtemplate-interest-bounces at antlr.org 
> [mailto:stringtemplate-interest-bounces at antlr.org] On Behalf 
> Of Dreyer Ulf (CR/APA3)
> Sent: Friday, March 16, 2007 1:49 PM
> To: StringTemplate
> Cc: Kunle_Odutola at hotmail.com
> Subject: Re: [stringtemplate-interest] [FIX] ChunkTokens 
> withoutLine/ColumnInformation? St#
> 
> Hello Terence, hello Kunle 
> 
>    it was a long day yesterday so I forgot to mention that only
>    ChunkTokens (the ones that contain the actions) don't come with
>    position information.
>    Today I found out why and found a fix:
>   
>    Why: ChunkTokens differ from the default tokens coming from the
>         lexer and are created with new ChunkToken(....).
>  	  Position information however is only set in 
> (lexer).makeToken(type).
> 
> 	  I did not check whether the Java version or other 
> lexers are affected.
> 
> Here is a sample fix for AngleBracketTemplateLexer. (Only the 
> ACTION Rule has to be changed)
> 
> ACTION
> options {
>    		generateAmbigWarnings=false; // <EXPR> is ambig 
> with <!..!>
> }
> {
>     int startCol = getColumn();
> }
> // --- [not listing rest of ACTION] ---
> // ----------------------- original: -------------------------
> 	|   '<'! EXPR '>'!
>     	)
>     	{
>         ChunkToken ctok = new ChunkToken(_ttype, $getText, 
> currentIndent);
>         $setToken(ctok);
>     	}
>     ;
> 	
> // -------------------------- corrected: ----------------------	
> 	|   abeg:'<'! EXPR '>'!
>     	)
>     	{
>         ChunkToken ctok = new ChunkToken(_ttype, $getText, 
> currentIndent);
> 		//ctok is created without the use of 
> .makeToken(type) and therefore does not contain
>         //position-Information. Create some:
>         ctok.setLine(abeg.getLine());
>         ctok.setColumn(abeg.getColumn());
>         $setToken(ctok);
>     	}
>     ;
> 
> -Ulf
> 
> --
> Dipl. Inf. Ulf Dreyer
> Robert Bosch GmbH
> Zentralbereich Forschung und Vorausentwicklung
> Software und Systemengineering in der 
> Fertigungsautomatisierung CR/APA3
> Postfach 30 02 40 D-70442 Stuttgart
> Tel.: 0711/811- 34365
> Fax: 0711/811-518 34365
> eMail: ulf . dreyer at de . bosch . com 
> 
> Robert Bosch GmbH, Sitz: Stuttgart, Registergericht: 
> Amtsgericht Stuttgart HRB 14000 Aufsichtsratsvorsitzender: 
> Hermann Scholl; Geschäftsführung: Franz Fehrenbach, Siegfried 
> Dais; Bernd Bohr, Wolfgang Chur, Rudolf Colm, Gerhard Kümmel, 
> Wolfgang Malchow, Peter Marks; Volkmar Denner, Peter Tyroller.
> 
> 
> > -----Original Message-----
> > From: stringtemplate-interest-bounces at antlr.org 
> > [mailto:stringtemplate-interest-bounces at antlr.org] On Behalf 
> > Of Terence Parr
> > Sent: Thursday, March 15, 2007 7:14 PM
> > To: StringTemplate
> > Subject: Re: [stringtemplate-interest] ChunkTokens without 
> > Line/ColumnInformation? St#
> > 
> > 
> > On Mar 15, 2007, at 9:41 AM, Dreyer Ulf (CR/APA3) wrote:
> > 
> > > Hello all!
> > >
> > >  I just stumbled upon a strange behaviour.
> > >  The tokens coming from AngleBracketLexer (in ST#) do not contain
> > >  a Line and Column - information  (getLine/getColumn yield 0/0)
> > >
> > >  Is this intentional? If so why?
> > >
> > >  How can I 'fix' this without rewriting the 
> > TokenTypes/Lexers in ST#?
> > 
> > That's weird.  All tokens or just some?
> > 
> > Ter
> > 
> > _______________________________________________
> > stringtemplate-interest mailing list
> > stringtemplate-interest at antlr.org
> > http://www.antlr.org:8080/mailman/listinfo/stringtemplate-interest
> > 
> _______________________________________________
> stringtemplate-interest mailing list
> stringtemplate-interest at antlr.org
> http://www.antlr.org:8080/mailman/listinfo/stringtemplate-interest
> 


More information about the stringtemplate-interest mailing list