mips.js 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. /*---------------------------------------------------------------------------------------------
  2. * Copyright (c) Microsoft Corporation. All rights reserved.
  3. * Licensed under the MIT License. See License.txt in the project root for license information.
  4. *--------------------------------------------------------------------------------------------*/
  5. define('vs/basic-languages/mips/mips',["require", "exports"], function (require, exports) {
  6. "use strict";
  7. Object.defineProperty(exports, "__esModule", { value: true });
  8. exports.language = exports.conf = void 0;
  9. exports.conf = {
  10. wordPattern: /(-?\d*\.\d\w*)|([^\`\~\!\@\#%\^\&\*\(\)\=\$\-\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,
  11. comments: {
  12. blockComment: ['###', '###'],
  13. lineComment: '#'
  14. },
  15. folding: {
  16. markers: {
  17. start: new RegExp('^\\s*#region\\b'),
  18. end: new RegExp('^\\s*#endregion\\b')
  19. }
  20. }
  21. };
  22. exports.language = {
  23. defaultToken: '',
  24. ignoreCase: false,
  25. tokenPostfix: '.mips',
  26. regEx: /\/(?!\/\/)(?:[^\/\\]|\\.)*\/[igm]*/,
  27. keywords: [
  28. '.data',
  29. '.text',
  30. 'syscall',
  31. 'trap',
  32. 'add',
  33. 'addu',
  34. 'addi',
  35. 'addiu',
  36. 'and',
  37. 'andi',
  38. 'div',
  39. 'divu',
  40. 'mult',
  41. 'multu',
  42. 'nor',
  43. 'or',
  44. 'ori',
  45. 'sll',
  46. 'slv',
  47. 'sra',
  48. 'srav',
  49. 'srl',
  50. 'srlv',
  51. 'sub',
  52. 'subu',
  53. 'xor',
  54. 'xori',
  55. 'lhi',
  56. 'lho',
  57. 'lhi',
  58. 'llo',
  59. 'slt',
  60. 'slti',
  61. 'sltu',
  62. 'sltiu',
  63. 'beq',
  64. 'bgtz',
  65. 'blez',
  66. 'bne',
  67. 'j',
  68. 'jal',
  69. 'jalr',
  70. 'jr',
  71. 'lb',
  72. 'lbu',
  73. 'lh',
  74. 'lhu',
  75. 'lw',
  76. 'li',
  77. 'la',
  78. 'sb',
  79. 'sh',
  80. 'sw',
  81. 'mfhi',
  82. 'mflo',
  83. 'mthi',
  84. 'mtlo',
  85. 'move'
  86. ],
  87. // we include these common regular expressions
  88. symbols: /[\.,\:]+/,
  89. escapes: /\\(?:[abfnrtv\\"'$]|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,
  90. // The main tokenizer for our languages
  91. tokenizer: {
  92. root: [
  93. // identifiers and keywords
  94. [/\$[a-zA-Z_]\w*/, 'variable.predefined'],
  95. [
  96. /[.a-zA-Z_]\w*/,
  97. {
  98. cases: {
  99. this: 'variable.predefined',
  100. '@keywords': { token: 'keyword.$0' },
  101. '@default': ''
  102. }
  103. }
  104. ],
  105. // whitespace
  106. [/[ \t\r\n]+/, ''],
  107. // Comments
  108. [/#.*$/, 'comment'],
  109. // regular expressions
  110. ['///', { token: 'regexp', next: '@hereregexp' }],
  111. [/^(\s*)(@regEx)/, ['', 'regexp']],
  112. [/(\,)(\s*)(@regEx)/, ['delimiter', '', 'regexp']],
  113. [/(\:)(\s*)(@regEx)/, ['delimiter', '', 'regexp']],
  114. // delimiters
  115. [/@symbols/, 'delimiter'],
  116. // numbers
  117. [/\d+[eE]([\-+]?\d+)?/, 'number.float'],
  118. [/\d+\.\d+([eE][\-+]?\d+)?/, 'number.float'],
  119. [/0[xX][0-9a-fA-F]+/, 'number.hex'],
  120. [/0[0-7]+(?!\d)/, 'number.octal'],
  121. [/\d+/, 'number'],
  122. // delimiter: after number because of .\d floats
  123. [/[,.]/, 'delimiter'],
  124. // strings:
  125. [/"""/, 'string', '@herestring."""'],
  126. [/'''/, 'string', "@herestring.'''"],
  127. [
  128. /"/,
  129. {
  130. cases: {
  131. '@eos': 'string',
  132. '@default': { token: 'string', next: '@string."' }
  133. }
  134. }
  135. ],
  136. [
  137. /'/,
  138. {
  139. cases: {
  140. '@eos': 'string',
  141. '@default': { token: 'string', next: "@string.'" }
  142. }
  143. }
  144. ]
  145. ],
  146. string: [
  147. [/[^"'\#\\]+/, 'string'],
  148. [/@escapes/, 'string.escape'],
  149. [/\./, 'string.escape.invalid'],
  150. [/\./, 'string.escape.invalid'],
  151. [
  152. /#{/,
  153. {
  154. cases: {
  155. '$S2=="': {
  156. token: 'string',
  157. next: 'root.interpolatedstring'
  158. },
  159. '@default': 'string'
  160. }
  161. }
  162. ],
  163. [
  164. /["']/,
  165. {
  166. cases: {
  167. '$#==$S2': { token: 'string', next: '@pop' },
  168. '@default': 'string'
  169. }
  170. }
  171. ],
  172. [/#/, 'string']
  173. ],
  174. herestring: [
  175. [
  176. /("""|''')/,
  177. {
  178. cases: {
  179. '$1==$S2': { token: 'string', next: '@pop' },
  180. '@default': 'string'
  181. }
  182. }
  183. ],
  184. [/[^#\\'"]+/, 'string'],
  185. [/['"]+/, 'string'],
  186. [/@escapes/, 'string.escape'],
  187. [/\./, 'string.escape.invalid'],
  188. [/#{/, { token: 'string.quote', next: 'root.interpolatedstring' }],
  189. [/#/, 'string']
  190. ],
  191. comment: [
  192. [/[^#]+/, 'comment'],
  193. [/#/, 'comment']
  194. ],
  195. hereregexp: [
  196. [/[^\\\/#]+/, 'regexp'],
  197. [/\\./, 'regexp'],
  198. [/#.*$/, 'comment'],
  199. ['///[igm]*', { token: 'regexp', next: '@pop' }],
  200. [/\//, 'regexp']
  201. ]
  202. }
  203. };
  204. });