in java/com/googlecode/prolog_cafe/lang/Token.java [72:171]
public static int read_token(StringBuffer s, PushbackReader in)
throws IOException {
int c, c1;
int rc;
c = in.read(); // get 1st. char
if(c == -1) {
s.append("end_of_file");
return -1;
}
if (Character.isDigit((char)c)) {
rc = read_number(c, s, in);
if (rc == 1)
rc = 'I';
else if (rc == 2)
rc = 'D';
return rc;
}
if (Character.isLowerCase((char)c)) {
rc = read_word(c, s, in);
if (rc > 0)
rc = 'A';
return rc;
}
if (Character.isUpperCase((char) c) || c == '_') {
rc = read_word(c, s, in);
if (rc > 0)
rc = 'V';
return rc;
}
switch (c) {
case '(':
case ')':
case '[':
case ']':
case '{':
case '}':
case ',':
case '|':
s.append((char)c);
return c;
case '.': /* full stop or symbol */
c1 = in.read();
if (c1 == -1 || c1 <= ' ') {
s.append(".");
return '.';
}
in.unread(c1);
break;
case '%': /* one line comment */
s.append(" ");
while ((c1 = in.read()) != '\n') {
if (c1 == -1)
return ' ';
}
return ' ';
case '/': /* start of comment or symbol */
if ((c1 = in.read()) == '*') {
s.append(" ");
while (true) {
while ((c1 = in.read()) != '*') {
if(c1 == -1) {
s.append("unexpected end_of_file");
return -2;
}
}
if ((c1 = in.read()) == '/')
return ' ';
in.unread(c1);
}
}
in.unread(c1);
break;
case '\'':
rc = read_quoted(c, s, in);
if (rc > 0)
rc = 'A';
return rc;
case '"':
rc = read_quoted(c, s, in);
if (rc > 0)
rc = 'S';
return rc;
default:
break;
}
if (isSolo(c)) {
s.append((char)c);
return 'A';
}
if (isSymbol(c)) {
rc = read_symbol(c, s, in);
if (rc > 0)
rc = 'A';
return rc;
}
s.append(" ");
return ' ';
}