Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Tokens {
- static template makeTokenType(string ident, string category, string match = null) {
- const char[] makeTokenType =
- "static immutable TokenType " ~ ident ~ ";" ~
- "static this() {" ~
- " " ~ ident ~ " = cast(immutable) TokenType(TokenCategory." ~ category ~ ", \"" ~ ident ~ "\"" ~ (match ? ", \"" ~ match ~ "\"" : "") ~ ");" ~
- "}";
- }
- static TokenType[string] keywords;
- static TokenType[string] operators;
- /* Identifiers */
- mixin(makeTokenType!("IDENTIFIER", "IDENTIFIER"));
- /* Keywords */
- mixin(makeTokenType!("LOCAL", "KEYWORD", "local"));
- mixin(makeTokenType!("FUNCTION", "KEYWORD", "function"));
- mixin(makeTokenType!("IF", "KEYWORD", "if"));
- mixin(makeTokenType!("ELSE", "KEYWORD", "else"));
- mixin(makeTokenType!("WHILE", "KEYWORD", "while"));
- mixin(makeTokenType!("BREAK", "KEYWORD", "break"));
- mixin(makeTokenType!("RETURN", "KEYWORD", "return"));
- mixin(makeTokenType!("FOR", "KEYWORD", "for"));
- mixin(makeTokenType!("TRUE", "KEYWORD", "true"));
- mixin(makeTokenType!("FALSE", "KEYWORD", "false"));
- /* Operators */
- mixin(makeTokenType!("PLUS", "OPERATOR", "+"));
- mixin(makeTokenType!("ASTERISK", "OPERATOR", "*"));
- mixin(makeTokenType!("DASH", "OPERATOR", "-"));
- mixin(makeTokenType!("FSLASH", "OPERATOR", "/"));
- mixin(makeTokenType!("EQUALS", "OPERATOR", "="));
- mixin(makeTokenType!("EQUALS_EQUALS", "OPERATOR", "=="));
- mixin(makeTokenType!("LT", "OPERATOR", "<"));
- mixin(makeTokenType!("LTE", "OPERATOR", "<="));
- mixin(makeTokenType!("GT", "OPERATOR", ">"));
- mixin(makeTokenType!("GTE", "OPERATOR", ">="));
- mixin(makeTokenType!("INEQUAL", "OPERATOR", "!="));
- mixin(makeTokenType!("LBRACE", "OPERATOR", "{"));
- mixin(makeTokenType!("RBRACE", "OPERATOR", "}"));
- mixin(makeTokenType!("LPAREN", "OPERATOR", "("));
- mixin(makeTokenType!("RPAREN", "OPERATOR", ")"));
- mixin(makeTokenType!("NOT", "OPERATOR", "!"));
- /* Literals */
- mixin(makeTokenType!("NUMBER", "LITERAL"));
- mixin(makeTokenType!("STRING", "LITERAL"));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement