[antlr-interest] Error in 2.7.2
Matthew Ford
Matthew.Ford at forward.com.au
Fri May 30 18:06:48 PDT 2003
I downloaded 2.7.2 final. There is an error in the ANTLR Parser
I am getting the following error
[antlr] ANTLR Parser Generator Version 2.7.2 1989-2003 jGuru.com
[antlr] C:\temp\antlrTest\links.g:107: warning:lexical nondeterminism
between alts 1 and 2 of block 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>
with (full code below)
protected
SCARF
: WS // track line numbers while you scarf
| . {}
;
while
protected
SCARF
: WS // track line numbers while you scarf
| .
;
gives no errors
matthew
----- Original Message -----
From: "Matthew Ford" <Matthew.Ford at forward.com.au>
To: <antlr-interest at yahoogroups.com>
Sent: Friday, May 30, 2003 10:33 PM
Subject: Error in 2.7.1 translator
> 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