Hi, I need to report customized error when ever user input does not match our defined rules.
Here is my code: grammar second1; @lexer::members { @Override public void reportError(RecognitionException e) { System.out.println("Throwing Exception: "+ e.getMessage()); displayRecognitionError(getTokenNames(), e); throw new IllegalArgumentException(e); } @Override public void displayRecognitionError(String[] tokenNames, RecognitionException e) { String hdr = getErrorHeader(e); String msg = getErrorMessage(e, tokenNames); System.out.println(hdr + " " + msg); List stack = getRuleInvocationStack(e, this.getClass().getName()); for(int i=0;i<stack.size();i++){ System.out.println(stack.get(i)); } Object str = getCurrentInputSymbol(getTokenStream()); System.out.println(str.toString()); } } @parser::members { public void reportError(RecognitionException e) { System.out.println("Throwing Exception: "+ e.getMessage()); displayRecognitionError(getTokenNames(), e); throw new IllegalArgumentException(e); } @Override public void displayRecognitionError(String[] tokenNames, RecognitionException e) { String hdr = getErrorHeader(e); String msg = getErrorMessage(e, tokenNames); System.out.println(hdr + " " + msg); List stack = getRuleInvocationStack(e, this.getClass().getName()); for(int i=0;i<stack.size();i++){ System.out.println(stack.get(i)); } Object str = getCurrentInputSymbol(getTokenStream()); System.out.println(str.toString()); } private boolean inbounds(Token t, int min, int max, String methodName) { int n = Integer.parseInt(t.getText()); if(n >= min && n <= max) { return true; } else { System.out.println("The range for value accepted by " + methodName+" is "+min +"-" + max ); return false; } } } expr : SET attribute EOF; attribute : Value1 int1:integer1["Value1"] { System.out.println("Accepted"); } | Value2 integer2 ["Value2"] { System.out.println("Accepted"); } ; exception[int1]: catch[Exception e] {System.out.println("Error Reported for int1");} exception: catch[Exception e] {System.out.println("General error Reported");} integer1 [String methodName] : Int { inbounds($Int, 0,1000,methodName) }? ; integer2 [String methodName] : Int { inbounds($Int, 0,10000,methodName) }? ; Int : '0'..'9'+; SET : 'set'; Value1 : 'value'; Value2 : 'value2'; fragment WS : (' ' | '\t') ; But while compiling this code I am getting the following errors: error(100): second1.g:26:22: syntax error: antlr: second1.g:26:22: unexpected token: int1 error(100): second1.g:29:17: syntax error: antlr: second1.g:29:17: unexpected token: : error(100): second1.g:32:10: syntax error: antlr: second1.g:32:10: unexpected token: catch error(100): second1.g:0:0: syntax error: assign.types: <AST>:0:0: unexpected AST node: <end-of-block> error(100): second1.g:0:0: syntax error: assign.types: <AST>:0:0: unexpected end of subtree error(100): second1.g:0:0: syntax error: define: <AST>:0:0: unexpected AST node: <end-of-block> error(100): second1.g:0:0: syntax error: define: <AST>:0:0: unexpected AST node: <end-of-block> error(100): second1.g:0:0: syntax error: define: <AST>:0:0: unexpected end of subtree error(106): second1.g:26:27: reference to undefined rule: integer1 error(106): second1.g:27:22: reference to undefined rule: integer2 warning(105): second1.g:27:15: no lexer rule corresponding to token: Value2 warning(105): second1.g:26:15: no lexer rule corresponding to token: Value1 warning(105): second1.g:24:15: no lexer rule corresponding to token: SET What should I do? :( I checked on net, this is how we handle exception in ANTLR 3.x Why is it not working in my case then :( Please help me out. -- You received this message because you are subscribed to the Google Groups "il-antlr-interest" group. To post to this group, send email to il-antlr-interest@googlegroups.com. To unsubscribe from this group, send email to il-antlr-interest+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/il-antlr-interest?hl=en.