⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tree_parser.sa

📁 Java写的词法/语法分析器。可生成JAVA语言或者是C++的词法和语法分析器。并可产生语法分析树和对该树进行遍历
💻 SA
字号:
(*   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: panic\n";      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;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -