2 // Author: Sergey Chaban (serge@wildwestsoftware.com)
9 public class ILToken
: ICloneable
{
13 public static readonly ILToken Invalid
;
14 public static readonly ILToken EOF
;
16 public static readonly ILToken Dot
;
18 public static readonly ILToken OpenBrace
;
19 public static readonly ILToken CloseBrace
;
20 public static readonly ILToken OpenBracket
;
21 public static readonly ILToken CloseBracket
;
22 public static readonly ILToken OpenParens
;
23 public static readonly ILToken CloseParens
;
24 public static readonly ILToken Comma
;
25 public static readonly ILToken Colon
;
26 public static readonly ILToken DoubleColon
;
27 public static readonly ILToken Semicolon
;
28 public static readonly ILToken Assign
;
29 public static readonly ILToken Star
;
30 public static readonly ILToken Ampersand
;
31 public static readonly ILToken Plus
;
32 public static readonly ILToken Slash
;
33 public static readonly ILToken Bang
;
34 public static readonly ILToken Ellipsis
;
35 public static readonly ILToken Dash
;
36 public static readonly ILToken OpenAngleBracket
;
37 public static readonly ILToken CloseAngleBracket
;
39 private static readonly ILToken
[] punctuations
;
45 Invalid
= new ILToken (-1, "invalid");
46 EOF
= new ILToken (Token
.EOF
, "eof");
48 Dot
= new ILToken (Token
.DOT
, ".");
49 OpenBrace
= new ILToken (Token
.OPEN_BRACE
, "{");
50 CloseBrace
= new ILToken (Token
.CLOSE_BRACE
, "}");
51 OpenBracket
= new ILToken (Token
.OPEN_BRACKET
, "[");
52 CloseBracket
= new ILToken (Token
.CLOSE_BRACKET
, "]");
53 OpenParens
= new ILToken (Token
.OPEN_PARENS
, "(");
54 CloseParens
= new ILToken (Token
.CLOSE_PARENS
, ")");
55 Comma
= new ILToken (Token
.COMMA
, ",");
56 Colon
= new ILToken (Token
.COLON
, ":");
57 DoubleColon
= new ILToken (Token
.DOUBLE_COLON
, "::");
58 Semicolon
= new ILToken (Token
.SEMICOLON
, ";");
59 Assign
= new ILToken (Token
.ASSIGN
, "=");
60 Star
= new ILToken (Token
.STAR
, "*");
61 Ampersand
= new ILToken (Token
.AMPERSAND
, "&");
62 Plus
= new ILToken (Token
.PLUS
, "+");
63 Slash
= new ILToken (Token
.SLASH
, "/");
64 Bang
= new ILToken (Token
.BANG
, "!");
65 Ellipsis
= new ILToken (Token
.ELLIPSIS
, "...");
66 Dash
= new ILToken (Token
.DASH
, "-");
67 OpenAngleBracket
= new ILToken (Token
.OPEN_ANGLE_BRACKET
, "<");
68 CloseAngleBracket
= new ILToken (Token
.CLOSE_ANGLE_BRACKET
, ">");
70 punctuations
= new ILToken
[] {
71 OpenBrace
, CloseBrace
,
72 OpenBracket
, CloseBracket
,
73 OpenParens
, CloseParens
,
74 Comma
, Colon
, Semicolon
,
75 Assign
, Star
, Ampersand
,
77 OpenAngleBracket
, CloseAngleBracket
89 /// <param name="token"></param>
90 /// <param name="val"></param>
91 public ILToken (int token
, object val
)
100 /// <param name="that"></param>
101 public ILToken (ILToken that
)
103 this.token
= that
.token
;
119 public object Value
{
128 /// <param name="that"></param>
129 public virtual void CopyFrom (ILToken that
)
131 this.token
= that
.token
;
138 /// <returns></returns>
139 public virtual object Clone ()
141 return new ILToken (this);
147 /// <returns></returns>
148 public override int GetHashCode ()
151 if (val
!= null) h ^
= val
.GetHashCode ();
158 /// <returns></returns>
159 public override string ToString ()
161 return (token
.ToString() + " : " + (val
!= null ? val
.ToString () : "<null>"));
167 /// <param name="o"></param>
168 /// <returns></returns>
169 public override bool Equals (object o
)
171 bool res
= (o
!= null);
174 res
= Object
.ReferenceEquals (this, o
);
178 ILToken that
= o
as ILToken
;
179 res
= (this.token
== that
.token
) && (this.val
.Equals (that
.val
));
188 private static bool EqImpl (ILToken t1
, ILToken t2
)
191 if ((t1
as object) != null) {
192 res
= t1
.Equals (t2
);
194 res
= ((t2
as object) == null);
203 /// <param name="t1"></param>
204 /// <param name="t2"></param>
205 /// <returns></returns>
206 public static bool operator == (ILToken t1
, ILToken t2
)
208 return EqImpl (t1
, t2
);
213 /// <param name="t1"></param>
214 /// <param name="t2"></param>
215 /// <returns></returns>
216 public static bool operator != (ILToken t1
, ILToken t2
)
218 return !EqImpl (t1
, t2
);
225 /// <param name="ch"></param>
226 /// <returns></returns>
227 public static ILToken
GetPunctuation (int ch
)
229 int id
= "{}[](),:;=*&+/!<>".IndexOf ((char) ch
);
233 res
= punctuations
[id
];