Hi All

I've another question related to the same project. (I won't be bothering 
you much longer, it's due by the end of the week. :-)  I've got to move 
really quickly now.)

Typically, errors in ANTLR parsers are sent to stderr, via this 
emitErrorMessage:

00189  
<http://www.antlr.org/api/Java/classorg_1_1antlr_1_1runtime_1_1_base_recognizer.html#85afd3931a36f93c5e1fee84349b5673>
          public  void  displayRecognitionError  
<http://www.antlr.org/api/Java/classorg_1_1antlr_1_1runtime_1_1_base_recognizer.html#85afd3931a36f93c5e1fee84349b5673>(String[]
 tokenNames,
00190RecognitionException  
<http://www.antlr.org/api/Java/classorg_1_1antlr_1_1runtime_1_1_recognition_exception.html>
  e)
00191         {
00192                 String hdr =getErrorHeader  
<http://www.antlr.org/api/Java/classorg_1_1antlr_1_1runtime_1_1_base_recognizer.html#08b70239348297407c4322a00a46c77c>(e);
00193                 String msg =getErrorMessage  
<http://www.antlr.org/api/Java/classorg_1_1antlr_1_1runtime_1_1_base_recognizer.html#f5adeec09d6d06b09bf18e2c14620093>(e,
 tokenNames);
00194emitErrorMessage  
<http://www.antlr.org/api/Java/classorg_1_1antlr_1_1runtime_1_1_base_recognizer.html#20c71583ddc8a129bf81ef64a1fb4857>(hdr+""+msg);
00195         }


But my lang will be embedded in a Web site, so rather than outputting 
errors to stderr I want to report them by throwing exceptions, which are 
easy to handle.
In my AST-producing grammar, I report syntactic errors by modifying 
reportError() to throw an IllegalArgumentException:
>        public void reportError(RecognitionException e) {
>            // if we've already reported an error and have not matched 
> a token
>            // yet successfully, don't report any errors.
>            if ( state.errorRecovery ) {
>                    //System.err.print("[SPURIOUS] ");
>                    return;
>            }
>            state.syntaxErrors++; // don't count spurious
>            state.errorRecovery = true;
>            throw new IllegalArgumentException( 
> getRecognitionError(this.getTokenNames(), e) );
>        }
>
getRecognitionError returns a string similar to the string that would 
normally be printed by displayRecognitionError.

In my tree grammar, a production can simply throw IllegalArgumentException.

But how -- short of modifying *Lexer.java -- can I direct the Lexer to 
throw an Exception which my driver can catch?

Thanks
Deadline looming!
A

-- 
Senior Research Scientist
Computational Biology
Memorial Sloan-Kettering Cancer Center


List: http://www.antlr.org/mailman/listinfo/antlr-interest
Unsubscribe: 
http://www.antlr.org/mailman/options/antlr-interest/your-email-address

-- 
You received this message because you are subscribed to the Google Groups 
"il-antlr-interest" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/il-antlr-interest?hl=en.

Reply via email to