LLkParser.java
上传用户:afrynkmhm
上传日期:2007-01-06
资源大小:1262k
文件大小:2k
源码类别:

编译器/解释器

开发平台:

Others

  1. package antlr;
  2. /* ANTLR Translator Generator
  3.  * Project led by Terence Parr at http://www.jGuru.com
  4.  * Software rights: http://www.antlr.org/RIGHTS.html
  5.  *
  6.  * $Id: //depot/code/org.antlr/release/antlr-2.7.0/antlr/LLkParser.java#1 $
  7.  */
  8. import java.io.IOException;
  9. /**An LL(k) parser.
  10.  *
  11.  * @see antlr.Token
  12.  * @see antlr.TokenBuffer
  13.  * @see antlr.LL1Parser
  14.  */
  15. public class LLkParser extends Parser {
  16. int k;
  17. public LLkParser(int k_) {
  18. k = k_;
  19. //TokenBuffer tokenBuf = new TokenBuffer(null);
  20. //setTokenBuffer(tokenBuf);
  21. }
  22. public LLkParser(ParserSharedInputState state, int k_) {
  23. k = k_;
  24. inputState = state;
  25. }
  26. public LLkParser(TokenBuffer tokenBuf, int k_) {
  27. k = k_;
  28. setTokenBuffer(tokenBuf);
  29. }
  30. public LLkParser(TokenStream lexer, int k_) {
  31. k = k_;
  32. TokenBuffer tokenBuf = new TokenBuffer(lexer);
  33. setTokenBuffer(tokenBuf);
  34. }
  35. /**Consume another token from the input stream.  Can only write sequentially!
  36.  * If you need 3 tokens ahead, you must consume() 3 times.
  37.  * <p>
  38.  * Note that it is possible to overwrite tokens that have not been matched.
  39.  * For example, calling consume() 3 times when k=2, means that the first token
  40.  * consumed will be overwritten with the 3rd.
  41.  */
  42. public void consume() {
  43. inputState.input.consume();
  44. }
  45. public int LA(int i) throws TokenStreamException {
  46. return inputState.input.LA(i);
  47. }
  48. public Token LT(int i) throws TokenStreamException {
  49. return inputState.input.LT(i);
  50. }
  51. private void trace(String ee, String rname) throws TokenStreamException {
  52. System.out.print(ee + rname + ((inputState.guessing>0)?"; [guessing]":"; "));
  53. for (int i = 1; i <= k; i++)
  54. {
  55. if (i != 1) {
  56. System.out.print(", ");
  57. }
  58. System.out.print("LA(" + i + ")==" + LT(i).getText());
  59. }
  60. System.out.println("");
  61. }
  62. public void traceIn(String rname) throws TokenStreamException {
  63. trace("enter ", rname);
  64. }
  65. public void traceOut(String rname) throws TokenStreamException {
  66. trace("exit ", rname);
  67. }
  68. }