tree_parser.sa
上传用户:afrynkmhm
上传日期:2007-01-06
资源大小:1262k
文件大小:3k
- (*
- ANTLR Translator Generator
- Project led by Terence Parr at http://www.jGuru.com
- Software rights: http://www.antlr.org/RIGHTS.html
-
- $Id: //depot/code/org.antlr/release/antlr-2.7.0/lib/sather/Antlr/tree_parser.sa#1 $
- *)
- class ANTLR_TREE_PARSER{AST < $ANTLR_AST{AST}} is
- -- Where did this rule leave off parsing; avoids a return parameter
- private attr sa_ret_tree : AST;
-
- -- guessing nesting level; guessing=0 implies not guessing
- -- private attr guessing : INT;
-
- -- Nesting level of registered handlers
- -- private attr exception_level : INT ;
- private attr input_state : ANTLR_TREE_PARSER_SHARED_INPUT_STATE;
-
- -- Table of token type to token names
- attr token_names : ARRAY{STR};
- -- AST return value for a rule is squirreled away here
- private attr return_ast : AST;
- -- AST support code; parser and treeparser delegate to this object
- -- attr ast_factory : $ANTLR_AST_FACTORY;
- create : SAME is
- res : SAME := new;
- res.input_state := #ANTLR_TREE_PARSER_SHARED_INPUT_STATE;
- -- res.ast_factory := #ANTLR_COMMON_AST_FACTORY;
- return res;
- end;
- -- Get the AST return value squirreled away in the parser
- ast : AST is
- return return_ast;
- end;
- token_name ( num : INT ) : STR is
- return token_names[num];
- end;
-
- match( t : AST, ttype : INT ) is
- if ( void(t) or SYS::is_eq( t , AST::ASTNULL ) or t.ttype /= ttype ) then
- raise #ANTLR_MISMATCHED_TOKEN_EXCEPTION{AST}( token_names, t, ttype, false );
- end;
- end;
- -- Make sure current lookahead symbol matches the given set
- -- Throw an exception upon mismatch, which is catch by either the
- -- error handler or by the syntactic predicate.
- match( t : AST, b : INT_SET ) is
- if ( void(t) or SYS::is_eq( t , AST::ASTNULL ) or ~b.member(t.ttype) ) then
- raise #ANTLR_MISMATCHED_TOKEN_EXCEPTION{AST}( token_names, t, b, false);
- end;
- end;
- match_not(t : AST, ttype : INT ) is
- if ( void(t) or SYS::is_eq( t , AST::ASTNULL ) or t.ttype /= ttype ) then
- raise #ANTLR_MISMATCHED_TOKEN_EXCEPTION{AST}( token_names, t, ttype, true );
- end;
- end;
- panic is
- #ERR + "TREE_WALKER: panicn";
- UNIX::exit(1);
- end;
-
- -- Parser error-reporting function can be overridden in subclass
- report_error( ex : $ANTLR_RECOGNITION_EXCEPTION ) is
- #ERR + ex.str + "n";
- end;
- -- Parser error-reporting function can be overridden in subclass
- report_error( s : STR ) is
- #ERR + "error: " + s + "n";
- end;
- -- Parser warning-reporting function can be overridden in subclass
- report_warning( s : STR ) is
- #ERR + "warning: " + s + "n";
- end;
- trace_in( rname : STR, t : AST ) is
- #OUT + "enter " + rname + "(";
- if ( void(t) ) then
- #OUT + "null";
- else
- #OUT + t.str;
- end;
- #OUT + ")";
- if ( input_state.guessing > 0 ) then
- #OUT + " [guessing]";
- end;
- #OUT + "n";
- end;
-
- trace_out( rname : STR, t : AST ) is
- #OUT + "exit " + rname + "(";
- if ( void(t) ) then
- #OUT + "null";
- else
- #OUT + t.str;
- end;
- #OUT + ")";
- if ( input_state.guessing > 0 ) then
- #OUT + " [guessing]";
- end;
- #OUT + "n";
- end;
- end;