Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes14kdownloads
monte.py204 linesDownload Raw Back to lexers
1"""2    pygments.lexers.monte3    ~~~~~~~~~~~~~~~~~~~~~4 5    Lexer for the Monte programming language.6 7    :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.8    :license: BSD, see LICENSE for details.9"""10 11from pygments.token import Comment, Error, Keyword, Name, Number, Operator, \12    Punctuation, String, Whitespace13from pygments.lexer import RegexLexer, include, words14 15__all__ = ['MonteLexer']16 17 18# `var` handled separately19# `interface` handled separately20_declarations = ['bind', 'def', 'fn', 'object']21_methods = ['method', 'to']22_keywords = [23    'as', 'break', 'catch', 'continue', 'else', 'escape', 'exit', 'exports',24    'extends', 'finally', 'for', 'guards', 'if', 'implements', 'import',25    'in', 'match', 'meta', 'pass', 'return', 'switch', 'try', 'via', 'when',26    'while',27]28_operators = [29    # Unary30    '~', '!',31    # Binary32    '+', '-', '*', '/', '%', '**', '&', '|', '^', '<<', '>>',33    # Binary augmented34    '+=', '-=', '*=', '/=', '%=', '**=', '&=', '|=', '^=', '<<=', '>>=',35    # Comparison36    '==', '!=', '<', '<=', '>', '>=', '<=>',37    # Patterns and assignment38    ':=', '?', '=~', '!~', '=>',39    # Calls and sends40    '.', '<-', '->',41]42_escape_pattern = (43    r'(?:\\x[0-9a-fA-F]{2}|\\u[0-9a-fA-F]{4}|\\U[0-9a-fA-F]{8}|'44    r'\\["\'\\bftnr])')45# _char = _escape_chars + [('.', String.Char)]46_identifier = r'[_a-zA-Z]\w*'47 48_constants = [49    # Void constants50    'null',51    # Bool constants52    'false', 'true',53    # Double constants54    'Infinity', 'NaN',55    # Special objects56    'M', 'Ref', 'throw', 'traceln',57]58 59_guards = [60    'Any', 'Binding', 'Bool', 'Bytes', 'Char', 'DeepFrozen', 'Double',61    'Empty', 'Int', 'List', 'Map', 'Near', 'NullOk', 'Same', 'Selfless',62    'Set', 'Str', 'SubrangeGuard', 'Transparent', 'Void',63]64 65_safeScope = [66    '_accumulateList', '_accumulateMap', '_auditedBy', '_bind',67    '_booleanFlow', '_comparer', '_equalizer', '_iterForever', '_loop',68    '_makeBytes', '_makeDouble', '_makeFinalSlot', '_makeInt', '_makeList',69    '_makeMap', '_makeMessageDesc', '_makeOrderedSpace', '_makeParamDesc',70    '_makeProtocolDesc', '_makeSourceSpan', '_makeString', '_makeVarSlot',71    '_makeVerbFacet', '_mapExtract', '_matchSame', '_quasiMatcher',72    '_slotToBinding', '_splitList', '_suchThat', '_switchFailed',73    '_validateFor', 'b__quasiParser', 'eval', 'import', 'm__quasiParser',74    'makeBrandPair', 'makeLazySlot', 'safeScope', 'simple__quasiParser',75]76 77 78class MonteLexer(RegexLexer):79    """80    Lexer for the Monte programming language.81    """82    name = 'Monte'83    url = 'https://monte.readthedocs.io/'84    aliases = ['monte']85    filenames = ['*.mt']86    version_added = '2.2'87 88    tokens = {89        'root': [90            # Comments91            (r'#[^\n]*\n', Comment),92 93            # Docstrings94            # Apologies for the non-greedy matcher here.95            (r'/\*\*.*?\*/', String.Doc),96 97            # `var` declarations98            (r'\bvar\b', Keyword.Declaration, 'var'),99 100            # `interface` declarations101            (r'\binterface\b', Keyword.Declaration, 'interface'),102 103            # method declarations104            (words(_methods, prefix='\\b', suffix='\\b'),105             Keyword, 'method'),106 107            # All other declarations108            (words(_declarations, prefix='\\b', suffix='\\b'),109             Keyword.Declaration),110 111            # Keywords112            (words(_keywords, prefix='\\b', suffix='\\b'), Keyword),113 114            # Literals115            ('[+-]?0x[_0-9a-fA-F]+', Number.Hex),116            (r'[+-]?[_0-9]+\.[_0-9]*([eE][+-]?[_0-9]+)?', Number.Float),117            ('[+-]?[_0-9]+', Number.Integer),118            ("'", String.Double, 'char'),119            ('"', String.Double, 'string'),120 121            # Quasiliterals122            ('`', String.Backtick, 'ql'),123 124            # Operators125            (words(_operators), Operator),126 127            # Verb operators128            (_identifier + '=', Operator.Word),129 130            # Safe scope constants131            (words(_constants, prefix='\\b', suffix='\\b'),132             Keyword.Pseudo),133 134            # Safe scope guards135            (words(_guards, prefix='\\b', suffix='\\b'), Keyword.Type),136 137            # All other safe scope names138            (words(_safeScope, prefix='\\b', suffix='\\b'),139             Name.Builtin),140 141            # Identifiers142            (_identifier, Name),143 144            # Punctuation145            (r'\(|\)|\{|\}|\[|\]|:|,', Punctuation),146 147            # Whitespace148            (' +', Whitespace),149 150            # Definite lexer errors151            ('=', Error),152        ],153        'char': [154            # It is definitely an error to have a char of width == 0.155            ("'", Error, 'root'),156            (_escape_pattern, String.Escape, 'charEnd'),157            ('.', String.Char, 'charEnd'),158        ],159        'charEnd': [160            ("'", String.Char, '#pop:2'),161            # It is definitely an error to have a char of width > 1.162            ('.', Error),163        ],164        # The state of things coming into an interface.165        'interface': [166            (' +', Whitespace),167            (_identifier, Name.Class, '#pop'),168            include('root'),169        ],170        # The state of things coming into a method.171        'method': [172            (' +', Whitespace),173            (_identifier, Name.Function, '#pop'),174            include('root'),175        ],176        'string': [177            ('"', String.Double, 'root'),178            (_escape_pattern, String.Escape),179            (r'\n', String.Double),180            ('.', String.Double),181        ],182        'ql': [183            ('`', String.Backtick, 'root'),184            (r'\$' + _escape_pattern, String.Escape),185            (r'\$\$', String.Escape),186            (r'@@', String.Escape),187            (r'\$\{', String.Interpol, 'qlNest'),188            (r'@\{', String.Interpol, 'qlNest'),189            (r'\$' + _identifier, Name),190            ('@' + _identifier, Name),191            ('.', String.Backtick),192        ],193        'qlNest': [194            (r'\}', String.Interpol, '#pop'),195            include('root'),196        ],197        # The state of things immediately following `var`.198        'var': [199            (' +', Whitespace),200            (_identifier, Name.Variable, '#pop'),201            include('root'),202        ],203    }204 
codekingpro/portable-devtools · Team Ai