no_viable_alt_exception.sa
上传用户:afrynkmhm
上传日期:2007-01-06
资源大小:1262k
文件大小:2k
源码类别:

编译器/解释器

开发平台:

Others

  1. (* 
  2.   ANTLR Translator Generator
  3.   Project led by Terence Parr at http://www.jGuru.com
  4.   Software rights: http://www.antlr.org/RIGHTS.html
  5.  
  6.   $Id: //depot/code/org.antlr/release/antlr-2.7.0/lib/sather/Antlr/no_viable_alt_exception.sa#1 $
  7. *)
  8. class ANTLR_NO_VIABLE_ALT_EXCEPTION{AST < $ANTLR_AST{AST} } < $ANTLR_RECOGNITION_EXCEPTION is
  9.    include ANTLR_RECOGNITION_EXCEPTION 
  10.  str     -> super_str, 
  11.  message -> super_message;
  12.    attr token : $ANTLR_TOKEN;
  13.    attr node : AST; -- handles parsing and treeparsing
  14.    readonly attr line : INT;
  15.    readonly attr column : INT;   
  16.    create( t : AST ) : SAME is
  17.       res : SAME := #SAME("NoViableAlt");
  18.       res.node := t;
  19.       res.file_name := "<AST>";
  20.       return res;
  21.    end;
  22.    create_from_token( t : $ANTLR_TOKEN , fn : STR ) : SAME is
  23.       res : SAME := #SAME("NoViableAlt");
  24.       res.token := t;
  25.       res.line := t.line;
  26.       res.column := t.column;
  27.       res.file_name := fn;
  28.       return res;
  29.    end;
  30.    -- Returns a clean error message (no line number/column information)
  31.    message : STR is
  32.       if ( ~void(token) ) then
  33.  return "unexpected token: " + token.text;
  34.       end;
  35.       -- must be a tree parser error if void(token)
  36.       if ( SYS::is_eq( node , AST::ASTNULL ) ) then
  37.  return "unexpected end of subtree";
  38.       end;
  39.       return "unexpected AST node: " + node.str;
  40.    end;
  41.    -- Returns a string representation of this exception.
  42.    str : STR is
  43.       if ( ~void(token) ) then
  44.  return file_line_str + message;
  45.       end;
  46.       
  47.       return message;
  48.    end;
  49. end;