namespace NTERA.Interpreter.Compiler { public enum Token { Unknown = 0, Identifer, Value, [LexerCharacter('#', LexerType.Real)] Sharp, [LexerCharacter('@', LexerType.Real)] Function, [LexerKeyword("DIM")] Dim, [LexerKeyword("DIMS")] Dims, [LexerKeyword("CONST")] Const, [LexerKeyword("REF")] Ref, [LexerKeyword("DYNAMIC")] Dynamic, [LexerKeyword("FUNCTION")] [LexerKeyword("FUNCTIONS")] ReturnFunction, [LexerCharacter('\n', LexerType.Both)] NewLine, [LexerCharacter(':', LexerType.Real)] Colon, [LexerCharacter(',', LexerType.Real)] Comma, [LexerCharacter('{', LexerType.Both)] OpenBracket, [LexerCharacter('}', LexerType.Both)] CloseBracket, Format, Modulo, Plus, Increment, Minus, Decrement, [LexerCharacter('/', LexerType.Real)] Slash, [LexerCharacter('*', LexerType.Real)] Asterisk, [LexerCharacter('^', LexerType.Real)] Caret, Equal, Less, More, NotEqual, LessEqual, MoreEqual, Or, And, [LexerCharacter('!', LexerType.Real)] Not, [LexerCharacter('(', LexerType.Real)] LParen, [LexerCharacter(')', LexerType.Real)] RParen, EOF = -1 //End Of File } public static class TokenEnumExtensions { public static bool IsUnary(this Token token) { return token == Token.Plus || token == Token.Minus || token == Token.Not; } public static bool IsArithmetic(this Token token) { return token == Token.Plus || token == Token.Minus || token == Token.Slash || token == Token.Asterisk || token == Token.Modulo || 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; } public static bool IsStringOp(this Token token) { return token == Token.Plus; } } }