/
Sapphire/bin/
Sapphire/db/
Sapphire/db/OLC_rooms/
Sapphire/db/abi/
Sapphire/db/em_src/
Sapphire/db/helps/
Sapphire/db/helps/emman/ifunc/
Sapphire/db/npcs/Tatt/
Sapphire/db/objects/Tatt/
Sapphire/db/q_data/
Sapphire/db/rooms/Tatt/
Sapphire/doc/
Sapphire/doc/em/
Sapphire/etc/
Sapphire/src/abic/
Sapphire/src/areacon/
Sapphire/src/client/
Sapphire/src/embc/
Sapphire/src/emi/
Sapphire/src/emi/test/
Sapphire/src/include/
Sapphire/src/sapphire/em/
Sapphire/src/tcon/
D         [0-9]
L         [a-zA-Z_]
H         [a-fA-F0-9]
E         [Ee][+-]?{D}+
FS        (f|F|l|L)
IS        (u|U|l|L)*

%{

/*
 * Copyright (C) 1995-1997 Christopher D. Granz
 *
 * This header may not be removed.
 *
 * Refer to the file "License" included in this package for further
 * information and before using any of the following.
 */

/*
 * (This lexer is based on an ANSI C lexer by Jeff Lee.)
 */

#include <stdio.h>

#include "emc.h"
#include "y.tab.h"

void count( );
void comment( );

int iLineNum = 0;

%}


%%


"/*"                      { count( ); comment( ); }

"info"                    { count( ); return( INFO ); }
"global"                  { count( ); return( GLOBAL ); }

"returned"                { count( ); return( RETURNED ); }

"int"                     { count( ); return( INT ); }
"float"                   { count( ); return( FLOAT ); }
"string"                  { count( ); return( STRING ); }
"object"                  { count( ); return( OBJECT ); }
"array"                   { count( ); return( ARRAY ); }

"if"                      { count( ); return( IF ); }
"else"                    { count( ); return( ELSE ); }
"do"                      { count( ); return( DO ); }
"while"                   { count( ); return( WHILE ); }
"for"                     { count( ); return( FOR ); }
"broken"                  { count( ); return( BROKEN ); }
"continued"               { count( ); return( CONTINUED ); }

"break"                   { count( ); return( BREAK ); }
"continue"                { count( ); return( CONTINUE ); }
"return"                  { count( ); return( RETURN ); }

{L}({L}|{D})*             { count( ); return( IDENTIFIER ); }

0[xX]{H}+{IS}?            { count( ); return( INT_CONSTANT ); }
0{D}+{IS}?                { count( ); return( INT_CONSTANT ); }
{D}+{IS}?                 { count( ); return( INT_CONSTANT ); }
'(\\.|[^\\'])+'           { count( ); return( INT_CONSTANT ); }

{D}+{E}{FS}?              { count( ); return( FLOAT_CONSTANT ); }
{D}*"."{D}+({E})?{FS}?    { count( ); return( FLOAT_CONSTANT ); }
{D}+"."{D}*({E})?{FS}?    { count( ); return( FLOAT_CONSTANT ); }

\"(\\.|[^\\"])*\"         { count( ); return( STRING_LITERAL ); }

"*="                      { count( ); return( MUL_ASSIGN ); }
"/="                      { count( ); return( DIV_ASSIGN ); }
"%="                      { count( ); return( MOD_ASSIGN ); }
"+="                      { count( ); return( ADD_ASSIGN ); }
"-="                      { count( ); return( SUB_ASSIGN ); }
">>="                     { count( ); return( LEFT_ASSIGN ); }
"<<="                     { count( ); return( RIGHT_ASSIGN ); }
"&="                      { count( ); return( AND_ASSIGN ); }
"^="                      { count( ); return( XOR_ASSIGN ); }
"|="                      { count( ); return( OR_ASSIGN ); }

"++"                      { count( ); return( INC_OP ); }
"--"                      { count( ); return( DEC_OP ); }
">>"                      { count( ); return( LEFT_OP ); }
"<<"                      { count( ); return( RIGHT_OP ); }
"&&"                      { count( ); return( AND_OP ); }
"||"                      { count( ); return( OR_OP ); }
"<="                      { count( ); return( LE_OP ); }
">="                      { count( ); return( GE_OP ); }
"=="                      { count( ); return( EQ_OP ); }
"!="                      { count( ); return( NE_OP ); }

"{"                       { count( ); return( '{' ); }
"}"                       { count( ); return( '}' ); }
"("                       { count( ); return( '(' ); }
")"                       { count( ); return( ')' ); }
"["                       { count( ); return( '[' ); }
"]"                       { count( ); return( ']' ); }

";"                       { count( ); return( ';' ); }
","                       { count( ); return( ',' ); }
"@"                       { count( ); return( '@' ); }
":"                       { count( ); return( ':' ); }
"?"                       { count( ); return( '?' ); }

"="                       { count( ); return( '=' ); }
"&"                       { count( ); return( '&' ); }
"!"                       { count( ); return( '!' ); }
"~"                       { count( ); return( '~' ); }
"-"                       { count( ); return( '-' ); }
"+"                       { count( ); return( '+' ); }
"*"                       { count( ); return( '*' ); }
"/"                       { count( ); return( '/' ); }
"%"                       { count( ); return( '%' ); }
"<"                       { count( ); return( '<' ); }
">"                       { count( ); return( '>' ); }
"^"                       { count( ); return( '^' ); }
"|"                       { count( ); return( '|' ); }

"\n"                      { count( ); iLineNum++; }
[ \t\v\r\f]               { count( ); /* Skip whitespace. */ }

.                         { /* We don't like bad characters :) */ }


%%


int yywrap( void )
{
    return( 1 );
}


void comment( void )
{
    char c, c1;

    for ( ; ; )
    {
        while ( ( c = input( ) ) != '*' && c != 0 );

        if ( ( c1 = input( ) ) != '/' && c != 0 )
            unput( c1 );
        else
            break;
    }
}


int column = 0;

void count( void )
{
    int i;

    for ( i = 0; yytext[i] != '\0'; i++ )
    {
        if ( yytext[i] == '\n' )
            column = 0;
        else if ( yytext[i] == '\t' )
            column += ( 8 - ( column % 8 ) );
        else
            column++;
    }

    fprintf( stderr, "%s", yytext );
}


/*
 * End of em.l
 */