00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 package org.antlr.runtime.tree;
00029
00030 public class TreePatternLexer {
00031 public static final int EOF = -1;
00032 public static final int BEGIN = 1;
00033 public static final int END = 2;
00034 public static final int ID = 3;
00035 public static final int ARG = 4;
00036 public static final int PERCENT = 5;
00037 public static final int COLON = 6;
00038 public static final int DOT = 7;
00039
00041 protected String pattern;
00042
00044 protected int p = -1;
00045
00047 protected int c;
00048
00050 protected int n;
00051
00053 public StringBuffer sval = new StringBuffer();
00054
00055 public boolean error = false;
00056
00057 public TreePatternLexer(String pattern) {
00058 this.pattern = pattern;
00059 this.n = pattern.length();
00060 consume();
00061 }
00062
00063 public int nextToken() {
00064 sval.setLength(0);
00065 while ( c != EOF ) {
00066 if ( c==' ' || c=='\n' || c=='\r' || c=='\t' ) {
00067 consume();
00068 continue;
00069 }
00070 if ( (c>='a' && c<='z') || (c>='A' && c<='Z') || c=='_' ) {
00071 sval.append((char)c);
00072 consume();
00073 while ( (c>='a' && c<='z') || (c>='A' && c<='Z') ||
00074 (c>='0' && c<='9') || c=='_' )
00075 {
00076 sval.append((char)c);
00077 consume();
00078 }
00079 return ID;
00080 }
00081 if ( c=='(' ) {
00082 consume();
00083 return BEGIN;
00084 }
00085 if ( c==')' ) {
00086 consume();
00087 return END;
00088 }
00089 if ( c=='%' ) {
00090 consume();
00091 return PERCENT;
00092 }
00093 if ( c==':' ) {
00094 consume();
00095 return COLON;
00096 }
00097 if ( c=='.' ) {
00098 consume();
00099 return DOT;
00100 }
00101 if ( c=='[' ) {
00102 consume();
00103 while ( c!=']' ) {
00104 if ( c=='\\' ) {
00105 consume();
00106 if ( c!=']' ) {
00107 sval.append('\\');
00108 }
00109 sval.append((char)c);
00110 }
00111 else {
00112 sval.append((char)c);
00113 }
00114 consume();
00115 }
00116 consume();
00117 return ARG;
00118 }
00119 consume();
00120 error = true;
00121 return EOF;
00122 }
00123 return EOF;
00124 }
00125
00126 protected void consume() {
00127 p++;
00128 if ( p>=n ) {
00129 c = EOF;
00130 }
00131 else {
00132 c = pattern.charAt(p);
00133 }
00134 }
00135 }