Token.cs 3.8 KB

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