aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/python/Pygments/py2/pygments/lexers/verification.py
blob: d6739a87558a89559714a6ca6b837b65026b75fc (plain) (blame)
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# -*- coding: utf-8 -*- 
""" 
    pygments.lexers.verification 
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
 
    Lexer for Intermediate Verification Languages (IVLs). 
 
    :copyright: Copyright 2006-2019 by the Pygments team, see AUTHORS. 
    :license: BSD, see LICENSE for details. 
""" 
 
from pygments.lexer import RegexLexer, include, words 
from pygments.token import Comment, Operator, Keyword, Name, Number, \ 
    Punctuation, Whitespace 
 
__all__ = ['BoogieLexer', 'SilverLexer'] 
 
 
class BoogieLexer(RegexLexer): 
    """ 
    For `Boogie <https://boogie.codeplex.com/>`_ source code. 
 
    .. versionadded:: 2.1 
    """ 
    name = 'Boogie' 
    aliases = ['boogie'] 
    filenames = ['*.bpl'] 
 
    tokens = { 
        'root': [ 
            # Whitespace and Comments 
            (r'\n', Whitespace), 
            (r'\s+', Whitespace), 
            (r'//[/!](.*?)\n', Comment.Doc), 
            (r'//(.*?)\n', Comment.Single), 
            (r'/\*', Comment.Multiline, 'comment'), 
 
            (words(( 
                'axiom', 'break', 'call', 'ensures', 'else', 'exists', 'function', 
                'forall', 'if', 'invariant', 'modifies', 'procedure',  'requires', 
                'then', 'var', 'while'), 
             suffix=r'\b'), Keyword), 
            (words(('const',), suffix=r'\b'), Keyword.Reserved), 
 
            (words(('bool', 'int', 'ref'), suffix=r'\b'), Keyword.Type), 
            include('numbers'), 
            (r"(>=|<=|:=|!=|==>|&&|\|\||[+/\-=>*<\[\]])", Operator), 
            (r"([{}():;,.])", Punctuation), 
            # Identifier 
            (r'[a-zA-Z_]\w*', Name), 
        ], 
        'comment': [ 
            (r'[^*/]+', Comment.Multiline), 
            (r'/\*', Comment.Multiline, '#push'), 
            (r'\*/', Comment.Multiline, '#pop'), 
            (r'[*/]', Comment.Multiline), 
        ], 
        'numbers': [ 
            (r'[0-9]+', Number.Integer), 
        ], 
    } 
 
 
class SilverLexer(RegexLexer): 
    """ 
    For `Silver <https://bitbucket.org/viperproject/silver>`_ source code. 
 
    .. versionadded:: 2.2 
    """ 
    name = 'Silver' 
    aliases = ['silver'] 
    filenames = ['*.sil', '*.vpr'] 
 
    tokens = { 
        'root': [ 
            # Whitespace and Comments 
            (r'\n', Whitespace), 
            (r'\s+', Whitespace), 
            (r'//[/!](.*?)\n', Comment.Doc), 
            (r'//(.*?)\n', Comment.Single), 
            (r'/\*', Comment.Multiline, 'comment'), 
 
            (words(( 
                'result', 'true', 'false', 'null', 'method', 'function', 
                'predicate', 'program', 'domain', 'axiom', 'var', 'returns', 
                'field', 'define', 'requires', 'ensures', 'invariant', 
                'fold', 'unfold', 'inhale', 'exhale', 'new', 'assert', 
                'assume', 'goto', 'while', 'if', 'elseif', 'else', 'fresh', 
                'constraining', 'Seq', 'Set', 'Multiset', 'union', 'intersection', 
                'setminus', 'subset', 'unfolding', 'in', 'old', 'forall', 'exists', 
                'acc', 'wildcard', 'write', 'none', 'epsilon', 'perm', 'unique', 
                'apply', 'package', 'folding', 'label', 'forperm'), 
             suffix=r'\b'), Keyword), 
            (words(('Int', 'Perm', 'Bool', 'Ref'), suffix=r'\b'), Keyword.Type), 
            include('numbers'), 
 
            (r'[!%&*+=|?:<>/\-\[\]]', Operator), 
            (r'([{}():;,.])', Punctuation), 
            # Identifier 
            (r'[\w$]\w*', Name), 
        ], 
        'comment': [ 
            (r'[^*/]+', Comment.Multiline), 
            (r'/\*', Comment.Multiline, '#push'), 
            (r'\*/', Comment.Multiline, '#pop'), 
            (r'[*/]', Comment.Multiline), 
        ], 
        'numbers': [ 
            (r'[0-9]+', Number.Integer), 
        ], 
    }