You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
2.3 KiB
85 lines
2.3 KiB
package com.fr.third.antlr; |
|
|
|
/* ANTLR Translator Generator |
|
* Project led by Terence Parr at http://www.cs.usfca.edu |
|
* Software rights: http://www.antlr.org/license.html |
|
* |
|
* $Id: //depot/code/org.antlr/release/antlr-2.7.7/antlr/LLkParser.java#2 $ |
|
*/ |
|
|
|
|
|
|
|
/**An LL(k) parser. |
|
* |
|
* @see com.fr.third.antlr.Token |
|
* @see com.fr.third.antlr.TokenBuffer |
|
*/ |
|
public class LLkParser extends Parser { |
|
int k; |
|
|
|
public LLkParser(int k_) { |
|
k = k_; |
|
} |
|
|
|
public LLkParser(ParserSharedInputState state, int k_) { |
|
super(state); |
|
k = k_; |
|
} |
|
|
|
public LLkParser(TokenBuffer tokenBuf, int k_) { |
|
k = k_; |
|
setTokenBuffer(tokenBuf); |
|
} |
|
|
|
public LLkParser(TokenStream lexer, int k_) { |
|
k = k_; |
|
TokenBuffer tokenBuf = new TokenBuffer(lexer); |
|
setTokenBuffer(tokenBuf); |
|
} |
|
|
|
/**Consume another token from the input stream. Can only write sequentially! |
|
* If you need 3 tokens ahead, you must consume() 3 times. |
|
* <p> |
|
* Note that it is possible to overwrite tokens that have not been matched. |
|
* For example, calling consume() 3 times when k=2, means that the first token |
|
* consumed will be overwritten with the 3rd. |
|
*/ |
|
public void consume() throws TokenStreamException { |
|
inputState.input.consume(); |
|
} |
|
|
|
public int LA(int i) throws TokenStreamException { |
|
return inputState.input.LA(i); |
|
} |
|
|
|
public Token LT(int i) throws TokenStreamException { |
|
return inputState.input.LT(i); |
|
} |
|
|
|
private void trace(String ee, String rname) throws TokenStreamException { |
|
traceIndent(); |
|
System.out.print(ee + rname + ((inputState.guessing > 0)?"; [guessing]":"; ")); |
|
for (int i = 1; i <= k; i++) { |
|
if (i != 1) { |
|
System.out.print(", "); |
|
} |
|
if ( LT(i)!=null ) { |
|
System.out.print("LA(" + i + ")==" + LT(i).getText()); |
|
} |
|
else { |
|
System.out.print("LA(" + i + ")==null"); |
|
} |
|
} |
|
System.out.println(""); |
|
} |
|
|
|
public void traceIn(String rname) throws TokenStreamException { |
|
traceDepth += 1; |
|
trace("> ", rname); |
|
} |
|
|
|
public void traceOut(String rname) throws TokenStreamException { |
|
trace("< ", rname); |
|
traceDepth -= 1; |
|
} |
|
}
|
|
|