mips.ts 4.0 KB

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