1
0
REDMOND\anburton 4 жил өмнө
parent
commit
16850dd85a

+ 1 - 0
src/monaco.contribution.ts

@@ -50,6 +50,7 @@ import './powerquery/powerquery.contribution';
 import './powershell/powershell.contribution';
 import './pug/pug.contribution';
 import './python/python.contribution';
+import './qsharp/qsharp.contribution';
 import './r/r.contribution';
 import './razor/razor.contribution';
 import './redis/redis.contribution';

+ 13 - 0
src/qsharp/qsharp.contribution.ts

@@ -0,0 +1,13 @@
+/*---------------------------------------------------------------------------------------------
+ *  Copyright (c) Microsoft Corporation. All rights reserved.
+ *  Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+import { registerLanguage } from '../_.contribution';
+
+registerLanguage({
+	id: 'qsharp',
+	extensions: ['.qs'],
+	aliases: ['Q#', 'qsharp'],
+	loader: () => import('./qsharp')
+});

+ 10 - 0
src/qsharp/qsharp.test.ts

@@ -0,0 +1,10 @@
+/*---------------------------------------------------------------------------------------------
+ *  Copyright (c) Microsoft Corporation. All rights reserved.
+ *  Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+import { testTokenization } from '../test/testRunner';
+
+testTokenization('qsharp', [
+
+]);

+ 279 - 0
src/qsharp/qsharp.ts

@@ -0,0 +1,279 @@
+/*---------------------------------------------------------------------------------------------
+ *  Copyright (c) Microsoft Corporation. All rights reserved.
+ *  Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+import type { languages } from '../fillers/monaco-editor-core';
+
+
+export const language = <languages.IMonarchLanguage> {
+	// Set defaultToken to invalid to see what you do not tokenize yet
+	defaultToken: 'invalid',
+
+	keywords: [
+		'namespace',
+		'open',
+		'as',
+		'operation',
+		'function',
+		'body',
+		'adjoint',
+		'newtype',
+		'controlled',
+		'if',
+		'elif',
+		'else',
+		'repeat',
+		'until',
+		'fixup',
+		'for',
+		'in',
+		'while',
+		'return',
+		'fail',
+		'within',
+		'apply',
+		'Adjoint',
+		'Controlled',
+		'Adj',
+		'Ctl',
+		'is',
+		'self',
+		'auto',
+		'distribute',
+		'invert',
+		'intrinsic',
+		'let',
+		'set',
+		'w\/',
+		'new',
+		'not',
+		'and',
+		'or',
+		'use',
+		'borrow',
+		'using',
+		'borrowing',
+		'mutable'
+	  ],
+
+	typeKeywords: [
+		'Unit',
+		'Int',
+		'BigInt',
+		'Double',
+		'Bool',
+		'String',
+		'Qubit',
+		'Result',
+		'Pauli',
+		'Range'
+	],
+
+	invalidKeywords: [
+		'abstract',
+		'base',
+		'bool',
+		'break',
+		'byte',
+		'case',
+		'catch',
+		'char',
+		'checked',
+		'class',
+		'const',
+		'continue',
+		'decimal',
+		'default',
+		'delegate',
+		'do',
+		'double',
+		'enum',
+		'event',
+		'explicit',
+		'extern',
+		'finally',
+		'fixed',
+		'float',
+		'foreach',
+		'goto',
+		'implicit',
+		'int',
+		'interface',
+		'lock',
+		'long',
+		'null',
+		'object',
+		'operator',
+		'out',
+		'override',
+		'params',
+		'private',
+		'protected',
+		'public',
+		'readonly',
+		'ref',
+		'sbyte',
+		'sealed',
+		'short',
+		'sizeof',
+		'stackalloc',
+		'static',
+		'string',
+		'struct',
+		'switch',
+		'this',
+		'throw',
+		'try',
+		'typeof',
+		'unit',
+		'ulong',
+		'unchecked',
+		'unsafe',
+		'ushort',
+		'virtual',
+		'void',
+		'volatile'
+	],
+
+	constants: [
+		'true',
+		'false',
+		'PauliI',
+		'PauliX',
+		'PauliY',
+		'PauliZ',
+		'One',
+		'Zero'
+	],
+
+	builtin: [
+		'X',
+		'Y',
+		'Z',
+		'H',
+		'HY',
+		'S',
+		'T',
+		'SWAP',
+		'CNOT',
+		'CCNOT',
+		'MultiX',
+		'R',
+		'RFrac',
+		'Rx',
+		'Ry',
+		'Rz',
+		'R1',
+		'R1Frac',
+		'Exp',
+		'ExpFrac',
+		'Measure',
+		'M',
+		'MultiM',
+		'Message',
+		'Length',
+		'Assert',
+		'AssertProb',
+		'AssertEqual'
+	],
+
+	operators: [
+	  'and=',
+	  '<-',
+	  '->',
+	  '*',
+	  '*=',
+	  '@',
+	  '!',
+	  '^',
+	  '^=',
+	  ':',
+	  '::',
+	  '..',
+	  '==',
+	  '...',
+	  '=',
+	  '=>',
+	  '>',
+	  '>=',
+	  '<',
+	  '<=',
+	  '-',
+	  '-=',
+	  '!=',
+	  'or=',
+	  '%',
+	  '%=',
+	  '|',
+	  '+',
+	  '+=',
+	  '?',
+	  '/',
+	  '/=',
+	  '&&&',
+	  '&&&=',
+	  '^^^',
+	  '^^^=',
+	  '>>>',
+	  '>>>=',
+	  '<<<',
+	  '<<<=',
+	  '|||',
+	  '|||=',
+	  '~~~',
+	  '_',
+	  'w/',
+	  'w/='
+	],
+
+	symbols:  /[=><!~?:&|+\-*\/\^%@._]+/,
+
+	escapes: /\\[\s\S]/,
+
+	// The main tokenizer for our languages
+	tokenizer: {
+	  root: [
+		// identifiers and keywords
+		[/[a-zA-Z_$][\w$]*/, { cases: { '@typeKeywords': 'type',
+									 '@keywords': 'keyword',
+									 '@constants': 'constant',
+									 '@builtin': 'keyword',
+									 '@invalidKeywords': 'invalid',
+									 '@default': 'identifier'
+									 } }],
+
+		// whitespace
+		{ include: '@whitespace' },
+
+		// delimiters and operators
+		[/[{}()\[\]]/, '@brackets'],
+		[/@symbols/, { cases: { '@operators': 'operator',
+								'@default'  : '' } } ],
+
+
+		// numbers
+		[/\d*\.\d+([eE][\-+]?\d+)?/, 'number.float'],
+		[/\d+/, 'number'],
+
+		// delimiter: after number because of .\d floats
+		[/[;,.]/, 'delimiter'],
+
+		// strings
+		//[/"([^"\\]|\\.)*$/, 'string.invalid' ],  // non-teminated string
+		[/"/,  { token: 'string.quote', bracket: '@open', next: '@string' } ],
+
+	  ],
+
+	  string: [
+		[/[^\\"]+/,  'string'],
+		[/@escapes/, 'string.escape'],
+		[/"/,        { token: 'string.quote', bracket: '@close', next: '@pop' } ]
+	  ],
+
+	  whitespace: [
+		[/[ \t\r\n]+/, 'white'],
+		[/(\/\/).*/,    'comment']
+	  ],
+	},
+  };