Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Firefox/third_party/python/pygments/pygments/lexers/   (Fast Lexical Analyzer Version 2.6©)  Datei vom 10.2.2025 mit Größe 10 kB image not shown  

Quelle  dylan.py   Sprache: Python

 
"""
    pygments.lexers.dylan
    ~~~~~~~~~~~~~~~~~~~~~

    Lexers for the Dylan language.

    :copyright: Copyright 2006-2024 by the Pygments team, see AUTHORS.
    :license: BSD, see LICENSE for details.
"""

import re

from pygments.lexer import Lexer, RegexLexer, bygroups, do_insertions, \
    default, line_re
from pygments.token import Comment, Operator, Keyword, Name, String, \
    Number, Punctuation, Generic, Literal, Whitespace

__all__ = ['DylanLexer''DylanConsoleLexer''DylanLidLexer']


class DylanLexer(RegexLexer):
    """
    For the Dylan language.
    """

    name = 'Dylan'
    url = 'http://www.opendylan.org/'
    aliases = ['dylan']
    filenames = ['*.dylan''*.dyl''*.intr']
    mimetypes = ['text/x-dylan']
    version_added = '0.7'

    flags = re.IGNORECASE

    builtins = {
        'subclass''abstract''block''concrete''constant''class',
        'compiler-open''compiler-sideways''domain''dynamic',
        'each-subclass''exception''exclude''function''generic',
        'handler''inherited''inline''inline-only''instance',
        'interface''import''keyword''library''macro''method',
        'module''open''primary''required''sealed''sideways',
        'singleton''slot''thread''variable''virtual'}

    keywords = {
        'above''afterwards''begin''below''by''case''cleanup',
        'create''define''else''elseif''end''export''finally',
        'for''from''if''in''let''local''otherwise''rename',
        'select''signal''then''to''unless''until''use''when',
        'while'}

    operators = {
        '~''+''-''*''|''^''=''==''~=''~==''<''<=',
        '>''>=''&''|'}

    functions = {
        'abort''abs''add''add!''add-method''add-new''add-new!',
        'all-superclasses''always''any?''applicable-method?''apply',
        'aref''aref-setter''as''as-lowercase''as-lowercase!',
        'as-uppercase''as-uppercase!''ash''backward-iteration-protocol',
        'break''ceiling''ceiling/''cerror''check-type''choose',
        'choose-by''complement''compose''concatenate''concatenate-as',
        'condition-format-arguments''condition-format-string''conjoin',
        'copy-sequence''curry''default-handler''dimension''dimensions',
        'direct-subclasses''direct-superclasses''disjoin''do',
        'do-handlers''element''element-setter''empty?''error''even?',
        'every?''false-or''fill!''find-key''find-method''first',
        'first-setter''floor''floor/''forward-iteration-protocol',
        'function-arguments''function-return-values',
        'function-specializers''gcd''generic-function-mandatory-keywords',
        'generic-function-methods''head''head-setter''identity',
        'initialize''instance?''integral?''intersection',
        'key-sequence''key-test''last''last-setter''lcm''limited',
        'list''logand''logbit?''logior''lognot''logxor''make',
        'map''map-as''map-into''max''member?''merge-hash-codes',
        'min''modulo''negative''negative?''next-method',
        'object-class''object-hash''odd?''one-of''pair''pop',
        'pop-last''positive?''push''push-last''range''rank',
        'rcurry''reduce''reduce1''remainder''remove''remove!',
        'remove-duplicates''remove-duplicates!''remove-key!',
        'remove-method''replace-elements!''replace-subsequence!',
        'restart-query''return-allowed?''return-description',
        'return-query''reverse''reverse!''round''round/',
        'row-major-index''second''second-setter''shallow-copy',
        'signal''singleton''size''size-setter''slot-initialized?',
        'sort''sort!''sorted-applicable-methods''subsequence-position',
        'subtype?''table-protocol''tail''tail-setter''third',
        'third-setter''truncate''truncate/''type-error-expected-type',
        'type-error-value''type-for-copy''type-union''union''values',
        'vector''zero?'}

    valid_name = '\\\\?[\\w!&*<>|^$%@\\-+~?/=]+'

    def get_tokens_unprocessed(self, text):
        for index, token, value in RegexLexer.get_tokens_unprocessed(self, text):
            if token is Name:
                lowercase_value = value.lower()
                if lowercase_value in self.builtins:
                    yield index, Name.Builtin, value
                    continue
                if lowercase_value in self.keywords:
                    yield index, Keyword, value
                    continue
                if lowercase_value in self.functions:
                    yield index, Name.Builtin, value
                    continue
                if lowercase_value in self.operators:
                    yield index, Operator, value
                    continue
            yield index, token, value

    tokens = {
        'root': [
            # Whitespace
            (r'\s+', Whitespace),

            # single line comment
            (r'//.*?\n', Comment.Single),

            # lid header
            (r'([a-z0-9-]+)(:)([ \t]*)(.*(?:\n[ \t].+)*)',
                bygroups(Name.Attribute, Operator, Whitespace, String)),

            default('code')  # no header match, switch to code
        ],
        'code': [
            # Whitespace
            (r'\s+', Whitespace),

            # single line comment
            (r'(//.*?)(\n)', bygroups(Comment.Single, Whitespace)),

            # multi-line comment
            (r'/\*', Comment.Multiline, 'comment'),

            # strings and characters
            (r'"', String, 'string'),
            (r"'(\\.|\\[0-7]{1,3}|\\x[a-f0-9]{1,2}|[^\\\'\n])'", String.Char),

            # binary integer
            (r'#b[01]+', Number.Bin),

            # octal integer
            (r'#o[0-7]+', Number.Oct),

            # floating point
            (r'[-+]?(\d*\.\d+(e[-+]?\d+)?|\d+(\.\d*)?e[-+]?\d+)', Number.Float),

            # decimal integer
            (r'[-+]?\d+', Number.Integer),

            # hex integer
            (r'#x[0-9a-f]+', Number.Hex),

            # Macro parameters
            (r'(\?' + valid_name + ')(:)'
             r'(token|name|variable|expression|body|case-body|\*)',
                bygroups(Name.Tag, Operator, Name.Builtin)),
            (r'(\?)(:)(token|name|variable|expression|body|case-body|\*)',
                bygroups(Name.Tag, Operator, Name.Builtin)),
            (r'\?' + valid_name, Name.Tag),

            # Punctuation
            (r'(=>|::|#\(|#\[|##|\?\?|\?=|\?|[(){}\[\],.;])', Punctuation),

            # Most operators are picked up as names and then re-flagged.
            # This one isn't valid in a name though, so we pick it up now.
            (r':=', Operator),

            # Pick up #t / #f before we match other stuff with #.
            (r'#[tf]', Literal),

            # #"foo" style keywords
            (r'#"', String.Symbol, 'keyword'),

            # #rest, #key, #all-keys, etc.
            (r'#[a-z0-9-]+', Keyword),

            # required-init-keyword: style keywords.
            (valid_name + ':', Keyword),

            # class names
            ('<' + valid_name + '>', Name.Class),

            # define variable forms.
            (r'\*' + valid_name + r'\*', Name.Variable.Global),

            # define constant forms.
            (r'\$' + valid_name, Name.Constant),

            # everything else. We re-flag some of these in the method above.
            (valid_name, Name),
        ],
        'comment': [
            (r'[^*/]+', Comment.Multiline),
            (r'/\*', Comment.Multiline, '#push'),
            (r'\*/', Comment.Multiline, '#pop'),
            (r'[*/]', Comment.Multiline)
        ],
        'keyword': [
            (r'"', String.Symbol, '#pop'),
            (r'[^\\"]+', String.Symbol),  # all other characters
        ],
        'string': [
            (r'"', String, '#pop'),
            (r'\\([\\abfnrtv"\']|x[a-f0-9]{2,4}|[0-7]{1,3})', String.Escape),
            (r'[^\\"\n]+', String),  # all other characters
            (r'\\\n', String),  # line continuation
            (r'\\', String),  # stray backslash
        ]
    }


class DylanLidLexer(RegexLexer):
    """
    For Dylan LID (Library Interchange Definition) files.
    """

    name = 'DylanLID'
    aliases = ['dylan-lid''lid']
    filenames = ['*.lid''*.hdp']
    mimetypes = ['text/x-dylan-lid']
    url = 'http://www.opendylan.org/'
    version_added = '1.6'
    flags = re.IGNORECASE

    tokens = {
        'root': [
            # Whitespace
            (r'\s+', Whitespace),

            # single line comment
            (r'(//.*?)(\n)', bygroups(Comment.Single, Whitespace)),

            # lid header
            (r'(.*?)(:)([ \t]*)(.*(?:\n[ \t].+)*)',
             bygroups(Name.Attribute, Operator, Whitespace, String)),
        ]
    }


class DylanConsoleLexer(Lexer):
    """
    For Dylan interactive console output.

    This is based on a copy of the RubyConsoleLexer.
    """
    name = 'Dylan session'
    aliases = ['dylan-console''dylan-repl']
    filenames = ['*.dylan-console']
    mimetypes = ['text/x-dylan-console']
    url = 'http://www.opendylan.org/'
    version_added = '1.6'
    _example = 'dylan-console/console'

    _prompt_re = re.compile(r'\?| ')

    def get_tokens_unprocessed(self, text):
        dylexer = DylanLexer(**self.options)

        curcode = ''
        insertions = []
        for match in line_re.finditer(text):
            line = match.group()
            m = self._prompt_re.match(line)
            if m is not None:
                end = m.end()
                insertions.append((len(curcode),
                                   [(0, Generic.Prompt, line[:end])]))
                curcode += line[end:]
            else:
                if curcode:
                    yield from do_insertions(insertions,
                                             dylexer.get_tokens_unprocessed(curcode))
                    curcode = ''
                    insertions = []
                yield match.start(), Generic.Output, line
        if curcode:
            yield from do_insertions(insertions,
                                     dylexer.get_tokens_unprocessed(curcode))

Messung V0.5
C=92 H=94 G=92

¤ Dauer der Verarbeitung: 0.4 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.