summaryrefslogtreecommitdiff
path: root/pygments/lexers/smv.py
diff options
context:
space:
mode:
Diffstat (limited to 'pygments/lexers/smv.py')
-rw-r--r--pygments/lexers/smv.py75
1 files changed, 75 insertions, 0 deletions
diff --git a/pygments/lexers/smv.py b/pygments/lexers/smv.py
new file mode 100644
index 00000000..15fc9381
--- /dev/null
+++ b/pygments/lexers/smv.py
@@ -0,0 +1,75 @@
+# -*- coding: utf-8 -*-
+"""
+ pygments.lexers.smv
+ ~~~~~~~~~~~~~~~~~~~
+
+ Lexers for the SMV languages.
+
+ :copyright: Copyright 2006-2015 by the Pygments team, see AUTHORS.
+ :license: BSD, see LICENSE for details.
+"""
+
+from pygments.lexer import RegexLexer, words
+from pygments.token import Comment, Generic, Keyword, Name, Number, \
+ Operator, Punctuation, Text
+
+__all__ = ['NuSMVLexer']
+
+
+class NuSMVLexer(RegexLexer):
+ """
+ Lexer for the NuSMV language.
+ """
+
+ name = 'NuSMV'
+ aliases = ['nusmv']
+ filenames = ['*.smv']
+ mimetypes = []
+
+ tokens = {
+ 'root': [
+ # Comments
+ (r'(?s)\/\-\-.*?\-\-/', Comment),
+ (r'--.*\n', Comment),
+
+ # Reserved
+ (words(('MODULE','DEFINE','MDEFINE','CONSTANTS','VAR','IVAR',
+ 'FROZENVAR','INIT','TRANS','INVAR','SPEC','CTLSPEC','LTLSPEC',
+ 'PSLSPEC','COMPUTE','NAME','INVARSPEC','FAIRNESS','JUSTICE',
+ 'COMPASSION','ISA','ASSIGN','CONSTRAINT','SIMPWFF','CTLWFF',
+ 'LTLWFF','PSLWFF','COMPWFF','IN','MIN','MAX','MIRROR','PRED',
+ 'PREDICATES'), suffix=r'(?![\w$#-])'), Keyword.Declaration),
+ (r'process(?![\w$#-])', Keyword),
+ (words(('array','of','boolean','integer','real','word'),
+ suffix=r'(?![\w$#-])'), Keyword.Type),
+ (words(('case','esac'), suffix=r'(?![\w$#-])'), Keyword),
+ (words(('word1','bool','signed','unsigned','extend','resize',
+ 'sizeof','uwconst','swconst','init','self','count','abs','max',
+ 'min'), suffix=r'(?![\w$#-])'), Name.Builtin),
+ (words(('EX','AX','EF','AF','EG','AG','E','F','O','G','H','X','Y',
+ 'Z','A','U','S','V','T','BU','EBF','ABF','EBG','ABG','next',
+ 'mod','union','in','xor','xnor'), suffix=r'(?![\w$#-])'),
+ Operator.Word),
+ (words(('TRUE','FALSE'), suffix=r'(?![\w$#-])'), Keyword.Constant),
+
+ # Names
+ (r'[a-zA-Z_][\w$#-]*', Name.Variable),
+
+ # Operators
+ (r':=', Operator),
+ (r'[&\|\+\-\*/<>!=]', Operator),
+
+ # Literals
+ (r'\-?\d+\b', Number.Integer),
+ (r'0[su][bB]\d*_[01_]+', Number.Bin),
+ (r'0[su][oO]\d*_[01234567_]+', Number.Oct),
+ (r'0[su][dD]\d*_[\d_]+', Number.Dec),
+ (r'0[su][hH]\d*_[\da-fA-F_]+', Number.Hex),
+
+ # Whitespace, punctuation and the rest
+ (r'\s+', Text.Whitespace),
+ (r'[\(\)\[\]\{\};\?:\.,]', Punctuation),
+ (r'.', Generic.Error),
+ ]
+ }
+