aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/python/Pygments/py3/pygments/lexers/ampl.py
blob: 79c416a9bb27dfc24954af30b833366bc6bb2644 (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
""" 
    pygments.lexers.ampl 
    ~~~~~~~~~~~~~~~~~~~~ 
 
    Lexers for the AMPL language. 
 
    :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
    :license: BSD, see LICENSE for details. 
""" 
 
from pygments.lexer import RegexLexer, bygroups, using, this, words 
from pygments.token import Text, Comment, Operator, Keyword, Name, String, \ 
    Number, Punctuation, Whitespace
 
__all__ = ['AmplLexer'] 
 
 
class AmplLexer(RegexLexer): 
    """ 
    For `AMPL <http://ampl.com/>`_ source code. 
 
    .. versionadded:: 2.2 
    """ 
    name = 'Ampl' 
    aliases = ['ampl'] 
    filenames = ['*.run'] 
 
    tokens = { 
        'root': [ 
            (r'\n', Text), 
            (r'\s+', Whitespace),
            (r'#.*?\n', Comment.Single), 
            (r'/[*](.|\n)*?[*]/', Comment.Multiline), 
            (words(( 
                'call', 'cd', 'close', 'commands', 'data', 'delete', 'display', 
                'drop', 'end', 'environ', 'exit', 'expand', 'include', 'load', 
                'model', 'objective', 'option', 'problem', 'purge', 'quit', 
                'redeclare', 'reload', 'remove', 'reset', 'restore', 'shell', 
                'show', 'solexpand', 'solution', 'solve', 'update', 'unload', 
                'xref', 'coeff', 'coef', 'cover', 'obj', 'interval', 'default', 
                'from', 'to', 'to_come', 'net_in', 'net_out', 'dimen', 
                'dimension', 'check', 'complements', 'write', 'function', 
                'pipe', 'format', 'if', 'then', 'else', 'in', 'while', 'repeat', 
                'for'), suffix=r'\b'), Keyword.Reserved), 
            (r'(integer|binary|symbolic|ordered|circular|reversed|INOUT|IN|OUT|LOCAL)', 
             Keyword.Type), 
            (r'\".*?\"', String.Double), 
            (r'\'.*?\'', String.Single), 
            (r'[()\[\]{},;:]+', Punctuation), 
            (r'\b(\w+)(\.)(astatus|init0|init|lb0|lb1|lb2|lb|lrc|' 
             r'lslack|rc|relax|slack|sstatus|status|ub0|ub1|ub2|' 
             r'ub|urc|uslack|val)', 
             bygroups(Name.Variable, Punctuation, Keyword.Reserved)), 
            (r'(set|param|var|arc|minimize|maximize|subject to|s\.t\.|subj to|' 
             r'node|table|suffix|read table|write table)(\s+)(\w+)', 
             bygroups(Keyword.Declaration, Whitespace, Name.Variable)),
            (r'(param)(\s*)(:)(\s*)(\w+)(\s*)(:)(\s*)((\w|\s)+)', 
             bygroups(Keyword.Declaration, Whitespace, Punctuation, Whitespace,
                      Name.Variable, Whitespace, Punctuation, Whitespace, Name.Variable)),
            (r'(let|fix|unfix)(\s*)((?:\{.*\})?)(\s*)(\w+)', 
             bygroups(Keyword.Declaration, Whitespace, using(this), Whitespace, Name.Variable)),
            (words(( 
                'abs', 'acos', 'acosh', 'alias', 'asin', 'asinh', 'atan', 'atan2', 
                'atanh', 'ceil', 'ctime', 'cos', 'exp', 'floor', 'log', 'log10', 
                'max', 'min', 'precision', 'round', 'sin', 'sinh', 'sqrt', 'tan', 
                'tanh', 'time', 'trunc', 'Beta', 'Cauchy', 'Exponential', 'Gamma', 
                'Irand224', 'Normal', 'Normal01', 'Poisson', 'Uniform', 'Uniform01', 
                'num', 'num0', 'ichar', 'char', 'length', 'substr', 'sprintf', 
                'match', 'sub', 'gsub', 'print', 'printf', 'next', 'nextw', 'prev', 
                'prevw', 'first', 'last', 'ord', 'ord0', 'card', 'arity', 
                'indexarity'), prefix=r'\b', suffix=r'\b'), Name.Builtin), 
            (r'(\+|\-|\*|/|\*\*|=|<=|>=|==|\||\^|<|>|\!|\.\.|:=|\&|\!=|<<|>>)', 
             Operator), 
            (words(( 
                'or', 'exists', 'forall', 'and', 'in', 'not', 'within', 'union', 
                'diff', 'difference', 'symdiff', 'inter', 'intersect', 
                'intersection', 'cross', 'setof', 'by', 'less', 'sum', 'prod', 
                'product', 'div', 'mod'), suffix=r'\b'), 
             Keyword.Reserved),  # Operator.Name but not enough emphasized with that 
            (r'(\d+\.(?!\.)\d*|\.(?!.)\d+)([eE][+-]?\d+)?', Number.Float), 
            (r'\d+([eE][+-]?\d+)?', Number.Integer), 
            (r'[+-]?Infinity', Number.Integer), 
            (r'(\w+|(\.(?!\.)))', Text) 
        ] 
 
    }