1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
|
// Generated by re2java
// re2java $INPUT -o $OUTPUT
class Main {
// Expects a null-terminated string.
static int lex(String yyinput) {
int yycursor = 0;
int yymarker = 0;
int yylimit = yyinput.length() - 1; // yylimit points at the terminating null
int count = 0;
loop: while (true) {
{
char yych = 0;
int yystate = 0;
yyl: while (true) {
switch (yystate) {
case 0:
yych = yyinput.charAt(yycursor);
switch (yych) {
case 0x20:
yycursor += 1;
yystate = 3;
continue yyl;
case 0x27:
yycursor += 1;
yystate = 5;
continue yyl;
default:
if (yylimit <= yycursor) {
yystate = 10;
continue yyl;
}
yycursor += 1;
yystate = 1;
continue yyl;
}
case 1:
yystate = 2;
continue yyl;
case 2:
{ return -1; }
case 3:
yych = yyinput.charAt(yycursor);
switch (yych) {
case 0x20:
yycursor += 1;
yystate = 3;
continue yyl;
default:
yystate = 4;
continue yyl;
}
case 4:
{ continue loop; }
case 5:
yymarker = yycursor;
yych = yyinput.charAt(yycursor);
if (yych >= 0x01) {
yystate = 7;
continue yyl;
}
if (yylimit <= yycursor) {
yystate = 2;
continue yyl;
}
yycursor += 1;
yystate = 6;
continue yyl;
case 6:
yych = yyinput.charAt(yycursor);
yystate = 7;
continue yyl;
case 7:
switch (yych) {
case 0x27:
yycursor += 1;
yystate = 8;
continue yyl;
case 0x5C:
yycursor += 1;
yystate = 9;
continue yyl;
default:
if (yylimit <= yycursor) {
yystate = 11;
continue yyl;
}
yycursor += 1;
yystate = 6;
continue yyl;
}
case 8:
{ count += 1; continue loop; }
case 9:
yych = yyinput.charAt(yycursor);
if (yych <= 0x00) {
if (yylimit <= yycursor) {
yystate = 11;
continue yyl;
}
yycursor += 1;
yystate = 6;
continue yyl;
}
yycursor += 1;
yystate = 6;
continue yyl;
case 10:
{ return count; }
case 11:
yycursor = yymarker;
yystate = 2;
continue yyl;
default:
throw new IllegalStateException("internal lexer error");
}
}
}
}
}
public static void main(String []args) {
assert lex("\0") == 0;
assert lex("'qu\0tes' 'are' 'fine: \\'' \0") == 3;
assert lex("'unterminated\\'\0") == -1;
}
};
|