1 /*
2  * [The "BSD licence"]
3  * Copyright (c) 2005-2008 Terence Parr
4  * All rights reserved.
5  *
6  * Conversion to C#:
7  * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc.
8  * All rights reserved.
9  *
10  * Redistribution and use in source and binary forms, with or without
11  * modification, are permitted provided that the following conditions
12  * are met:
13  * 1. Redistributions of source code must retain the above copyright
14  *    notice, this list of conditions and the following disclaimer.
15  * 2. Redistributions in binary form must reproduce the above copyright
16  *    notice, this list of conditions and the following disclaimer in the
17  *    documentation and/or other materials provided with the distribution.
18  * 3. The name of the author may not be used to endorse or promote products
19  *    derived from this software without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
22  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
23  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
24  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
25  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
26  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
30  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32 
33 namespace Antlr.Runtime
34 {
35     using System.Collections.Generic;
36     using Exception = System.Exception;
37     using SerializationInfo = System.Runtime.Serialization.SerializationInfo;
38     using StreamingContext = System.Runtime.Serialization.StreamingContext;
39 
40     /** <summary>
41      *  We were expecting a token but it's not found.  The current token
42      *  is actually what we wanted next.  Used for tree node errors too.
43      *  </summary>
44      */
45     [System.Serializable]
46     public class MissingTokenException : MismatchedTokenException
47     {
48         private readonly object _inserted;
49 
MissingTokenException()50         public MissingTokenException()
51         {
52         }
53 
MissingTokenException(string message)54         public MissingTokenException(string message)
55             : base(message)
56         {
57         }
58 
MissingTokenException(string message, Exception innerException)59         public MissingTokenException(string message, Exception innerException)
60             : base(message, innerException)
61         {
62         }
63 
MissingTokenException(int expecting, IIntStream input, object inserted)64         public MissingTokenException(int expecting, IIntStream input, object inserted)
65             : this(expecting, input, inserted, null)
66         {
67         }
68 
MissingTokenException(int expecting, IIntStream input, object inserted, IList<string> tokenNames)69         public MissingTokenException(int expecting, IIntStream input, object inserted, IList<string> tokenNames)
70             : base(expecting, input, tokenNames)
71         {
72             this._inserted = inserted;
73         }
74 
MissingTokenException(string message, int expecting, IIntStream input, object inserted, IList<string> tokenNames)75         public MissingTokenException(string message, int expecting, IIntStream input, object inserted, IList<string> tokenNames)
76             : base(message, expecting, input, tokenNames)
77         {
78             this._inserted = inserted;
79         }
80 
MissingTokenException(string message, int expecting, IIntStream input, object inserted, IList<string> tokenNames, Exception innerException)81         public MissingTokenException(string message, int expecting, IIntStream input, object inserted, IList<string> tokenNames, Exception innerException)
82             : base(message, expecting, input, tokenNames, innerException)
83         {
84             this._inserted = inserted;
85         }
86 
MissingTokenException(SerializationInfo info, StreamingContext context)87         protected MissingTokenException(SerializationInfo info, StreamingContext context)
88             : base(info, context)
89         {
90         }
91 
92         public virtual int MissingType
93         {
94             get
95             {
96                 return Expecting;
97             }
98         }
99 
ToString()100         public override string ToString()
101         {
102             if (_inserted != null && Token != null)
103             {
104                 return "MissingTokenException(inserted " + _inserted + " at " + Token.Text + ")";
105             }
106             if (Token != null)
107             {
108                 return "MissingTokenException(at " + Token.Text + ")";
109             }
110             return "MissingTokenException";
111         }
112     }
113 }
114