[antlr-interest] Java grammar accepting junk
Terence Parr
parrt at cs.usfca.edu
Fri Aug 15 15:18:46 PDT 2008
BaseRecognizer:
/** Get number of recognition errors (lexer, parser, tree parser).
Each
* recognizer tracks its own number. So parser and lexer each have
* separate count. Does not count the spurious errors found between
* an error and next valid token match
*
* See also reportError()
*/
public int getNumberOfSyntaxErrors() {
return state.syntaxErrors;
}
Ter
On Aug 15, 2008, at 3:13 PM, Ron Hunter-Duvar wrote:
> So that would be by creating a RecognizerSharedState object, passing
> it to the parser constructor, then checking state.syntaxErrors > 0
> at the end, correct?
>
> Is there a way to know whether the parser succeeded in recovering
> and parsing to the end of the file or gave up part way through?
>
> Thanks,
> Ron
>
>
> Terence Parr wrote:
>> Well, take "succeeded" not very seriously...it just prints
>>
>> System.out.println("finished parsing OK");
>>
>> if there was no exception... all of the recognition exceptions are
>> caught inside the parser. You could check the parser for the
>> number of errors.
>>
>> Ter
>> On Aug 15, 2008, at 2:04 PM, Ron Hunter-Duvar wrote:
>>
>>> Hi,
>>>
>>> I'm doing some Java parsing with Antlr 3.1 and the Java.g grammar
>>> from Antlr.org. When I pass it non-Java input (e.g. shell
>>> scripts), it complains a lot, but still acts as if the parsing
>>> succeeded. I noticed that the grammar didn't have an EOF token to
>>> force it to go to end of file, so I added a new top level rule:
>>>
>>> sourceFile
>>> : compilationUnit EOF
>>> ;
>>>
>>> and invoked it with that new target. Seemed simple enough. But it
>>> didn't help. The parser still happily accepts garbage:
>>>
>>> Parsing: test.sh
>>> line 1:0 no viable alternative at character '#'
>>> line 5:0 no viable alternative at character '#'
>>> line 5:1 no viable alternative at character '#'
>>> line 5:2 no viable alternative at character '#'
>>> line 1:1 no viable alternative at input '!'
>>> Succeeded
>>>
>>> The first and last line of output are from my driver code.
>>> Basically I was expecting the parser to throw an exception, which
>>> would have counted as a failure. Since it didn't, it counts it as
>>> a success.
>>>
>>> Maybe I'm not understanding how error reporting works in Antlr
>>> 3.1. I've worked quite a bit with Antlr 2.7, but I'm new to Antlr
>>> 3. I don't have the book, and haven't found anything in the wiki
>>> that explains this. Perhaps someone can enlighten me?
>>>
>>> Thanks,
>>> Ron
>>>
>>> --
>>> Ron Hunter-Duvar | Software Developer V | 403-272-6580
>>> Oracle Service Engineering
>>> Gulf Canada Square 401 - 9th Avenue S.W., Calgary, AB, Canada T2P
>>> 3C5
>>>
>>> All opinions expressed here are mine, and do not necessarily
>>> represent
>>> those of my employer.
>>>
>>
>>
>
> --
> Ron Hunter-Duvar | Software Developer V | 403-272-6580
> Oracle Service Engineering
> Gulf Canada Square 401 - 9th Avenue S.W., Calgary, AB, Canada T2P 3C5
>
> All opinions expressed here are mine, and do not necessarily represent
> those of my employer.
>
More information about the antlr-interest
mailing list