source: trunk/yao/share/antlr-2.7.7/lib/csharp/antlr.runtime/antlr/LLkParser.cs @ 1

Last change on this file since 1 was 1, checked in by lnalod, 15 years ago

Initial import of YAO sources

File size: 2.2 KB
Line 
1using System;
2       
3namespace antlr
4{
5        /*ANTLR Translator Generator
6        * Project led by Terence Parr at http://www.jGuru.com
7        * Software rights: http://www.antlr.org/license.html
8        *
9        * $Id:$
10        */
11
12        //
13        // ANTLR C# Code Generator by Micheal Jordan
14        //                            Kunle Odutola       : kunle UNDERSCORE odutola AT hotmail DOT com
15        //                            Anthony Oguntimehin
16        //
17        // With many thanks to Eric V. Smith from the ANTLR list.
18        //
19
20        /*An LL(k) parser.
21        *
22        * @see antlr.Token
23        * @see antlr.TokenBuffer
24        * @see antlr.LL1Parser
25        */
26        public class LLkParser : Parser
27        {
28                internal int k;
29               
30                public LLkParser(int k_)
31                {
32                        k = k_;
33                }
34                public LLkParser(ParserSharedInputState state, int k_)
35                {
36                        k = k_;
37                        inputState = state;
38                }
39                public LLkParser(TokenBuffer tokenBuf, int k_)
40                {
41                        k = k_;
42                        setTokenBuffer(tokenBuf);
43                }
44                public LLkParser(TokenStream lexer, int k_)
45                {
46                        k = k_;
47                        TokenBuffer tokenBuf = new TokenBuffer(lexer);
48                        setTokenBuffer(tokenBuf);
49                }
50                /*Consume another token from the input stream.  Can only write sequentially!
51                * If you need 3 tokens ahead, you must consume() 3 times.
52                * <p>
53                * Note that it is possible to overwrite tokens that have not been matched.
54                * For example, calling consume() 3 times when k=2, means that the first token
55                * consumed will be overwritten with the 3rd.
56                */
57                override public void  consume()
58                {
59                        inputState.input.consume();
60                }
61                override public int LA(int i)
62                {
63                        return inputState.input.LA(i);
64                }
65                override public IToken LT(int i)
66                {
67                        return inputState.input.LT(i);
68                }
69                private void  trace(string ee, string rname)
70                {
71                        traceIndent();
72                        Console.Out.Write(ee + rname + ((inputState.guessing > 0)?"; [guessing]":"; "));
73                         for (int i = 1; i <= k; i++)
74                        {
75                                if (i != 1)
76                                {
77                                        Console.Out.Write(", ");
78                                }
79                                if ( LT(i)!=null ) {
80                                        Console.Out.Write("LA(" + i + ")==" + LT(i).getText());
81                                }
82                                else 
83                                {
84                                        Console.Out.Write("LA(" + i + ")==ull");
85                                }
86                        }
87                        Console.Out.WriteLine("");
88                }
89                override public void  traceIn(string rname)
90                {
91                        traceDepth += 1;
92                        trace("> ", rname);
93                }
94                override public void  traceOut(string rname)
95                {
96                        trace("< ", rname);
97                        traceDepth -= 1;
98                }
99        }
100}
Note: See TracBrowser for help on using the repository browser.