Advertisement
Guest User

Untitled

a guest
Nov 16th, 2013
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
D 2.32 KB | None | 0 0
  1. class Tokens {
  2.     static template makeTokenType(string ident, string category, string match = null) {
  3.         const char[] makeTokenType =
  4.             "static immutable TokenType " ~ ident ~ ";" ~
  5.             "static this() {" ~
  6.             "    " ~ ident ~ " = cast(immutable) TokenType(TokenCategory." ~ category ~ ", \"" ~ ident ~ "\"" ~ (match ? ", \"" ~ match ~ "\"" : "") ~ ");" ~
  7.             "}";
  8.     }
  9.  
  10.     static TokenType[string] keywords;
  11.     static TokenType[string] operators;
  12.  
  13.     /* Identifiers */
  14.     mixin(makeTokenType!("IDENTIFIER",    "IDENTIFIER"));
  15.  
  16.     /* Keywords */
  17.     mixin(makeTokenType!("LOCAL",         "KEYWORD",  "local"));
  18.     mixin(makeTokenType!("FUNCTION",      "KEYWORD",  "function"));
  19.     mixin(makeTokenType!("IF",            "KEYWORD",  "if"));
  20.     mixin(makeTokenType!("ELSE",          "KEYWORD",  "else"));
  21.     mixin(makeTokenType!("WHILE",         "KEYWORD",  "while"));
  22.     mixin(makeTokenType!("BREAK",         "KEYWORD",  "break"));
  23.     mixin(makeTokenType!("RETURN",        "KEYWORD",  "return"));
  24.     mixin(makeTokenType!("FOR",           "KEYWORD",  "for"));
  25.     mixin(makeTokenType!("TRUE",          "KEYWORD",  "true"));
  26.     mixin(makeTokenType!("FALSE",         "KEYWORD",  "false"));
  27.  
  28.     /* Operators */
  29.     mixin(makeTokenType!("PLUS",          "OPERATOR", "+"));
  30.     mixin(makeTokenType!("ASTERISK",      "OPERATOR", "*"));
  31.     mixin(makeTokenType!("DASH",          "OPERATOR", "-"));
  32.     mixin(makeTokenType!("FSLASH",        "OPERATOR", "/"));
  33.     mixin(makeTokenType!("EQUALS",        "OPERATOR", "="));
  34.     mixin(makeTokenType!("EQUALS_EQUALS", "OPERATOR", "=="));
  35.     mixin(makeTokenType!("LT",            "OPERATOR", "<"));
  36.     mixin(makeTokenType!("LTE",           "OPERATOR", "<="));
  37.     mixin(makeTokenType!("GT",            "OPERATOR", ">"));
  38.     mixin(makeTokenType!("GTE",           "OPERATOR", ">="));
  39.     mixin(makeTokenType!("INEQUAL",       "OPERATOR", "!="));
  40.     mixin(makeTokenType!("LBRACE",        "OPERATOR", "{"));
  41.     mixin(makeTokenType!("RBRACE",        "OPERATOR", "}"));
  42.     mixin(makeTokenType!("LPAREN",        "OPERATOR", "("));
  43.     mixin(makeTokenType!("RPAREN",        "OPERATOR", ")"));
  44.     mixin(makeTokenType!("NOT",           "OPERATOR", "!"));
  45.  
  46.     /* Literals */
  47.     mixin(makeTokenType!("NUMBER",        "LITERAL"));
  48.     mixin(makeTokenType!("STRING",        "LITERAL"));
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement