1 19 20 package org.netbeans.lib.lexer.test.simple; 21 22 import org.netbeans.api.lexer.Token; 23 import org.netbeans.spi.lexer.Lexer; 24 import org.netbeans.spi.lexer.LexerInput; 25 import org.netbeans.spi.lexer.LexerRestartInfo; 26 import org.netbeans.spi.lexer.TokenFactory; 27 28 33 final class SimplePlainLexer implements Lexer<SimplePlainTokenId> { 34 35 private static final int EOF = LexerInput.EOF; 37 38 private static final int INIT = 0; 39 private static final int IN_WORD = 1; 40 private static final int IN_WHITESPACE = 2; 41 42 43 private LexerInput input; 44 45 private TokenFactory<SimplePlainTokenId> tokenFactory; 46 47 private int state = INIT; 48 49 SimplePlainLexer(LexerRestartInfo<SimplePlainTokenId> info) { 50 this.input = info.input(); 51 this.tokenFactory = info.tokenFactory(); 52 assert (info.state() == null); 53 } 54 55 public Token<SimplePlainTokenId> nextToken() { 56 while (true) { 57 int ch = input.read(); 58 switch (state) { 59 case INIT: 60 if (ch == EOF) { 61 return null; 62 } else if (Character.isWhitespace((char)ch)) { state = IN_WHITESPACE; 64 } else { state = IN_WORD; 66 } 67 break; 68 69 case IN_WORD: 70 while (true) { 71 if (ch == EOF || Character.isWhitespace((char)ch)) { 72 if (ch != EOF) { input.backup(1); 74 } 75 state = INIT; 76 return tokenFactory.createToken(SimplePlainTokenId.WORD); 77 } 78 ch = input.read(); 79 } 80 82 case IN_WHITESPACE: 83 while (true) { 84 if (ch == EOF || !Character.isWhitespace((char)ch)) { 85 if (ch != EOF) { input.backup(1); 87 } 88 state = INIT; 89 return tokenFactory.createToken(SimplePlainTokenId.WHITESPACE); 90 } 91 ch = input.read(); 92 } 93 95 default: 96 throw new IllegalStateException (); 97 } 98 } 99 } 100 101 public Object state() { 102 return null; } 104 105 public void release() { 106 } 107 108 } 109 | Popular Tags |