mips.js 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  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(["require", "exports"], function (require, exports) {
  6. 'use strict';
  7. Object.defineProperty(exports, "__esModule", { value: true });
  8. exports.conf = {
  9. wordPattern: /(-?\d*\.\d\w*)|([^\`\~\!\@\#%\^\&\*\(\)\=\$\-\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,
  10. comments: {
  11. blockComment: ['###', '###'],
  12. lineComment: '#'
  13. },
  14. folding: {
  15. markers: {
  16. start: new RegExp("^\\s*#region\\b"),
  17. end: new RegExp("^\\s*#endregion\\b")
  18. }
  19. }
  20. };
  21. exports.language = {
  22. defaultToken: '',
  23. ignoreCase: false,
  24. tokenPostfix: '.mips',
  25. regEx: /\/(?!\/\/)(?:[^\/\\]|\\.)*\/[igm]*/,
  26. keywords: [
  27. '.data', '.text', 'syscall', 'trap',
  28. 'add', 'addu', 'addi', 'addiu', 'and', 'andi',
  29. 'div', 'divu', 'mult', 'multu', 'nor', 'or', 'ori',
  30. 'sll', 'slv', 'sra', 'srav', 'srl', 'srlv',
  31. 'sub', 'subu', 'xor', 'xori', 'lhi', 'lho',
  32. 'lhi', 'llo', 'slt', 'slti', 'sltu', 'sltiu',
  33. 'beq', 'bgtz', 'blez', 'bne', 'j', 'jal', 'jalr', 'jr',
  34. 'lb', 'lbu', 'lh', 'lhu', 'lw', 'li', 'la',
  35. 'sb', 'sh', 'sw', 'mfhi', 'mflo', 'mthi', 'mtlo', 'move',
  36. ],
  37. // we include these common regular expressions
  38. symbols: /[\.,\:]+/,
  39. escapes: /\\(?:[abfnrtv\\"'$]|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,
  40. // The main tokenizer for our languages
  41. tokenizer: {
  42. root: [
  43. // identifiers and keywords
  44. [/\$[a-zA-Z_]\w*/, 'variable.predefined'],
  45. [/[.a-zA-Z_]\w*/, {
  46. cases: {
  47. 'this': 'variable.predefined',
  48. '@keywords': { token: 'keyword.$0' },
  49. '@default': ''
  50. }
  51. }],
  52. // whitespace
  53. [/[ \t\r\n]+/, ''],
  54. // Comments
  55. [/#.*$/, 'comment'],
  56. // regular expressions
  57. ['///', { token: 'regexp', next: '@hereregexp' }],
  58. [/^(\s*)(@regEx)/, ['', 'regexp']],
  59. [/(\,)(\s*)(@regEx)/, ['delimiter', '', 'regexp']],
  60. [/(\:)(\s*)(@regEx)/, ['delimiter', '', 'regexp']],
  61. // delimiters
  62. [/@symbols/, 'delimiter'],
  63. // numbers
  64. [/\d+[eE]([\-+]?\d+)?/, 'number.float'],
  65. [/\d+\.\d+([eE][\-+]?\d+)?/, 'number.float'],
  66. [/0[xX][0-9a-fA-F]+/, 'number.hex'],
  67. [/0[0-7]+(?!\d)/, 'number.octal'],
  68. [/\d+/, 'number'],
  69. // delimiter: after number because of .\d floats
  70. [/[,.]/, 'delimiter'],
  71. // strings:
  72. [/"""/, 'string', '@herestring."""'],
  73. [/'''/, 'string', '@herestring.\'\'\''],
  74. [/"/, {
  75. cases: {
  76. '@eos': 'string',
  77. '@default': { token: 'string', next: '@string."' }
  78. }
  79. }],
  80. [/'/, {
  81. cases: {
  82. '@eos': 'string',
  83. '@default': { token: 'string', next: '@string.\'' }
  84. }
  85. }],
  86. ],
  87. string: [
  88. [/[^"'\#\\]+/, 'string'],
  89. [/@escapes/, 'string.escape'],
  90. [/\./, 'string.escape.invalid'],
  91. [/\./, 'string.escape.invalid'],
  92. [/#{/, {
  93. cases: {
  94. '$S2=="': { token: 'string', next: 'root.interpolatedstring' },
  95. '@default': 'string'
  96. }
  97. }],
  98. [/["']/, {
  99. cases: {
  100. '$#==$S2': { token: 'string', next: '@pop' },
  101. '@default': 'string'
  102. }
  103. }],
  104. [/#/, 'string']
  105. ],
  106. herestring: [
  107. [/("""|''')/, {
  108. cases: {
  109. '$1==$S2': { token: 'string', next: '@pop' },
  110. '@default': 'string'
  111. }
  112. }],
  113. [/[^#\\'"]+/, 'string'],
  114. [/['"]+/, 'string'],
  115. [/@escapes/, 'string.escape'],
  116. [/\./, 'string.escape.invalid'],
  117. [/#{/, { token: 'string.quote', next: 'root.interpolatedstring' }],
  118. [/#/, 'string']
  119. ],
  120. comment: [
  121. [/[^#]+/, 'comment',],
  122. [/#/, 'comment'],
  123. ],
  124. hereregexp: [
  125. [/[^\\\/#]+/, 'regexp'],
  126. [/\\./, 'regexp'],
  127. [/#.*$/, 'comment'],
  128. ['///[igm]*', { token: 'regexp', next: '@pop' }],
  129. [/\//, 'regexp'],
  130. ],
  131. },
  132. };
  133. });