Token.cs 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. 
  2. namespace NTERA.Interpreter
  3. {
  4. public enum Token
  5. {
  6. Unkown,
  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("PRINT_IMG", true)]
  31. PrintImg,
  32. [LexerKeyword("PRINTBUTTON", true)]
  33. PrintButton,
  34. //Eralang arithmetic keywords
  35. [LexerKeyword("TIMES")]
  36. Times,
  37. //Standard BASIC keywords
  38. [LexerKeyword("IF")]
  39. If,
  40. [LexerKeyword("ENDIF")]
  41. EndIf,
  42. [LexerKeyword("THEN")]
  43. Then,
  44. [LexerKeyword("ELSE")]
  45. Else,
  46. [LexerKeyword("FOR")]
  47. For,
  48. [LexerKeyword("TO")]
  49. To,
  50. [LexerKeyword("NEXT")]
  51. Next,
  52. [LexerKeyword("INPUT")]
  53. Input,
  54. [LexerKeyword("LET")]
  55. Let,
  56. [LexerKeyword("GOSUB")]
  57. Gosub,
  58. [LexerKeyword("RETURN")]
  59. Return,
  60. [LexerKeyword("REM")]
  61. Rem,
  62. [LexerKeyword("END")]
  63. End,
  64. [LexerCharacter('\n')]
  65. NewLine,
  66. [LexerCharacter(':')]
  67. Colon,
  68. [LexerCharacter(';')]
  69. Semicolon,
  70. [LexerCharacter(',')]
  71. Comma,
  72. [LexerCharacter('+')]
  73. Plus,
  74. [LexerCharacter('-')]
  75. Minus,
  76. [LexerCharacter('/')]
  77. Slash,
  78. [LexerCharacter('*')]
  79. Asterisk,
  80. [LexerCharacter('^')]
  81. Caret,
  82. [LexerCharacter('=')]
  83. Equal,
  84. Less,
  85. More,
  86. NotEqual,
  87. LessEqual,
  88. MoreEqual,
  89. [LexerKeyword("OR")]
  90. [LexerCharacter('|')]
  91. Or,
  92. [LexerKeyword("AND")]
  93. [LexerCharacter('&')]
  94. And,
  95. [LexerCharacter('!')]
  96. Not,
  97. [LexerCharacter('(')]
  98. LParen,
  99. [LexerCharacter(')')]
  100. RParen,
  101. EOF = -1 //End Of File
  102. }
  103. public static class TokenEnumExtensions
  104. {
  105. public static bool IsUnary(this Token token)
  106. {
  107. return token == Token.Plus
  108. || token == Token.Minus;
  109. }
  110. public static bool IsArithmetic(this Token token)
  111. {
  112. return token == Token.Plus
  113. || token == Token.Minus
  114. || token == Token.Slash
  115. || token == Token.Asterisk
  116. || token == Token.Caret
  117. || token == Token.Equal
  118. || token == Token.NotEqual
  119. || token == Token.Less
  120. || token == Token.LessEqual
  121. || token == Token.More
  122. || token == Token.MoreEqual
  123. || token == Token.Or
  124. || token == Token.And
  125. || token == Token.Not;
  126. }
  127. }
  128. }