/* * 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)); } }