[antlr-interest] Fundamental question

Jim Idle jimi at temporal-wave.com
Fri Nov 11 07:27:51 PST 2011


You need to write quite a but of custom code. However, for some pointers
on how to do this, get the source code for the JavaFX compiler, or at
least the front end. there you can see that I am building the standard
Java AST as per the Java compiler and not an ANTLR AST, but the techniques
are the same. Basically you need to add exception actions to your rules
that build the AST in whatever fashion you need.

Here:

http://kenai.com/projects/openjfx-compiler/sources/jfx-debug/show/src/shar
e/classes/com/sun/tools/javafx/antlr?rev=6727

You will find grammar files and a few super classes that do what you are
trying to do for this particular language because the netbeans source code
analyzers requires as complete a tree as can be formed. However, for your
own particular language, you may need further customizations. There is no
universal answer/solution to this I am afraid.

Jim


> -----Original Message-----
> From: antlr-interest-bounces at antlr.org [mailto:antlr-interest-
> bounces at antlr.org] On Behalf Of Hans-Georg Winkler
> Sent: Friday, November 11, 2011 12:07 AM
> To: antlr-interest at antlr.org
> Subject: Re: [antlr-interest] Fundamental question
>
>
> Hello,
>
>
> i already read this article and even did some custom recovery by
> changing the order of recovery (->first insertion, then deletion) for
> one specific problem.
>
> But again thats just a fix for a small group of error cases. What i
> want to do is change how an error is passed up to the top node of my
> tree.
> If that is possible of course, but i've already tried several different
> approaches to make my parser error resistant, i tried adding rules for
> wrong code for example, but it doesnt seem like the way it should be
> done.
> There's incredibly little information about this on the web (or i'm
> just to dumb to find it) though.
>
>
> I don't know if i'm going in the right direction, but if someone knows
> a good way to make a parser error resistant i would be willing to
> learn.
>
>
> Georg
>
>
>
>
> > From: jimi at temporal-wave.com
> > Date: Thu, 10 Nov 2011 07:15:45 -0800
> > CC: antlr-interest at antlr.org
> > Subject: Re: [antlr-interest] Fundamental question
> >
> > Take a look at:
> >
> > http://www.antlr.org/wiki/display/ANTLR3/Custom+Syntax+Error+Recovery
> >
> > as it may help. This is also useful for the other person asking about
> > AST construction on errors, though in the end that probably comes
> down
> > to custom coding.
> >
> >
> > Jim
> >
> >
> > > -----Original Message-----
> > > From: Mari Matinlassi [mailto:mmatinlassi at icinetic.com]
> > > Sent: Thursday, November 10, 2011 1:01 AM
> > > To: 'Jim Idle'; 'Ian Kaplan'
> > > Cc: antlr-interest at antlr.org
> > > Subject: RE: [antlr-interest] Fundamental question
> > >
> > > Jim, Ian,
> > >
> > > Thanks for pointing me to missing EOF.
> > >
> > > However, it did not .. kind of.. solve my problem.
> > >
> > > Resulting tree will now (after adding EOF and with same input) be
> > >
> > > int test ;
> > > <missing EOF>
> > >
> > > Whereas, I would _like to have_ a tree something like below:
> > >
> > > int test;
> > > <error>
> > > int variable;
> > > string here;
> > >
> > > How to refactor my grammar to make a tree like above?
> > >
> > > Thanks in advance,
> > >
> > > mari
> > >
> > >
> > > -----Original Message-----
> > > From: antlr-interest-bounces at antlr.org
> > > [mailto:antlr-interest-bounces at antlr.org] On Behalf Of Jim Idle
> > > Sent: Wednesday, November 09, 2011 6:18 PM
> > > Cc: antlr-interest at antlr.org
> > > Subject: Re: [antlr-interest] Fundamental question
> > >
> > > Except that the rule "type" does not allow an ID as the type, and
> so
> > > this is a plain syntax error that is not picked up because of the
> > > lack of EOF at the end of the start rule.
> > >
> > > Jim
> > >
> > > > -----Original Message-----
> > > > From: antlr-interest-bounces at antlr.org [mailto:antlr-interest-
> > > > bounces at antlr.org] On Behalf Of Ian Kaplan
> > > > Sent: Wednesday, November 09, 2011 9:09 AM
> > > > To: Mari Matinlassi
> > > > Cc: antlr-interest at antlr.org
> > > > Subject: Re: [antlr-interest] Fundamental question
> > > >
> > > >   There is nothing wrong as far as the syntax goes with this.
> > > > There could, for example, be a user defined type called strig
> > > > (strings for trigonometry :).  So this is grammatically correct.
> > > > What is not correct is the semantics.  In fact, there probably is
> > > > no user defined type strig.  So this is an error may be issued
> > > > after the syntax tree is built, when a semantic phase makes a
> pass
> > > > over the tree.  The semantic phase would discover that there was
> > > > no type strig and report an error ("No type 'strig' on line 42").
> > > >
> > > >
> > > > On Wed, Nov 9, 2011 at 8:18 AM, Mari Matinlassi
> > > > <mmatinlassi at icinetic.com>wrote:
> > > >
> > > > > Hi,
> > > > >
> > > > > There is something fundamental and important that I have not
> > > > > understood with ANTLR grammars.
> > > > >
> > > > > If I need to parse something like...
> > > > >
> > > > >        int test;
> > > > >        strig another;
> > > > >        int variable;
> > > > >        string here;
> > > > >
> > > > > You notice there is a typing error on the second line ('strig'
> > > > instead
> > > > > of 'string').
> > > > >
> > > > > How do I make a grammar that will not stop parsing but,
> > > > > continues after an error??
> > > > >
> > > > > Below is an example how I CANNOT make it work the right way
> > > (created
> > > > > AST contains only 'int test ;')..
> > > > >
> > > > > grammar List;
> > > > >
> > > > > options {
> > > > >        language = CSharp3;
> > > > >        TokenLabelType = CommonToken;
> > > > >        output=AST;
> > > > >        ASTLabelType = CommonTree; }
> > > > >
> > > > > @lexer::namespace{ConsoleApplication4}
> > > > > @parser::namespace{ConsoleApplication4}
> > > > >
> > > > >
> > > > > public r
> > > > >        : variables*
> > > > >        ;
> > > > >
> > > > > variables
> > > > >        : type ID ';'
> > > > >        ;
> > > > >
> > > > > type
> > > > >        : 'int'
> > > > >        | 'string'
> > > > >        ;
> > > > >
> > > > > ID : 'a'..'z' + ;
> > > > >
> > > > > WS : (' ' |'\n' |'\r' ) {$channel=Hidden;} ;
> > > > >
> > > > >
> > > > > Many thanks for your time and help,
> > > > >
> > > > > Mari
> > > > >
> > > > >
> > > > >
> > > > > 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
> > >
> > > List: http://www.antlr.org/mailman/listinfo/antlr-interest
> > > Unsubscribe:
> > > http://www.antlr.org/mailman/options/antlr-interest/your-email-
> addre
> > > ss
> > >
> >
> > 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