namespace NTERA.Interpreter { public enum Token { Unkown, Identifer, Value, [LexerCharacter('#')] Global, [LexerCharacter('@')] Function, [LexerKeyword("DIM")] Dim, [LexerKeyword("CONST")] Const, //Eralang print keywords [LexerKeyword("DRAWLINE", false)] DrawLine, [LexerKeyword("DRAWLINEFORM", true)] DrawLineForm, [LexerKeyword("PRINT", true)] Print, [LexerKeyword("PRINTL", true)] PrintL, [LexerKeyword("PRINTFORM", true)] PrintForm, [LexerKeyword("PRINTFORML", true)] PrintFormL, [LexerKeyword("PRINT_IMG", true)] PrintImg, [LexerKeyword("PRINTBUTTON", true)] PrintButton, //Eralang arithmetic keywords [LexerKeyword("TIMES")] Times, //Standard BASIC keywords [LexerKeyword("IF")] If, [LexerKeyword("ENDIF")] EndIf, [LexerKeyword("THEN")] Then, [LexerKeyword("ELSE")] Else, [LexerKeyword("FOR")] For, [LexerKeyword("TO")] To, [LexerKeyword("NEXT")] Next, [LexerKeyword("INPUT")] Input, [LexerKeyword("LET")] Let, [LexerKeyword("GOSUB")] Gosub, [LexerKeyword("RETURN")] Return, [LexerKeyword("REM")] Rem, [LexerKeyword("END")] End, [LexerCharacter('\n')] NewLine, [LexerCharacter(':')] Colon, [LexerCharacter(';')] Semicolon, [LexerCharacter(',')] Comma, [LexerCharacter('+')] Plus, [LexerCharacter('-')] Minus, [LexerCharacter('/')] Slash, [LexerCharacter('*')] Asterisk, [LexerCharacter('^')] Caret, [LexerCharacter('=')] Equal, Less, More, NotEqual, LessEqual, MoreEqual, [LexerKeyword("OR")] [LexerCharacter('|')] Or, [LexerKeyword("AND")] [LexerCharacter('&')] And, [LexerCharacter('!')] Not, [LexerCharacter('(')] LParen, [LexerCharacter(')')] RParen, EOF = -1 //End Of File } public static class TokenEnumExtensions { public static bool IsUnary(this Token token) { return token == Token.Plus || token == Token.Minus; } public static bool IsArithmetic(this Token token) { return token == Token.Plus || token == Token.Minus || token == Token.Slash || token == Token.Asterisk || token == Token.Caret || token == Token.Equal || token == Token.NotEqual || token == Token.Less || token == Token.LessEqual || token == Token.More || token == Token.MoreEqual || token == Token.Or || token == Token.And || token == Token.Not; } } }