Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes14kdownloads
qvt.py154 linesDownload Raw Back to lexers
1"""2    pygments.lexers.qvt3    ~~~~~~~~~~~~~~~~~~~4 5    Lexer for QVT Operational language.6 7    :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.8    :license: BSD, see LICENSE for details.9"""10 11from pygments.lexer import RegexLexer, bygroups, include, combined, default, \12    words13from pygments.token import Text, Comment, Operator, Keyword, Punctuation, \14    Name, String, Number15 16__all__ = ['QVToLexer']17 18 19class QVToLexer(RegexLexer):20    """21    For the QVT Operational Mapping language.22 23    Reference for implementing this: «Meta Object Facility (MOF) 2.024    Query/View/Transformation Specification», Version 1.1 - January 201125    (https://www.omg.org/spec/QVT/1.1/), see §8.4, «Concrete Syntax» in26    particular.27 28    Notable tokens assignments:29 30    - Name.Class is assigned to the identifier following any of the following31      keywords: metamodel, class, exception, primitive, enum, transformation32      or library33 34    - Name.Function is assigned to the names of mappings and queries35 36    - Name.Builtin.Pseudo is assigned to the pre-defined variables 'this',37      'self' and 'result'.38    """39    # With obvious borrowings & inspiration from the Java, Python and C lexers40 41    name = 'QVTO'42    aliases = ['qvto', 'qvt']43    filenames = ['*.qvto']44    url = 'https://www.omg.org/spec/QVT/1.1'45    version_added = ''46 47    tokens = {48        'root': [49            (r'\n', Text),50            (r'[^\S\n]+', Text),51            (r'(--|//)(\s*)(directive:)?(.*)$',52             bygroups(Comment, Comment, Comment.Preproc, Comment)),53            # Uncomment the following if you want to distinguish between54            # '/*' and '/**', à la javadoc55            # (r'/[*]{2}(.|\n)*?[*]/', Comment.Multiline),56            (r'/[*](.|\n)*?[*]/', Comment.Multiline),57            (r'\\\n', Text),58            (r'(and|not|or|xor|##?)\b', Operator.Word),59            (r'(:{1,2}=|[-+]=)\b', Operator.Word),60            (r'(@|<<|>>)\b', Keyword),  # stereotypes61            (r'!=|<>|==|=|!->|->|>=|<=|[.]{3}|[+/*%=<>&|.~]', Operator),62            (r'[]{}:(),;[]', Punctuation),63            (r'(true|false|unlimited|null)\b', Keyword.Constant),64            (r'(this|self|result)\b', Name.Builtin.Pseudo),65            (r'(var)\b', Keyword.Declaration),66            (r'(from|import)\b', Keyword.Namespace, 'fromimport'),67            (r'(metamodel|class|exception|primitive|enum|transformation|'68             r'library)(\s+)(\w+)',69             bygroups(Keyword.Word, Text, Name.Class)),70            (r'(exception)(\s+)(\w+)',71             bygroups(Keyword.Word, Text, Name.Exception)),72            (r'(main)\b', Name.Function),73            (r'(mapping|helper|query)(\s+)',74             bygroups(Keyword.Declaration, Text), 'operation'),75            (r'(assert)(\s+)\b', bygroups(Keyword, Text), 'assert'),76            (r'(Bag|Collection|Dict|OrderedSet|Sequence|Set|Tuple|List)\b',77             Keyword.Type),78            include('keywords'),79            ('"', String, combined('stringescape', 'dqs')),80            ("'", String, combined('stringescape', 'sqs')),81            include('name'),82            include('numbers'),83            # (r'([a-zA-Z_]\w*)(::)([a-zA-Z_]\w*)',84            # bygroups(Text, Text, Text)),85        ],86 87        'fromimport': [88            (r'(?:[ \t]|\\\n)+', Text),89            (r'[a-zA-Z_][\w.]*', Name.Namespace),90            default('#pop'),91        ],92 93        'operation': [94            (r'::', Text),95            (r'(.*::)([a-zA-Z_]\w*)([ \t]*)(\()',96             bygroups(Text, Name.Function, Text, Punctuation), '#pop')97        ],98 99        'assert': [100            (r'(warning|error|fatal)\b', Keyword, '#pop'),101            default('#pop'),  # all else: go back102        ],103 104        'keywords': [105            (words((106                'abstract', 'access', 'any', 'assert', 'blackbox', 'break',107                'case', 'collect', 'collectNested', 'collectOne', 'collectselect',108                'collectselectOne', 'composes', 'compute', 'configuration',109                'constructor', 'continue', 'datatype', 'default', 'derived',110                'disjuncts', 'do', 'elif', 'else', 'end', 'endif', 'except',111                'exists', 'extends', 'forAll', 'forEach', 'forOne', 'from', 'if',112                'implies', 'in', 'inherits', 'init', 'inout', 'intermediate',113                'invresolve', 'invresolveIn', 'invresolveone', 'invresolveoneIn',114                'isUnique', 'iterate', 'late', 'let', 'literal', 'log', 'map',115                'merges', 'modeltype', 'new', 'object', 'one', 'ordered', 'out',116                'package', 'population', 'property', 'raise', 'readonly',117                'references', 'refines', 'reject', 'resolve', 'resolveIn',118                'resolveone', 'resolveoneIn', 'return', 'select', 'selectOne',119                'sortedBy', 'static', 'switch', 'tag', 'then', 'try', 'typedef',120                'unlimited', 'uses', 'when', 'where', 'while', 'with', 'xcollect',121                'xmap', 'xselect'), suffix=r'\b'), Keyword),122        ],123 124        # There is no need to distinguish between String.Single and125        # String.Double: 'strings' is factorised for 'dqs' and 'sqs'126        'strings': [127            (r'[^\\\'"\n]+', String),128            # quotes, percents and backslashes must be parsed one at a time129            (r'[\'"\\]', String),130        ],131        'stringescape': [132            (r'\\([\\btnfr"\']|u[0-3][0-7]{2}|u[0-7]{1,2})', String.Escape)133        ],134        'dqs': [  # double-quoted string135            (r'"', String, '#pop'),136            (r'\\\\|\\"', String.Escape),137            include('strings')138        ],139        'sqs': [  # single-quoted string140            (r"'", String, '#pop'),141            (r"\\\\|\\'", String.Escape),142            include('strings')143        ],144        'name': [145            (r'[a-zA-Z_]\w*', Name),146        ],147        # numbers: excerpt taken from the python lexer148        'numbers': [149            (r'(\d+\.\d*|\d*\.\d+)([eE][+-]?[0-9]+)?', Number.Float),150            (r'\d+[eE][+-]?[0-9]+', Number.Float),151            (r'\d+', Number.Integer)152        ],153    }154 
codekingpro/portable-devtools · Team Ai