view trunk/src/Lexer.d @ 0:8ba2570de175

Initial import.
author aziz
date Mon, 28 May 2007 19:03:02 +0000
parents
children f3cd3bfde4ba
line wrap: on
line source

/++
  Author: Aziz Köksal
  License: GPL2
+/
module Lexer;

/// ASCII character properties table.
static const int ptable[256];

enum CProperty
{
       Octal = 1
       Digit = 1<<1,
         Hex = 1<<2,
       Alpha = 1<<3,
  Identifier = 1<<4
}

int isoctal(char c) { return ptable[c] & CProperty.Octal; }
int isdigit(char c) { return ptable[c] & CProperty.Digit; }
int ishexad(char c) { return ptable[c] & CProperty.Hex; }
int isalpha(char c) { return ptable[c] & CProperty.Alpha; }
int isalnum(char c) { return ptable[c] & (CProperty.Alpha | CProperty.Digit); }
int isident(char c) { return ptable[c] & CProperty.Identifier; }

static this()
{
  for (int i; i < ptable.length; ++i)
  {
    if ('0' <= i && i <= '7')
      ptable[i] |= CProperty.Octal;
    if ('0' <= i && i <= '9')
      ptable[i] |= CProperty.Digit;
    if (isdigit(i) || 'a' <= i && i <= 'f' || 'A' <= i && i <= 'F')
      ptable[i] |= CProperty.Hex;
    if ('a' <= i && i <= 'z' || 'A' <= i && i <= 'Z')
      ptable[i] |= CProperty.Alpha;
    if (isalnum(i) || i == '_')
      ptable[i] |= Property.Identifier;
  }
}

class Lexer
{

}