/*
* Copyright (c) 2007 The Akuma Project
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to
* deal in the Software without restriction, including without limitation the
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
* sell copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*
* $Id: lexer.lxi 67 2007-04-24 21:10:44Z asmodai $
*/
/*
* AUTOMATICALLY GENERATED BY lexi VERSION 1.2
*/
/* LOOKUP TABLE */
static unsigned char lookup_tab[257] = {
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0001, 0x0001, 0x0000, 0x0000, 0x0001, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c,
0x000c, 0x000c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a,
0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a,
0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a,
0x000a, 0x000a, 0x000a, 0x0000, 0x0000, 0x0000, 0x0000, 0x000a,
0x0000, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a,
0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a,
0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a,
0x000a, 0x000a, 0x000a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000
};
#ifndef LEX_EOF
#define LEX_EOF 256
#endif
#define lookup_char(C) ((int)lookup_tab[(C)])
#define is_white(T) ((T) & 0x0001)
#define is_alpha(T) ((T) & 0x0002)
#define is_digit(T) ((T) & 0x0004)
#define is_alphanum(T) ((T) & 0x0008)
/* MAIN PASS ANALYSER */
int
read_token(void)
{
start: {
int c0 = read_char(), t0;
t0 = lookup_char(c0);
if (is_white(t0)) goto start;
switch (c0) {
case '"': {
return(get_string(c0));
}
case '$': {
int c1 = read_char(), t1;
t1 = lookup_char(c1);
if (is_alpha(t1)) {
return(get_sid_ident(c0, c1));
}
unread_char(c1);
break;
}
case '(': {
return(lex_open);
}
case ')': {
return(lex_close);
}
case '+': {
return(lex_plus);
}
case '-': {
int c1 = read_char();
if (c1 == '>') {
return(lex_arrow);
}
unread_char(c1);
break;
}
case '/': {
int c1 = read_char();
if (c1 == '*') {
return(get_comment(c0, c1));
}
unread_char(c1);
break;
}
case ';': {
return(lex_semicolon);
}
case '=': {
return(lex_equal);
}
case '{': {
int c1 = read_char();
if (c1 == '0') {
int c2 = read_char();
if (c2 == '-') {
int c3 = read_char();
if (c3 == '9') {
int c4 = read_char();
if (c4 == '}') {
return(lex_digit);
}
unread_char(c4);
}
unread_char(c3);
}
unread_char(c2);
} else if (c1 == 'A') {
int c2 = read_char();
if (c2 == '-') {
int c3 = read_char();
if (c3 == 'Z') {
int c4 = read_char();
if (c4 == '}') {
return(lex_upper);
}
unread_char(c4);
}
unread_char(c3);
}
unread_char(c2);
} else if (c1 == 'a') {
int c2 = read_char();
if (c2 == '-') {
int c3 = read_char();
if (c3 == 'z') {
int c4 = read_char();
if (c4 == '}') {
return(lex_lower);
}
unread_char(c4);
}
unread_char(c3);
}
unread_char(c2);
}
unread_char(c1);
return(lex_open_Hbrace);
}
case '}': {
return(lex_close_Hbrace);
}
case LEX_EOF: {
return(lex_eof);
}
}
if (is_alpha(t0)) {
return(get_identifier(c0));
}
return(unknown_token(c0));
}
}
syntax highlighted by Code2HTML, v. 0.9.1