[antlr-interest] Couldn't catch the exception object at the last token in the rule
Marwan Ajraoui
marwan.alephn at gmail.com
Fri Aug 21 05:57:58 PDT 2009
you can define in your members section a method
public String getErrorMessage(RecognitionException e,
String[] tokenNames)
{
String msg = e.getMessage();
if (e instanceof MissingTokenException) {
MissingTokenException mte = (MissingTokenException) e;
String tokenName = "";
if (mte.expecting == Token.EOF) {
tokenName = "EOF";
} else {
tokenName = tokenNames[mte.expecting];
}
........
Or u can use @rulecatch.
cheers,
2009/8/21 Marwan Ajraoui <marwan.alephn at gmail.com>:
> r : ID '#' {s = $ID.text; System.out.println("found "+s);} ;
>
> Tow alternatives
>
> 1. take out '#' from ur file.g
>
> or
>
> 2. Put it in ur input file. so it look like: b #
>
>
> U should read about how it works. Jim did send u a link.
>
> cheers,
>
>
>
>
> 2009/8/19 Ha Luong <haluongvn at gmail.com>:
>> Dear all,
>>
>> I'd like to catch the exception at the last token in the rule. I managed to
>> test some rules to catch the last token mismatch but I couldn't do.
>> Here is my test:
>>
>> 1. In "T.g" :
>>
>> grammar T;
>> options {
>> language=Java;
>> }
>> @members {
>> String s;
>> }
>>
>> // Alter code generation so catch-clauses get replace with
>> // this action.
>> @rulecatch {
>>
>> catch (RecognitionException e) {
>> throw e;
>>
>> }
>>
>> }
>> // END:override
>>
>> r : ID '#' {s = $ID.text; System.out.println("found "+s);} ;
>> ID: 'a'..'z'+ ;
>> WS: (' '|'\n'|'\r')+ {skip();} ; // ignore whitespace
>>
>> 2. In "input.txt":
>> b
>>
>> 3. In "Test.java":
>> import org.antlr.runtime.*;
>>
>> public class Test {
>> public static void main(String[] args) throws Exception {
>> //ANTLRInputStream input = new ANTLRInputStream(System.in);
>> //TLexer lexer = new TLexer(input);
>> TLexer lexer = new TLexer(new ANTLRFileStream("input.txt"));
>> CommonTokenStream tokens = new CommonTokenStream(lexer);
>> TParser parser = new TParser(tokens);
>> try{
>> parser.r();
>> }
>> catch (RecognitionException e) {
>> System.out.println(e.getClass().toString());
>> //e.printStackTrace();
>> }
>> }
>> }
>>
>> 4. The output in console when I run Test:
>> $ java Test
>> line 0:-1 missing '#' at '<EOF>'
>> found b
>>
>> I don't know why the last token mismatch couldn't catch in the main function
>> of Test. Could you please help me?
>>
>> Thank you very much,
>> Ha Luong
>>
>>
>>
>>
>>
>> List: http://www.antlr.org/mailman/listinfo/antlr-interest
>> Unsubscribe:
>> http://www.antlr.org/mailman/options/antlr-interest/your-email-address
>>
>>
>
>
>
> --
> Marouane
>
--
Marouane
More information about the antlr-interest
mailing list