namespace NTERA.Interpreter { public enum Token { Unknown = 0, Identifer, Value, [LexerCharacter('#', LexerType.Real)] Sharp, [LexerCharacter('@', LexerType.Real)] Function, [LexerKeyword("DIM")] Dim, [LexerKeyword("CONST")] Const, [LexerKeyword("FUNCTION")] ReturnFunction, //Eralang print keywords [LexerKeyword("DRAWLINE", false)] DrawLine, [LexerKeyword("CUSTOMDRAWLINE", true)] CustomDrawLine, [LexerKeyword("DRAWLINEFORM", true)] DrawLineForm, [LexerKeyword("PRINT", true)] Print, [LexerKeyword("PRINTL", true)] PrintL, [LexerKeyword("PRINTFORM", true)] PrintForm, [LexerKeyword("PRINTFORML", true)] PrintFormL, [LexerKeyword("HTML_PRINT", true)] PrintHtml, [LexerKeyword("PRINT_IMG", true)] PrintImg, [LexerKeyword("PRINTBUTTON", false)] PrintButton, [LexerKeyword("ALIGNMENT", true)] Alignment, [LexerKeyword("SETCOLOR", false)] SetColor, [LexerKeyword("RESETCOLOR", false)] ResetColor, //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', LexerType.Both)] NewLine, [LexerCharacter(':', LexerType.Real)] Colon, [LexerCharacter(',', LexerType.Both)] Comma, Plus, Append, [LexerCharacter('-', LexerType.Real)] Minus, [LexerCharacter('/', LexerType.Real)] Slash, [LexerCharacter('*', LexerType.Real)] Asterisk, [LexerCharacter('^', LexerType.Real)] Caret, [LexerCharacter('=', LexerType.Real)] Equal, Less, More, NotEqual, LessEqual, MoreEqual, [LexerKeyword("OR")] [LexerCharacter('|', LexerType.Real)] Or, [LexerKeyword("AND")] [LexerCharacter('&', LexerType.Real)] 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; } 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; } public static bool IsStringOp(this Token token) { return token == Token.Plus; } } }