Token.cs 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. 
  2. namespace NTERA.Interpreter
  3. {
  4. public enum Token
  5. {
  6. Unknown = 0,
  7. Identifer,
  8. Value,
  9. [LexerCharacter('#', LexerType.Real)]
  10. Global,
  11. [LexerCharacter('@', LexerType.Real)]
  12. Function,
  13. [LexerKeyword("DIM")]
  14. Dim,
  15. [LexerKeyword("CONST")]
  16. Const,
  17. //Eralang print keywords
  18. [LexerKeyword("DRAWLINE", false)]
  19. DrawLine,
  20. [LexerKeyword("CUSTOMDRAWLINE", true)]
  21. CustomDrawLine,
  22. [LexerKeyword("DRAWLINEFORM", true)]
  23. DrawLineForm,
  24. [LexerKeyword("PRINT", true)]
  25. Print,
  26. [LexerKeyword("PRINTL", true)]
  27. PrintL,
  28. [LexerKeyword("PRINTFORM", true)]
  29. PrintForm,
  30. [LexerKeyword("PRINTFORML", true)]
  31. PrintFormL,
  32. [LexerKeyword("HTML_PRINT", true)]
  33. PrintHtml,
  34. [LexerKeyword("PRINT_IMG", true)]
  35. PrintImg,
  36. [LexerKeyword("PRINTBUTTON", false)]
  37. PrintButton,
  38. [LexerKeyword("ALIGNMENT", true)]
  39. Alignment,
  40. [LexerKeyword("SETCOLOR", false)]
  41. SetColor,
  42. [LexerKeyword("RESETCOLOR", false)]
  43. ResetColor,
  44. //Eralang arithmetic keywords
  45. [LexerKeyword("TIMES")]
  46. Times,
  47. //Standard BASIC keywords
  48. [LexerKeyword("IF")]
  49. If,
  50. [LexerKeyword("ENDIF")]
  51. EndIf,
  52. [LexerKeyword("THEN")]
  53. Then,
  54. [LexerKeyword("ELSE")]
  55. Else,
  56. [LexerKeyword("FOR")]
  57. For,
  58. [LexerKeyword("TO")]
  59. To,
  60. [LexerKeyword("NEXT")]
  61. Next,
  62. [LexerKeyword("INPUT")]
  63. Input,
  64. [LexerKeyword("LET")]
  65. Let,
  66. [LexerKeyword("GOSUB")]
  67. Gosub,
  68. [LexerKeyword("RETURN")]
  69. Return,
  70. [LexerKeyword("REM")]
  71. Rem,
  72. [LexerKeyword("END")]
  73. End,
  74. [LexerCharacter('\n', LexerType.Both)]
  75. NewLine,
  76. [LexerCharacter(':', LexerType.Real)]
  77. Colon,
  78. [LexerCharacter(',', LexerType.Both)]
  79. Comma,
  80. Plus,
  81. Append,
  82. [LexerCharacter('-', LexerType.Real)]
  83. Minus,
  84. [LexerCharacter('/', LexerType.Real)]
  85. Slash,
  86. [LexerCharacter('*', LexerType.Real)]
  87. Asterisk,
  88. [LexerCharacter('^', LexerType.Real)]
  89. Caret,
  90. [LexerCharacter('=', LexerType.Real)]
  91. Equal,
  92. Less,
  93. More,
  94. NotEqual,
  95. LessEqual,
  96. MoreEqual,
  97. [LexerKeyword("OR")]
  98. [LexerCharacter('|', LexerType.Real)]
  99. Or,
  100. [LexerKeyword("AND")]
  101. [LexerCharacter('&', LexerType.Real)]
  102. And,
  103. [LexerCharacter('!', LexerType.Real)]
  104. Not,
  105. [LexerCharacter('(', LexerType.Real)]
  106. LParen,
  107. [LexerCharacter(')', LexerType.Real)]
  108. RParen,
  109. EOF = -1 //End Of File
  110. }
  111. public static class TokenEnumExtensions
  112. {
  113. public static bool IsUnary(this Token token)
  114. {
  115. return token == Token.Plus
  116. || token == Token.Minus;
  117. }
  118. public static bool IsArithmetic(this Token token)
  119. {
  120. return token == Token.Plus
  121. || token == Token.Minus
  122. || token == Token.Slash
  123. || token == Token.Asterisk
  124. || token == Token.Caret
  125. || token == Token.Equal
  126. || token == Token.NotEqual
  127. || token == Token.Less
  128. || token == Token.LessEqual
  129. || token == Token.More
  130. || token == Token.MoreEqual
  131. || token == Token.Or
  132. || token == Token.And
  133. || token == Token.Not;
  134. }
  135. public static bool IsStringOp(this Token token)
  136. {
  137. return token == Token.Plus;
  138. }
  139. }
  140. }