[antlr-interest] Failure of parser on invalid input

Tomas Svarovsky svarovsky.tomas at gmail.com
Fri Oct 12 01:24:32 PDT 2012


Hey Jim

Thanks for the link to search engine this is very helpful.

I tried to add the EOF to grammar as you suggested and this helps to
force the parser to stop immediately but still does not fail. To try
to further minimize the possible effect of clojure. I tried to use the
TestRig/grun which is mentioned in the book.

This prints some messages that are useful but still does not seem to
fail on invalid input. The return code is always 0. Reading the source
code for the class helped to discover couple of useful methods for
printing token stream etc but still nothing that would indicate that
the exceptions are consumed silently. Is there a way how to
programatically tell it failed and what is a problem?

As for the language it is actually not SQL. It is true that in full
extent it is quite complicated as well (even though it is still
simpler than SQL) but I need only very small portion so I think it
fits the bill.

Thanks again for your help

Tomas

On Thu, Oct 11, 2012 at 11:59 PM, Jim Idle <jimi at temporal-wave.com> wrote:
> Please make use of http://antlr.markmail.org as you will find it is a good
> search engine for the email list.
>
> Unless you tell ANTLR to keep parsing while there is any input left, it
> will just stop when there is input that will not match any parser rule. So
> you want;
>
> query: 'SELECT' EOF ;
>
> Also, I would not try to write a SQL grammar as your first project as it
> is far too complicated to learn while trying to do that. Start with
> expression trees and simple languages until you have the basics down.
>
> Jim
>
> -----Original Message-----
> From: antlr-interest-bounces at antlr.org
> [mailto:antlr-interest-bounces at antlr.org] On Behalf Of Tomas Svarovsky
> Sent: Friday, October 12, 2012 2:20 PM
> To: antlr-interest at antlr.org
> Subject: [antlr-interest] Failure of parser on invalid input
>
> Hi list
>
> I am trying to create simple application and I decided I will try to use
> ANTLR so I bought the book and I am working through it (thanks for
> it) while trying to create something.
>
> I am little confused with the behavior of the generated parser while I
> feed it with input that does not conform to the grammar. I would expect it
> to fail loud with an exception or something like that but instead it seems
> to recover and sort of finish parsing.
>
> For example. This is my grammar
>
> grammar Gooddata;
>
> @header {
> package org.fluke.tools;
> }
>
> query : 'SELECT';
>
> The app looks roughly like this It is not Java but Clojure hopefully it is
> not influencing things.
>
> (let [input (new ANTLRFileStream "test.txt")
>         lexer (new GooddataLexer input)
>         tokens (new CommonTokenStream lexer)
>         parser (new GooddataParser tokens)]
>     (. (.  parser query) toStringTree parser)))
>
> If I feed it SELECT it prints "(query SELECT)" and that is expected.
> If I feed it SLCT It prints "query" but it does not fail.
>
> Is there something I need to do to be able to tell that it did not parse
> correctly and be able to present present some reasonable error message? Is
> there a place in the book where this is discuss ed? I am using antlr-4.0b1
>
> Thanks in advance
>
> Tomas
>
> 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