diff options
author | Matthew Treinish <mtreinish@kortar.org> | 2018-06-19 15:34:43 -0400 |
---|---|---|
committer | Georg Brandl <georg@python.org> | 2019-11-28 06:53:47 +0100 |
commit | b1566bee6f0756b5b3ce53cfb368da9e455beb3d (patch) | |
tree | 466c1c093c047e0880dec0a5403b0d4ea471a1d2 | |
parent | 6a926bbf949a5f85f8fb13098a138e7c96260e13 (diff) | |
download | pygments-git-b1566bee6f0756b5b3ce53cfb368da9e455beb3d.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.py | 1 | ||||
-rw-r--r-- | pygments/lexers/openqasm.py | 64 |
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), + ], + + } |