[antlr-interest] How to feedback to users the string expected on MismatchedTokenException
Benjamin Niemann
pink at odahoda.de
Wed Jun 13 00:57:15 PDT 2007
Jonathan Thomas wrote:
> In previous versions of Antlr you could put in 'paraphrase' option to
> spit out whatever you liked as the error message for that token. On
> this
>
page:http://www.antlr.org/wiki/display/ANTLR3/Migrating+from+ANTLR+2+to+ANTLR+3
> down the bottom it mysteriously says there is something similar, but
> you need the book. I'm still waiting for my book to arrive ... :-)
The book only describes paraphrasing for rules (up to the page I am at now -
but I have finished the error recovery chapter just yesterday).
To elaborate my suggestion a bit more:
getErrorMessage() takes the tokenNames array as an argument, so you could
override it with a method that calls BaseRecognizer.getErrorMessage() with
a custom array.
I'd suggest to fill this custom array from a mapping, because token types
may jump around in the mapping, when the grammar is modified.
A rough example in Python syntax (still too early for me to switch my brain
into - a very limited - Java mode ;) )
# this clones the original array
myTokenNames = TParser.tokenNames[:]
# a mapping of token types and there new name
overrides = {
PLUS: 'plus sign',
DOLLAR: 'much money',
...
}
# changes names of those token type mentioned in overrides
for ttype, name in overrides.items():
myTokenNames[ttype] = name
And you getErrorMessage() looks like (if you'd do it in Python):
def getErrorMessage(self, exc, tokenNames):
return BaseRecognizer.getErrorMessage(self, exc, myTokenNames)
--
Benjamin Niemann
Email: pink at odahoda dot de
WWW: http://pink.odahoda.de/
More information about the antlr-interest
mailing list