[antlr-interest] How to recognize a String

Gabriel Miro gsmiro at gmail.com
Mon Sep 12 10:28:38 PDT 2011


Eric,

thank you very much. I managed to run the code and also the debugger - my
java_home was wrong - and I found out that the grammar I sent actually
worked in the debugger.
I wonder though why it doesn't in the interpreter.

Regards,
Gabriel Miró
ANTLR Newbie

On Mon, Sep 12, 2011 at 1:39 PM, The Researcher <researcher0x00 at gmail.com>wrote:

> Opps. There's a semi-colon missing.
>
>
> grammar Mail001;
>
>
>
> stmt: val EOF;
>
>
>
> val : '(' '\'' ID '\'' ')';
>
>
>
> ID  :   ('a'..'z'|'A'..'Z')+ ;
>
> NEWLINE:'\r'? '\n' {skip();} ;
>
> WS  :   (' '|'\t')+ {skip();} ;
>
>
> Eric
>
> On Mon, Sep 12, 2011 at 12:17 PM, The Researcher
> <researcher0x00 at gmail.com>wrote:
>
> >
> >
> > On Mon, Sep 12, 2011 at 9:45 AM, Gabriel Miro <gsmiro at gmail.com> wrote:
> >
> >> Eric,
> >>
> >> Here's the grammar I'm using:
> >>
> >> grammar test;
> >>
> >> rule    :    STRING;
> >>
> >> RPAREN    :    ')';
> >> LPAREN    :    '(';
> >>
> >> WS  :   ( ' '
> >>        | '\t'
> >>        | '\r'
> >>        | '\n'
> >>        ) {$channel=HIDDEN;}
> >>    ;
> >>
> >> CHAR:  '\'' ( ESC_SEQ | ~('\''|'\\') ) '\''
> >>    ;
> >>
> >> STRING
> >>    :  '\'' ( ESC_SEQ | ~('\\'|'\'') )* '\''
> >>    ;
> >>
> >> fragment
> >> HEX_DIGIT : ('0'..'9'|'a'..'f'|'A'..'F') ;
> >>
> >> fragment
> >> ESC_SEQ
> >>    :   '\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\')
> >>    |   UNICODE_ESC
> >>    |   OCTAL_ESC
> >>    ;
> >>
> >> fragment
> >> OCTAL_ESC
> >>    :   '\\' ('0'..'3') ('0'..'7') ('0'..'7')
> >>    |   '\\' ('0'..'7') ('0'..'7')
> >>    |   '\\' ('0'..'7')
> >>    ;
> >>
> >> fragment
> >> UNICODE_ESC
> >>    :   '\\' 'u' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT
> >>    ;
> >>
> >
> > Since the Debugger is giving you problems, use the command line.
> >
> > Create these four files and run the highlighted commands. I showed you a
> > full run show you could see what to expect.
> >
> >
> > Mail001.g
> >
> > grammar Mail001;
> >
> >
> >
> > stmt: val EOF;
> >
> >
> >
> > val : '(' '\'' ID '\'' ')'
> >
> >
> >
> > ID  :   ('a'..'z'|'A'..'Z')+ ;
> >
> > NEWLINE:'\r'? '\n' {skip();} ;
> >
> > WS  :   (' '|'\t')+ {skip();} ;
> >
> >
> >
> > Mail001.java
> >
> > import org.antlr.runtime.*;
> >
> >
> >
> > public class Mail001 {
> >
> >     public static void main(String[] args) throws Exception {
> >
> >         ANTLRInputStream input = new ANTLRInputStream(System.in);
> >
> >         Mail001Lexer lexer = new Mail001Lexer(input);
> >
> >         CommonTokenStream tokens = new CommonTokenStream(lexer);
> >
> >         Mail001Parser parser = new Mail001Parser(tokens);
> >
> >         parser.stmt();
> >
> >     }
> >
> > }
> >
> >
> >
> > Mail001.dat
> >
> > ('val')
> >
> >
> >
> > bad.dat
> >
> > (val)
> >
> >
> >
> > student at antlr:~/projects/antlr/mail/mail001$ ls -l
> >
> > total 16
> >
> > -rw-r--r-- 1 student student   6 Sep 12 12:05 bad.dat
> >
> > -rw-r--r-- 1 student student   9 Sep 12 11:48 Mail001.dat
> >
> > -rw-r--r-- 1 student student 157 Sep 12 12:04 Mail001.g
> >
> > -rw-r--r-- 1 student student 389 Sep 12 11:41 Mail001.java
> >
> > student at antlr:~/projects/antlr/mail/mail001$ java org.antlr.Tool
> Mail001.g
> >
> > student at antlr:~/projects/antlr/mail/mail001$ ls -l
> >
> > total 36
> >
> > -rw-r--r-- 1 student student    6 Sep 12 12:05 bad.dat
> >
> > -rw-r--r-- 1 student student    9 Sep 12 11:48 Mail001.dat
> >
> > -rw-r--r-- 1 student student  157 Sep 12 12:04 Mail001.g
> >
> > -rw-r--r-- 1 student student  389 Sep 12 11:41 Mail001.java
> >
> > -rw-r--r-- 1 student student 9218 Sep 12 12:09 Mail001Lexer.java
> >
> > -rw-r--r-- 1 student student 3237 Sep 12 12:09 Mail001Parser.java
> >
> > -rw-r--r-- 1 student student   60 Sep 12 12:09 Mail001.tokens
> >
> > student at antlr:~/projects/antlr/mail/mail001$ javac *.java
> >
> > student at antlr:~/projects/antlr/mail/mail001$ ls -l
> >
> > total 48
> >
> > -rw-r--r-- 1 student student    6 Sep 12 12:05 bad.dat
> >
> > -rw-r--r-- 1 student student  744 Sep 12 12:09 Mail001.class
> >
> > -rw-r--r-- 1 student student    9 Sep 12 11:48 Mail001.dat
> >
> > -rw-r--r-- 1 student student  157 Sep 12 12:04 Mail001.g
> >
> > -rw-r--r-- 1 student student  389 Sep 12 11:41 Mail001.java
> >
> > -rw-r--r-- 1 student student 4028 Sep 12 12:09 Mail001Lexer.class
> >
> > -rw-r--r-- 1 student student 9218 Sep 12 12:09 Mail001Lexer.java
> >
> > -rw-r--r-- 1 student student 2754 Sep 12 12:09 Mail001Parser.class
> >
> > -rw-r--r-- 1 student student 3237 Sep 12 12:09 Mail001Parser.java
> >
> > -rw-r--r-- 1 student student   60 Sep 12 12:09 Mail001.tokens
> >
> > student at antlr:~/projects/antlr/mail/mail001$ java Mail001 < bad.dat
> >
> > line 1:1 missing '\'' at 'val'
> >
> > line 1:4 missing '\'' at ')'
> >
> > student at antlr:~/projects/antlr/mail/mail001$ java Mail001 < Mail001.dat
> >
> > student at antlr:~/projects/antlr/mail/mail001$
> >
> >
> >
> > Notice that using Mail001.dat is valid data so no errors will be
> presented.
> >
> >
> >
> > Hope that helps,
> >
> >
> >
> > Eric
> >
> >
> >
> >>
> >> Please not that, apart from the parenthesis, the rest is generated by
> >> ANTLRWorks. Using the interpreter to match the string ' ' (single quotes
> >> and
> >> one space, or any letter between the quotes), I get a
> >> MismatchedTokenException(4!=10). It only matches '' (single quote
> without
> >> space).
> >>
> >> I tried removing the CHAR rule and then, for the same input, I get:
> >>
> >> MismatchedTokenException(-1!=9)
> >>
> >> and in the console
> >>
> >> problem matching token at 1:3 NoViableAltException('?'@[()* loopback of
> >> 17:13: ( ESC_SEQ |~ ( '\\' | '\'' ) )*])
> >>
> >> I tried using the debugger, but on Windows I get a javac, cannot create
> >> process error and In my Mac, I get compile time errors in the generated
> >> classes because it cannot find antlr classes (probably  just a classpath
> >> problem). Is there any documentation on how to use AntlrWorks features?
> >> The
> >> site documentation is pretty shallow and I cannot find any tutorials.
> >>
> >> Regards,
> >> Gabriel Miró
> >> ANTLR Newbie
> >>
> >> > -----Original Message-----
> >> > From: antlr-interest-bounces at antlr.org [mailto:antlr-interest-
> >> > bounces at antlr.org] On Behalf Of The Researcher
> >> > Sent: Friday, September 09, 2011 2:46 PM
> >> > To: antlr-interest at antlr.org
> >> > Subject: Re: [antlr-interest] How to recognize a String
> >> >
> >> > Hi Gabriel,
> >> >
> >> > It would help if you could post your entire grammar and the exact
> error
> >> > message here.
> >> >
> >> > Also, don't you mean
> >> >
> >> > LPAREN: '(";
> >> > RPAREN: ')';
> >> >
> >> > Don't worry we have all been there.
> >> >
> >> > Thanks, Eric
> >> >
> >>
> >> List: http://www.antlr.org/mailman/listinfo/antlr-interest
> >> Unsubscribe:
> >> http://www.antlr.org/mailman/options/antlr-interest/your-email-address
> >>
> >
> >
>
> List: http://www.antlr.org/mailman/listinfo/antlr-interest
> Unsubscribe:
> http://www.antlr.org/mailman/options/antlr-interest/your-email-address
>


More information about the antlr-interest mailing list