Syntax.java 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. package me.hammerle.snuviscript.code;
  2. public enum Syntax
  3. {
  4. UNKNOWN(" ", 0, 0),
  5. MAYBE("", 0, 0),
  6. MUL("*", 3),
  7. DIV("/", 3),
  8. MOD("%", 3),
  9. ADD("+", 4),
  10. SUB("-", 4),
  11. UNARY_SUB(" ", 0, 1),
  12. LEFT_SHIFT("<<", 6),
  13. RIGHT_SHIFT(">>", 6),
  14. SMALLER("<", 7),
  15. SMALLER_EQUAL("<=", 7),
  16. GREATER(">", 7),
  17. GREATER_EQUAL(">=", 7),
  18. EQUAL("==", 8),
  19. NOT_EQUAL("!=", 8),
  20. BIT_AND("&", 9),
  21. BIT_XOR("^", 10),
  22. BIT_OR("|", 11),
  23. AND("&&", 12),
  24. OR("||", 13),
  25. SET("=", 15),
  26. ADD_SET("+=", 15),
  27. SUB_SET("-=", 15),
  28. MUL_SET("*=", 15),
  29. DIV_SET("/=", 15),
  30. MOD_SET("%=", 15),
  31. LEFT_SHIFT_SET("<<=", 15),
  32. RIGHT_SHIFT_SET(">>=", 15),
  33. BIT_AND_SET("&=", 15),
  34. BIT_XOR_SET("^=", 15),
  35. BIT_OR_SET("|=", 15);
  36. /*
  37. LEFT_SHIFT_SET("<<=", 15),
  38. RIGHT_SHIFT_SET(">>=", 15),
  39. */
  40. public static Syntax getSyntax(String s)
  41. {
  42. int size = s.length();
  43. if(size > 0)
  44. {
  45. switch(s.charAt(0))
  46. {
  47. case '*':
  48. if(size == 1)
  49. {
  50. return MUL;
  51. }
  52. else if(size == 2 && s.charAt(1) == '=')
  53. {
  54. return MUL_SET;
  55. }
  56. break;
  57. case '/':
  58. if(size == 1)
  59. {
  60. return DIV;
  61. }
  62. else if(size == 2 && s.charAt(1) == '=')
  63. {
  64. return DIV_SET;
  65. }
  66. break;
  67. case '+':
  68. if(size == 1)
  69. {
  70. return ADD;
  71. }
  72. else if(size == 2 && s.charAt(1) == '=')
  73. {
  74. return ADD_SET;
  75. }
  76. break;
  77. case '-':
  78. if(size == 1)
  79. {
  80. return SUB;
  81. }
  82. else if(size == 2 && s.charAt(1) == '=')
  83. {
  84. return SUB_SET;
  85. }
  86. break;
  87. case '^':
  88. if(size == 1)
  89. {
  90. return BIT_XOR;
  91. }
  92. else if(size == 2 && s.charAt(1) == '=')
  93. {
  94. return BIT_XOR_SET;
  95. }
  96. break;
  97. case '<':
  98. if(size == 1)
  99. {
  100. return SMALLER;
  101. }
  102. else if(size == 2)
  103. {
  104. switch(s.charAt(1))
  105. {
  106. case '<': return LEFT_SHIFT;
  107. case '=': return SMALLER_EQUAL;
  108. }
  109. }
  110. else if(size == 3 && s.charAt(1) == '<' && s.charAt(2) == '=')
  111. {
  112. return LEFT_SHIFT_SET;
  113. }
  114. break;
  115. case '>':
  116. if(size == 1)
  117. {
  118. return GREATER;
  119. }
  120. else if(size == 2)
  121. {
  122. switch(s.charAt(1))
  123. {
  124. case '>': return RIGHT_SHIFT;
  125. case '=': return GREATER_EQUAL;
  126. }
  127. }
  128. else if(size == 3 && s.charAt(1) == '>' && s.charAt(2) == '=')
  129. {
  130. return RIGHT_SHIFT_SET;
  131. }
  132. break;
  133. case '!':
  134. if(size == 1)
  135. {
  136. return MAYBE;
  137. }
  138. else if(size == 2 && s.charAt(1) == '=')
  139. {
  140. return NOT_EQUAL;
  141. }
  142. break;
  143. case '=':
  144. if(size == 1)
  145. {
  146. return SET;
  147. }
  148. else if(size == 2 && s.charAt(1) == '=')
  149. {
  150. return EQUAL;
  151. }
  152. break;
  153. case '&':
  154. if(size == 1)
  155. {
  156. return BIT_AND;
  157. }
  158. else if(size == 2)
  159. {
  160. switch(s.charAt(1))
  161. {
  162. case '&': return AND;
  163. case '=': return BIT_AND_SET;
  164. }
  165. }
  166. break;
  167. case '|':
  168. if(size == 1)
  169. {
  170. return BIT_OR;
  171. }
  172. else if(size == 2)
  173. {
  174. switch(s.charAt(1))
  175. {
  176. case '|': return OR;
  177. case '=': return BIT_OR_SET;
  178. }
  179. }
  180. break;
  181. case '%':
  182. if(size == 1)
  183. {
  184. return MOD;
  185. }
  186. else if(size == 2 && s.charAt(1) == '=')
  187. {
  188. return MOD_SET;
  189. }
  190. break;
  191. }
  192. }
  193. return UNKNOWN;
  194. }
  195. private int weight;
  196. private String function;
  197. private byte pars;
  198. Syntax(String function, int weight, int pars)
  199. {
  200. this.weight = weight;
  201. this.function = function;
  202. this.pars = (byte) pars;
  203. }
  204. Syntax(String function, int weight)
  205. {
  206. this(function, weight, 2);
  207. }
  208. public String getFunction()
  209. {
  210. return function;
  211. }
  212. public int getWeight()
  213. {
  214. return weight;
  215. }
  216. public byte getParameters()
  217. {
  218. return pars;
  219. }
  220. }