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.

Reply via email to