from .AST import Primitive, UnaryOp, ContextValue, BinOp, FunctionCall, ValueAccess, Object, List from collections import namedtuple import re from .shared import TemplateError
while token isnotNoneand (token.kind == "string"or token.kind == "identifier"):
key = token.value if token.kind == "string":
key = parse_string(key)
self.take_token(token.kind)
self.take_token(":")
value = self.parse() if value isNone: raise SyntaxError.unexpected(self.current_token, expectedTokens)
obj[key] = value if self.current_token and self.current_token.kind == "}": break else:
self.take_token(",")
token = self.current_token
self.take_token("}")
node = Object(objToken, obj)
return node
def parse_string(string): return string[1:-1]
class Tokenizer(object): def __init__(self, ignore, patterns, tokens):
self.ignore = ignore
self.patterns = patterns
self.tokens = tokens # build a regular expression to generate a sequence of tokens
token_patterns = [ '({})'.format(self.patterns.get(t, re.escape(t))) for t in self.tokens] if self.ignore:
token_patterns.append('(?:{})'.format(self.ignore))
self.token_re = re.compile('^(?:' + '|'.join(token_patterns) + ')')
def generate_tokens(self, source):
offset = 0 whileTrue:
start = offset
remainder = source[offset:]
mo = self.token_re.match(remainder) ifnot mo: if remainder: raise SyntaxError( "Unexpected input for '{}' at '{}'".format(source, remainder)) break
offset += mo.end()
# figure out which token matched (note that idx is 0-based)
indexes = [idx for idx, grp in enumerate(mo.groups()) if grp isnotNone] if indexes:
idx = indexes[0] yield Token(
kind=self.tokens[idx],
value=mo.group(idx + 1), # (mo.group is 1-based)
start=start,
end=offset)
¤ Dauer der Verarbeitung: 0.15 Sekunden
(vorverarbeitet)
¤
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 ist noch experimentell.