summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Treinish <mtreinish@kortar.org>2018-06-19 15:34:43 -0400
committerGeorg Brandl <georg@python.org>2019-11-28 06:53:47 +0100
commitb1566bee6f0756b5b3ce53cfb368da9e455beb3d (patch)
tree466c1c093c047e0880dec0a5403b0d4ea471a1d2
parent6a926bbf949a5f85f8fb13098a138e7c96260e13 (diff)
downloadpygments-git-769/mtreinish/openqasm.tar.gz
Add lexer for OpenQASM files769/mtreinish/openqasm
This commit adds a lexer for the Open Quantum Assembly Language files. The specification for this language is maintained here: https://github.com/QISKit/openqasm
-rw-r--r--pygments/lexers/_mapping.py1
-rw-r--r--pygments/lexers/openqasm.py64
2 files changed, 65 insertions, 0 deletions
diff --git a/pygments/lexers/_mapping.py b/pygments/lexers/_mapping.py
index acb71ad9..b53add73 100644
--- a/pygments/lexers/_mapping.py
+++ b/pygments/lexers/_mapping.py
@@ -318,6 +318,7 @@ LEXERS = {
'OocLexer': ('pygments.lexers.ooc', 'Ooc', ('ooc',), ('*.ooc',), ('text/x-ooc',)),
'OpaLexer': ('pygments.lexers.ml', 'Opa', ('opa',), ('*.opa',), ('text/x-opa',)),
'OpenEdgeLexer': ('pygments.lexers.business', 'OpenEdge ABL', ('openedge', 'abl', 'progress'), ('*.p', '*.cls'), ('text/x-openedge', 'application/x-openedge')),
+ 'OpenQASMLexer': ('pygments.lexers.openqasm', 'OpenQASM', ('openqasm',), ('*.qasm',), ('text/x-csrc')),
'PacmanConfLexer': ('pygments.lexers.configs', 'PacmanConf', ('pacmanconf',), ('pacman.conf',), ()),
'PanLexer': ('pygments.lexers.dsls', 'Pan', ('pan',), ('*.pan',), ()),
'ParaSailLexer': ('pygments.lexers.parasail', 'ParaSail', ('parasail',), ('*.psi', '*.psl'), ('text/x-parasail',)),
diff --git a/pygments/lexers/openqasm.py b/pygments/lexers/openqasm.py
new file mode 100644
index 00000000..4e0364a5
--- /dev/null
+++ b/pygments/lexers/openqasm.py
@@ -0,0 +1,64 @@
+# -*- coding: utf-8 -*-
+"""
+ pygments.lexers.openqasm
+ ~~~~~~~~~~~~~~~~~~~
+
+ Lexer for Open Quantum Assembly Language
+
+ :copyright: Copyright 2006-2018 by the Pygments team, see AUTHORS.
+ :license: BSD, see LICENSE for details.
+"""
+
+import re
+
+from pygments.lexer import RegexLexer, include, default, words
+from pygments.token import Keyword, Name, Text, Whitespace, Comment, Number
+
+
+__all__ = ['OpenQASMLexer']
+
+
+class OpenQASMLexer(RegexLexer):
+ """
+ For OpenQASM (Open Quantum Computing Assembly code.
+ """
+ name = 'OpenQASM'
+ aliases = ['openqasm']
+ filenames = ['qasm']
+ mimetypes = ['text/x-csrc']
+
+ tokens = {
+ 'root': [
+ default('base'),
+ ],
+
+ 'base': [
+ (r'\n', Whitespace),
+ (r'\s+', Whitespace),
+
+ ('qreg', Keyword.Declaration),
+ ('creg', Keyword.Declaration),
+ (words((
+ 'cx', 'measure', 'if'), suffix=r'\b'),
+ Keyword),
+ (r'include\b', Keyword, 'incname'),
+ (r'//(.*?)\n', Comment.Single),
+ (r'gate\b', Keyword, 'gatename'),
+ (r'OPENQASM\b', Keyword, 'version'),
+ ],
+ 'incname': [
+ (r'\s+', Text),
+ (r'[ia-zA-Z_]\w*', Name.Namespace, '#pop'),
+ default('#pop'),
+ ],
+ 'gatename': [
+ (r'\s+', Text),
+ (r'[a-zA-Z_]\w*', Name.Function, '#pop'),
+ default('#pop'),
+ ],
+ 'version': [
+ (r'[0-9][0-9_]*(\.[0-9_]+[eE][+\-]?[0-9_]+|'
+ '\.[0-9_]*(?!\.)|[eE][+\-]?[0-9_]+)', Number.Float),
+ ],
+
+ }