448 lines
9.0 KiB
Python
448 lines
9.0 KiB
Python
|
"""
|
||
|
pygments.lexers.mosel
|
||
|
~~~~~~~~~~~~~~~~~~~~~
|
||
|
|
||
|
Lexers for the mosel language.
|
||
|
http://www.fico.com/en/products/fico-xpress-optimization
|
||
|
|
||
|
:copyright: Copyright 2006-2022 by the Pygments team, see AUTHORS.
|
||
|
:license: BSD, see LICENSE for details.
|
||
|
"""
|
||
|
|
||
|
from pygments.lexer import RegexLexer, words
|
||
|
from pygments.token import Text, Comment, Operator, Keyword, Name, String, \
|
||
|
Number, Punctuation
|
||
|
|
||
|
__all__ = ['MoselLexer']
|
||
|
|
||
|
FUNCTIONS = (
|
||
|
# core functions
|
||
|
'_',
|
||
|
'abs',
|
||
|
'arctan',
|
||
|
'asproc',
|
||
|
'assert',
|
||
|
'bitflip',
|
||
|
'bitneg',
|
||
|
'bitset',
|
||
|
'bitshift',
|
||
|
'bittest',
|
||
|
'bitval',
|
||
|
'ceil',
|
||
|
'cos',
|
||
|
'create',
|
||
|
'currentdate',
|
||
|
'currenttime',
|
||
|
'cutelt',
|
||
|
'cutfirst',
|
||
|
'cuthead',
|
||
|
'cutlast',
|
||
|
'cuttail',
|
||
|
'datablock',
|
||
|
'delcell',
|
||
|
'exists',
|
||
|
'exit',
|
||
|
'exp',
|
||
|
'exportprob',
|
||
|
'fclose',
|
||
|
'fflush',
|
||
|
'finalize',
|
||
|
'findfirst',
|
||
|
'findlast',
|
||
|
'floor',
|
||
|
'fopen',
|
||
|
'fselect',
|
||
|
'fskipline',
|
||
|
'fwrite',
|
||
|
'fwrite_',
|
||
|
'fwriteln',
|
||
|
'fwriteln_',
|
||
|
'getact',
|
||
|
'getcoeff',
|
||
|
'getcoeffs',
|
||
|
'getdual',
|
||
|
'getelt',
|
||
|
'getfid',
|
||
|
'getfirst',
|
||
|
'getfname',
|
||
|
'gethead',
|
||
|
'getlast',
|
||
|
'getobjval',
|
||
|
'getparam',
|
||
|
'getrcost',
|
||
|
'getreadcnt',
|
||
|
'getreverse',
|
||
|
'getsize',
|
||
|
'getslack',
|
||
|
'getsol',
|
||
|
'gettail',
|
||
|
'gettype',
|
||
|
'getvars',
|
||
|
'isdynamic',
|
||
|
'iseof',
|
||
|
'isfinite',
|
||
|
'ishidden',
|
||
|
'isinf',
|
||
|
'isnan',
|
||
|
'isodd',
|
||
|
'ln',
|
||
|
'localsetparam',
|
||
|
'log',
|
||
|
'makesos1',
|
||
|
'makesos2',
|
||
|
'maxlist',
|
||
|
'memoryuse',
|
||
|
'minlist',
|
||
|
'newmuid',
|
||
|
'publish',
|
||
|
'random',
|
||
|
'read',
|
||
|
'readln',
|
||
|
'reset',
|
||
|
'restoreparam',
|
||
|
'reverse',
|
||
|
'round',
|
||
|
'setcoeff',
|
||
|
'sethidden',
|
||
|
'setioerr',
|
||
|
'setmatherr',
|
||
|
'setname',
|
||
|
'setparam',
|
||
|
'setrandseed',
|
||
|
'setrange',
|
||
|
'settype',
|
||
|
'sin',
|
||
|
'splithead',
|
||
|
'splittail',
|
||
|
'sqrt',
|
||
|
'strfmt',
|
||
|
'substr',
|
||
|
'timestamp',
|
||
|
'unpublish',
|
||
|
'versionnum',
|
||
|
'versionstr',
|
||
|
'write',
|
||
|
'write_',
|
||
|
'writeln',
|
||
|
'writeln_',
|
||
|
|
||
|
# mosel exam mmxprs | sed -n -e "s/ [pf][a-z]* \([a-zA-Z0-9_]*\).*/'\1',/p" | sort -u
|
||
|
'addcut',
|
||
|
'addcuts',
|
||
|
'addmipsol',
|
||
|
'basisstability',
|
||
|
'calcsolinfo',
|
||
|
'clearmipdir',
|
||
|
'clearmodcut',
|
||
|
'command',
|
||
|
'copysoltoinit',
|
||
|
'crossoverlpsol',
|
||
|
'defdelayedrows',
|
||
|
'defsecurevecs',
|
||
|
'delcuts',
|
||
|
'dropcuts',
|
||
|
'estimatemarginals',
|
||
|
'fixglobal',
|
||
|
'flushmsgq',
|
||
|
'getbstat',
|
||
|
'getcnlist',
|
||
|
'getcplist',
|
||
|
'getdualray',
|
||
|
'getiis',
|
||
|
'getiissense',
|
||
|
'getiistype',
|
||
|
'getinfcause',
|
||
|
'getinfeas',
|
||
|
'getlb',
|
||
|
'getlct',
|
||
|
'getleft',
|
||
|
'getloadedlinctrs',
|
||
|
'getloadedmpvars',
|
||
|
'getname',
|
||
|
'getprimalray',
|
||
|
'getprobstat',
|
||
|
'getrange',
|
||
|
'getright',
|
||
|
'getsensrng',
|
||
|
'getsize',
|
||
|
'getsol',
|
||
|
'gettype',
|
||
|
'getub',
|
||
|
'getvars',
|
||
|
'gety',
|
||
|
'hasfeature',
|
||
|
'implies',
|
||
|
'indicator',
|
||
|
'initglobal',
|
||
|
'ishidden',
|
||
|
'isiisvalid',
|
||
|
'isintegral',
|
||
|
'loadbasis',
|
||
|
'loadcuts',
|
||
|
'loadlpsol',
|
||
|
'loadmipsol',
|
||
|
'loadprob',
|
||
|
'maximise',
|
||
|
'maximize',
|
||
|
'minimise',
|
||
|
'minimize',
|
||
|
'postsolve',
|
||
|
'readbasis',
|
||
|
'readdirs',
|
||
|
'readsol',
|
||
|
'refinemipsol',
|
||
|
'rejectintsol',
|
||
|
'repairinfeas',
|
||
|
'repairinfeas_deprec',
|
||
|
'resetbasis',
|
||
|
'resetiis',
|
||
|
'resetsol',
|
||
|
'savebasis',
|
||
|
'savemipsol',
|
||
|
'savesol',
|
||
|
'savestate',
|
||
|
'selectsol',
|
||
|
'setarchconsistency',
|
||
|
'setbstat',
|
||
|
'setcallback',
|
||
|
'setcbcutoff',
|
||
|
'setgndata',
|
||
|
'sethidden',
|
||
|
'setlb',
|
||
|
'setmipdir',
|
||
|
'setmodcut',
|
||
|
'setsol',
|
||
|
'setub',
|
||
|
'setucbdata',
|
||
|
'stopoptimise',
|
||
|
'stopoptimize',
|
||
|
'storecut',
|
||
|
'storecuts',
|
||
|
'unloadprob',
|
||
|
'uselastbarsol',
|
||
|
'writebasis',
|
||
|
'writedirs',
|
||
|
'writeprob',
|
||
|
'writesol',
|
||
|
'xor',
|
||
|
'xprs_addctr',
|
||
|
'xprs_addindic',
|
||
|
|
||
|
# mosel exam mmsystem | sed -n -e "s/ [pf][a-z]* \([a-zA-Z0-9_]*\).*/'\1',/p" | sort -u
|
||
|
'addmonths',
|
||
|
'copytext',
|
||
|
'cuttext',
|
||
|
'deltext',
|
||
|
'endswith',
|
||
|
'erase',
|
||
|
'expandpath',
|
||
|
'fcopy',
|
||
|
'fdelete',
|
||
|
'findfiles',
|
||
|
'findtext',
|
||
|
'fmove',
|
||
|
'formattext',
|
||
|
'getasnumber',
|
||
|
'getchar',
|
||
|
'getcwd',
|
||
|
'getdate',
|
||
|
'getday',
|
||
|
'getdaynum',
|
||
|
'getdays',
|
||
|
'getdirsep',
|
||
|
'getdsoparam',
|
||
|
'getendparse',
|
||
|
'getenv',
|
||
|
'getfsize',
|
||
|
'getfstat',
|
||
|
'getftime',
|
||
|
'gethour',
|
||
|
'getminute',
|
||
|
'getmonth',
|
||
|
'getmsec',
|
||
|
'getoserrmsg',
|
||
|
'getoserror',
|
||
|
'getpathsep',
|
||
|
'getqtype',
|
||
|
'getsecond',
|
||
|
'getsepchar',
|
||
|
'getsize',
|
||
|
'getstart',
|
||
|
'getsucc',
|
||
|
'getsysinfo',
|
||
|
'getsysstat',
|
||
|
'gettime',
|
||
|
'gettmpdir',
|
||
|
'gettrim',
|
||
|
'getweekday',
|
||
|
'getyear',
|
||
|
'inserttext',
|
||
|
'isvalid',
|
||
|
'jointext',
|
||
|
'makedir',
|
||
|
'makepath',
|
||
|
'newtar',
|
||
|
'newzip',
|
||
|
'nextfield',
|
||
|
'openpipe',
|
||
|
'parseextn',
|
||
|
'parseint',
|
||
|
'parsereal',
|
||
|
'parsetext',
|
||
|
'pastetext',
|
||
|
'pathmatch',
|
||
|
'pathsplit',
|
||
|
'qsort',
|
||
|
'quote',
|
||
|
'readtextline',
|
||
|
'regmatch',
|
||
|
'regreplace',
|
||
|
'removedir',
|
||
|
'removefiles',
|
||
|
'setchar',
|
||
|
'setdate',
|
||
|
'setday',
|
||
|
'setdsoparam',
|
||
|
'setendparse',
|
||
|
'setenv',
|
||
|
'sethour',
|
||
|
'setminute',
|
||
|
'setmonth',
|
||
|
'setmsec',
|
||
|
'setoserror',
|
||
|
'setqtype',
|
||
|
'setsecond',
|
||
|
'setsepchar',
|
||
|
'setstart',
|
||
|
'setsucc',
|
||
|
'settime',
|
||
|
'settrim',
|
||
|
'setyear',
|
||
|
'sleep',
|
||
|
'splittext',
|
||
|
'startswith',
|
||
|
'system',
|
||
|
'tarlist',
|
||
|
'textfmt',
|
||
|
'tolower',
|
||
|
'toupper',
|
||
|
'trim',
|
||
|
'untar',
|
||
|
'unzip',
|
||
|
'ziplist',
|
||
|
|
||
|
# mosel exam mmjobs | sed -n -e "s/ [pf][a-z]* \([a-zA-Z0-9_]*\).*/'\1',/p" | sort -u
|
||
|
'canceltimer',
|
||
|
'clearaliases',
|
||
|
'compile',
|
||
|
'connect',
|
||
|
'detach',
|
||
|
'disconnect',
|
||
|
'dropnextevent',
|
||
|
'findxsrvs',
|
||
|
'getaliases',
|
||
|
'getannidents',
|
||
|
'getannotations',
|
||
|
'getbanner',
|
||
|
'getclass',
|
||
|
'getdsoprop',
|
||
|
'getdsopropnum',
|
||
|
'getexitcode',
|
||
|
'getfromgid',
|
||
|
'getfromid',
|
||
|
'getfromuid',
|
||
|
'getgid',
|
||
|
'gethostalias',
|
||
|
'getid',
|
||
|
'getmodprop',
|
||
|
'getmodpropnum',
|
||
|
'getnextevent',
|
||
|
'getnode',
|
||
|
'getrmtid',
|
||
|
'getstatus',
|
||
|
'getsysinfo',
|
||
|
'gettimer',
|
||
|
'getuid',
|
||
|
'getvalue',
|
||
|
'isqueueempty',
|
||
|
'load',
|
||
|
'nullevent',
|
||
|
'peeknextevent',
|
||
|
'resetmodpar',
|
||
|
'run',
|
||
|
'send',
|
||
|
'setcontrol',
|
||
|
'setdefstream',
|
||
|
'setgid',
|
||
|
'sethostalias',
|
||
|
'setmodpar',
|
||
|
'settimer',
|
||
|
'setuid',
|
||
|
'setworkdir',
|
||
|
'stop',
|
||
|
'unload',
|
||
|
'wait',
|
||
|
'waitexpired',
|
||
|
'waitfor',
|
||
|
'waitforend',
|
||
|
)
|
||
|
|
||
|
|
||
|
class MoselLexer(RegexLexer):
|
||
|
"""
|
||
|
For the Mosel optimization language.
|
||
|
|
||
|
.. versionadded:: 2.6
|
||
|
"""
|
||
|
name = 'Mosel'
|
||
|
aliases = ['mosel']
|
||
|
filenames = ['*.mos']
|
||
|
|
||
|
tokens = {
|
||
|
'root': [
|
||
|
(r'\n', Text),
|
||
|
(r'\s+', Text.Whitespace),
|
||
|
(r'!.*?\n', Comment.Single),
|
||
|
(r'\(!(.|\n)*?!\)', Comment.Multiline),
|
||
|
(words((
|
||
|
'and', 'as', 'break', 'case', 'count', 'declarations', 'do',
|
||
|
'dynamic', 'elif', 'else', 'end-', 'end', 'evaluation', 'false',
|
||
|
'forall', 'forward', 'from', 'function', 'hashmap', 'if',
|
||
|
'imports', 'include', 'initialisations', 'initializations', 'inter',
|
||
|
'max', 'min', 'model', 'namespace', 'next', 'not', 'nsgroup',
|
||
|
'nssearch', 'of', 'options', 'or', 'package', 'parameters',
|
||
|
'procedure', 'public', 'prod', 'record', 'repeat', 'requirements',
|
||
|
'return', 'sum', 'then', 'to', 'true', 'union', 'until', 'uses',
|
||
|
'version', 'while', 'with'), prefix=r'\b', suffix=r'\b'),
|
||
|
Keyword.Builtin),
|
||
|
(words((
|
||
|
'range', 'array', 'set', 'list', 'mpvar', 'mpproblem', 'linctr',
|
||
|
'nlctr', 'integer', 'string', 'real', 'boolean', 'text', 'time',
|
||
|
'date', 'datetime', 'returned', 'Model', 'Mosel', 'counter',
|
||
|
'xmldoc', 'is_sos1', 'is_sos2', 'is_integer', 'is_binary',
|
||
|
'is_continuous', 'is_free', 'is_semcont', 'is_semint',
|
||
|
'is_partint'), prefix=r'\b', suffix=r'\b'),
|
||
|
Keyword.Type),
|
||
|
(r'(\+|\-|\*|/|=|<=|>=|\||\^|<|>|<>|\.\.|\.|:=|::|:|in|mod|div)',
|
||
|
Operator),
|
||
|
(r'[()\[\]{},;]+', Punctuation),
|
||
|
(words(FUNCTIONS, prefix=r'\b', suffix=r'\b'), Name.Function),
|
||
|
(r'(\d+\.(?!\.)\d*|\.(?!.)\d+)([eE][+-]?\d+)?', Number.Float),
|
||
|
(r'\d+([eE][+-]?\d+)?', Number.Integer),
|
||
|
(r'[+-]?Infinity', Number.Integer),
|
||
|
(r'0[xX][0-9a-fA-F]+', Number),
|
||
|
(r'"', String.Double, 'double_quote'),
|
||
|
(r'\'', String.Single, 'single_quote'),
|
||
|
(r'(\w+|(\.(?!\.)))', Text),
|
||
|
],
|
||
|
'single_quote': [
|
||
|
(r'\'', String.Single, '#pop'),
|
||
|
(r'[^\']+', String.Single),
|
||
|
],
|
||
|
'double_quote': [
|
||
|
(r'(\\"|\\[0-7]{1,3}\D|\\[abfnrtv]|\\\\)', String.Escape),
|
||
|
(r'\"', String.Double, '#pop'),
|
||
|
(r'[^"\\]+', String.Double),
|
||
|
],
|
||
|
}
|