帆软使用的第三方框架。
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

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;
}
}