00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 package org.antlr.runtime.tree;
00029
00030 import org.antlr.runtime.*;
00031
00036 public class TreeParser extends BaseRecognizer {
00037 public static final int DOWN = Token.DOWN;
00038 public static final int UP = Token.UP;
00039
00040 protected TreeNodeStream input;
00041
00042 public TreeParser(TreeNodeStream input) {
00043 super();
00044 setTreeNodeStream(input);
00045 }
00046
00047 public TreeParser(TreeNodeStream input, RecognizerSharedState state) {
00048 super(state);
00049 setTreeNodeStream(input);
00050 }
00051
00052 public void reset() {
00053 super.reset();
00054 if ( input!=null ) {
00055 input.seek(0);
00056 }
00057 }
00058
00060 public void setTreeNodeStream(TreeNodeStream input) {
00061 this.input = input;
00062 }
00063
00064 public TreeNodeStream getTreeNodeStream() {
00065 return input;
00066 }
00067
00068 public String getSourceName() {
00069 return input.getSourceName();
00070 }
00071
00072 protected Object getCurrentInputSymbol(IntStream input) {
00073 return ((TreeNodeStream)input).LT(1);
00074 }
00075
00076 protected Object getMissingSymbol(IntStream input,
00077 RecognitionException e,
00078 int expectedTokenType,
00079 BitSet follow)
00080 {
00081 String tokenText =
00082 "<missing "+getTokenNames()[expectedTokenType]+">";
00083 return new CommonTree(new CommonToken(expectedTokenType, tokenText));
00084 }
00085
00090 public void matchAny(IntStream ignore) {
00091 state.errorRecovery = false;
00092 state.failed = false;
00093 Object look = input.LT(1);
00094 if ( input.getTreeAdaptor().getChildCount(look)==0 ) {
00095 input.consume();
00096 return;
00097 }
00098
00099
00100 int level=0;
00101 int tokenType = input.getTreeAdaptor().getType(look);
00102 while ( tokenType!=Token.EOF && !(tokenType==UP && level==0) ) {
00103 input.consume();
00104 look = input.LT(1);
00105 tokenType = input.getTreeAdaptor().getType(look);
00106 if ( tokenType == DOWN ) {
00107 level++;
00108 }
00109 else if ( tokenType == UP ) {
00110 level--;
00111 }
00112 }
00113 input.consume();
00114 }
00115
00120 protected void mismatch(IntStream input, int ttype, BitSet follow)
00121 throws RecognitionException
00122 {
00123 throw new MismatchedTreeNodeException(ttype, (TreeNodeStream)input);
00124 }
00125
00130 public String getErrorHeader(RecognitionException e) {
00131 return getGrammarFileName()+": node from "+
00132 (e.approximateLineInfo?"after ":"")+"line "+e.line+":"+e.charPositionInLine;
00133 }
00134
00138 public String getErrorMessage(RecognitionException e, String[] tokenNames) {
00139 if ( this instanceof TreeParser ) {
00140 TreeAdaptor adaptor = ((TreeNodeStream)e.input).getTreeAdaptor();
00141 e.token = adaptor.getToken(e.node);
00142 if ( e.token==null ) {
00143 e.token = new CommonToken(adaptor.getType(e.node),
00144 adaptor.getText(e.node));
00145 }
00146 }
00147 return super.getErrorMessage(e, tokenNames);
00148 }
00149
00150 public void traceIn(String ruleName, int ruleIndex) {
00151 super.traceIn(ruleName, ruleIndex, input.LT(1));
00152 }
00153
00154 public void traceOut(String ruleName, int ruleIndex) {
00155 super.traceOut(ruleName, ruleIndex, input.LT(1));
00156 }
00157
00158 }