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     public static class TokenChannels
36     {
37         /** <summary>
38          *  All tokens go to the parser (unless skip() is called in that rule)
39          *  on a particular "channel".  The parser tunes to a particular channel
40          *  so that whitespace etc... can go to the parser on a "hidden" channel.
41          *  </summary>
42          */
43         public const int Default = 0;
44 
45         /** <summary>
46          *  Anything on different channel than DEFAULT_CHANNEL is not parsed
47          *  by parser.
48          *  </summary>
49          */
50         public const int Hidden = 99;
51     }
52 
53     public static class TokenTypes
54     {
55         public const int EndOfFile = (int)CharStreamConstants.EndOfFile;
56         public const int Invalid = 0;
57         public const int EndOfRule = 1;
58         /** <summary>imaginary tree navigation type; traverse "get child" link</summary> */
59         public const int Down = 2;
60         /** <summary>imaginary tree navigation type; finish with a child list</summary> */
61         public const int Up = 3;
62         public const int Min = Up + 1;
63     }
64 
65     public static class Tokens
66     {
67         public static readonly IToken EndOfFile = Tokens<CommonToken>.EndOfFile;
68 
69         public static readonly IToken Invalid = new CommonToken( TokenTypes.Invalid );
70 
71         /** <summary>
72          *  In an action, a lexer rule can set token to this SKIP_TOKEN and ANTLR
73          *  will avoid creating a token for this symbol and try to fetch another.
74          *  </summary>
75          */
76         public static readonly IToken Skip = new CommonToken( TokenTypes.Invalid );
77     }
78 
79     public static class Tokens<T>
80         where T : IToken, new()
81     {
82         public static readonly T EndOfFile = new T()
83         {
84             Type = TokenTypes.EndOfFile
85         };
86 
87         public static readonly T Invalid = new T()
88         {
89             Type = TokenTypes.Invalid
90         };
91 
92         public static readonly T Skip = new T()
93         {
94             Type = TokenTypes.Invalid
95         };
96     }
97 }
98