1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
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),
]
}
|