[antlr-interest] Error in 2.7.1 translator

Matthew Ford Matthew.Ford at forward.com.au
Fri May 30 05:33:25 PDT 2003


Hi
When I add one action I get the error message.  I think this is an error as
the grammar has not changed.

   [antlr] ANTLR Parser Generator   Version 2.7.1   1989-2000 jGuru.com
    [antlr] C:\temp\antlrTest\links.g:107: warning: lexical nondeterminism
upon
    [antlr] C:\temp\antlrTest\links.g:107:  k==1:'\t','\n','\u000c','\r',' '
    [antlr] C:\temp\antlrTest\links.g:107:  k==2:<end-of-token>
    [antlr] C:\temp\antlrTest\links.g:107:  between alts 1 and 2 of block

The .g file is shown below
The only difference needed to generate the above error is to change

protected
SCARF
 : WS // track line numbers while you scarf
 | .  ;  // no action here and no errors

TO

protected
SCARF
 : WS // track line numbers while you scarf
 | . {output.print("");}  // added this action to get errors
 ;


regards
Matthew
P.S. I will try this on 2.7.2 tomorrow.


//link.g file
{
import java.util.Vector;
import java.io.PrintStream;
}


/** Parse an entire html file, firing events to a single listener
 *  for each image and href link encountered.  All tokens are
 *  defined to skip so the lexer will continue scarfing until EOF.
 */
class ImageLinkExtractor extends Lexer;
options {
 caseSensitive=false;
 k=2;
 filter=SCARF;
 charVocabulary='\3'..'\u0FFE';
}

{
 PrintStream output = null;

  String tableWidth="65";

 public void setOutput(PrintStream out) {
   output = out;
 }

 /** strip quotes from "..." or '...' strings */
 public static String stripQuotes(String src) {
  int h = src.indexOf('"');
  if ( h==-1 ) h = src.indexOf('\'');
  int t = src.lastIndexOf('"');
  if ( t==-1 ) t = src.lastIndexOf('\'');
  if ( h==-1 || t==-1 ) return src;
  return src.substring(h+1,t);
 }
}


IMG : ("<img" {output.print("<img");}
       WS (ATTR)+
    '>' {output.print(">");})
    {$setType(Token.SKIP);}
 ;

protected
ATTR
options {
 ignore=WS;
}
 : w:WORD '='
  ( s:STRING // output handled below
  | v:WORD {output.print(v.getText());}
  )
  { output.print(" "+w.getText()+"=");
    if (v!=null) {
     output.print(v.getText());
   } else if (s!=null) {
    String heightOrWidth = stripQuotes(s.getText());
    if (( w.getText().equalsIgnoreCase("height") )
      || ( w.getText().equalsIgnoreCase("width") ) ) {
      int size = Integer.parseInt(heightOrWidth);
      size++;
      output.print("\""+size+"\"");
    } else {
      // some other attribute like src just output
     output.print(s.getText()+"");
    }
   } else {
     // s==null have output v above
   }
  }
  ;

/** Match until next whitespace; can be file, int, etc... */
protected
WORD: (
   options {
    generateAmbigWarnings=false;
   }
  : 'a'..'z' | '0'..'9' | '/' | '.' | '#' | '_'
  )+
 ;

protected
STRING
 : '"' (~'"')* '"'
 | '\'' (~'\'')* '\''
 ;


protected
WS : ( ' ' {output.print(" ");}
  | '\t' {output.print("\t");}
  | '\f'  {output.print("\f");}
  | ( "\r\n"  {output.print("\r\n");} // DOS
   | '\r'   {output.print("\r");} // Macintosh
   | '\n'   {output.print("\r");} // Unix (the right way)
   )
   { newline(); }
  )
  { //$setType(Token.SKIP);
  }
 ;

protected
SCARF
 : WS // track line numbers while you scarf
 | . {output.print("");}
 ;
----------------------------------------------------
Dr. Matthew.Ford
Forward Computing & Control Pty. Ltd.
www.forward.com.au


 

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




More information about the antlr-interest mailing list