Token.cs 3.4 KB

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