Token.cs 3.8 KB

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