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
00029 using Antlr.Runtime.Tree;
00030 using System;
00031
00032 namespace Antlr.Runtime
00033 {
00034
00036 public class CommonErrorNode : CommonTree {
00037 public IIntStream input;
00038 public IToken start;
00039 public IToken stop;
00040 public RecognitionException trappedException;
00041
00042 public CommonErrorNode(ITokenStream input, IToken start, IToken stop,
00043 RecognitionException e) {
00044 if (stop == null ||
00045 (stop.TokenIndex < start.TokenIndex &&
00046 stop.Type != Runtime.Token.EOF) ) {
00047
00048
00049
00050
00051 stop = start;
00052 }
00053 this.input = input;
00054 this.start = start;
00055 this.stop = stop;
00056 this.trappedException = e;
00057 }
00058
00059 override public bool IsNil
00060 {
00061 get { return false; }
00062 }
00063
00064 override public int Type
00065 {
00066 get
00067 {
00068 return Runtime.Token.INVALID_TOKEN_TYPE;
00069 }
00070 }
00071
00072 override public string Text
00073 {
00074 get
00075 {
00076 string badText = null;
00077 if (start is IToken) {
00078 int i = ((IToken)start).TokenIndex;
00079 int j = ((IToken)stop).TokenIndex;
00080 if ( ((IToken)stop).Type == Runtime.Token.EOF ) {
00081 j = ((ITokenStream)input).Size();
00082 }
00083 badText = ((ITokenStream)input).ToString(i, j);
00084 }
00085 else if (start is ITree) {
00086 badText = ((ITreeNodeStream)input).ToString(start, stop);
00087 }
00088 else {
00089
00090
00091 badText = "<unknown>";
00092 }
00093 return badText;
00094 }
00095 }
00096
00097 public override string ToString() {
00098 if (trappedException is MissingTokenException) {
00099 return "<missing type: " +
00100 ((MissingTokenException)trappedException).MissingType +
00101 ">";
00102 }
00103 else if (trappedException is UnwantedTokenException) {
00104 return "<extraneous: " +
00105 ((UnwantedTokenException)trappedException).UnexpectedToken +
00106 ", resync=" + Text + ">";
00107 }
00108 else if (trappedException is MismatchedTokenException) {
00109 return "<mismatched token: " + trappedException.Token + ", resync=" + Text + ">";
00110 }
00111 else if (trappedException is NoViableAltException) {
00112 return "<unexpected: " + trappedException.Token +
00113 ", resync=" + Text + ">";
00114 }
00115 return "<error: " + Text + ">";
00116 }
00117 }
00118 }