[antlr-interest] Access to delegates for imported grammars

Michael Bedward michael.bedward at gmail.com
Tue Feb 1 16:45:33 PST 2011


Hi Bill,

My first thought would be to cheat, and make the errorReporter field
in your subclass static.

Michael


On 2 February 2011 11:03, Bill Andersen <bill.andersen at mac.com> wrote:
> Folks
>
> I have a grammar A that imports B.  One thing I'd like to do is to provide a mechanism for non-default error reporting in A and B and I do this in the way described here
>
>        http://www.antlr.org/wiki/display/ANTLR3/Error+reporting+and+recovery
>
> Thing is, I have to plug this code
>
>  private ErrorReporter errorReporter = null;
>
>  public void setErrorReporter(ErrorReporter errorReporter) {
>    this.errorReporter = errorReporter;
>    <delegate>.setErrorReporter(errorReporter);
>  }
>
>  // Overrides parser/lexer emitErrorMsg
>  public void emitErrorMessage(String msg) {
>    if (errorReporter == null) {
>      super.emitErrorMessage(msg);
>    } else {
>      errorReporter.reportError(msg);
>    }
>  }
>
> into all the grammars where I want this functionality, including the imported grammars.
>
> What I'd like to do is to define subclasses of Parser and TreeParser that include this behavior already.  I need a way for the method setErrorReporter() in A to also work on B.  Where I have <delegate> above is where I do this.
>
> The issue is that, if I provide these methods in defined subclasses of Parser and TreeParser, there seems to be no way in that code that  can get to the delegates without knowing their names.  What I'd like for setErrorReporter() is something like this (call my defined Parser subclass MyParser):
>
>  public void setErrorReporter(ErrorReporter errorReporter) {
>    this.errorReporter = errorReporter;
>    for (MyParser delegate : getDelegates()) {
>      delegate.setErrorReporter(errorReporter);
>    }
>  }
>
> First, is there any way to do what I'm trying to do here?  Second, if there's not, is there a good workaround (I have a feeling that I might have to change ANTLR's processing of imports to generate that getDelegates() method)?
>
> Any help appreciated
>
>  .bill
>
> 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