def __init__(self, lexer, parser, parent): Token.__init__(self, 'Term', lexer, parser, parent) self.term = None self.lft = None self.rgt = None self.op = None # Expect a term. ttype, token = lexer.token() if lexer.current_is('varname'): if not parent.is_defined(token): lexer.error('Undeclared variable %s' % token, self, ValueError) self.term = Variable(lexer, parser, parent) elif lexer.current_is('open_function_call'): self.term = FunctionCall(lexer, parser, parent) elif lexer.current_is('string_delimiter'): self.term = String(lexer, parser, parent) elif lexer.next_if('number'): self.term = Number(token) elif lexer.next_if('keyword', 'false'): self.term = Number(0) elif lexer.next_if('keyword', 'true'): self.term = Number(1) elif lexer.next_if('octal_number'): self.term = Number(int(token[1:], 8)) elif lexer.next_if('hex_number'): self.term = Number(int(token[2:], 16)) elif lexer.current_is('regex_delimiter'): self.term = Regex(lexer, parser, parent) else: lexer.syntax_error('Expected term but got %s' % ttype, self) self.mark_end()
def __init__(self, lexer, parser, parent): self.delimiter = lexer.token()[1] # String parser collects the regex. String.__init__(self, lexer, parser, parent) self.n_groups = len(bracket_re.findall(self.string)) self.flags = 0 # Collect modifiers. lexer.set_grammar(modifier_grammar_c) while lexer.current_is('modifier'): if lexer.next_if('modifier', 'i'): self.flags = self.flags | re.I else: modifier = lexer.token()[1] error = 'Invalid regular expression modifier "%s"' % modifier lexer.syntax_error(error, self) lexer.restore_grammar() # Compile the regular expression. try: re.compile(self.string, self.flags) except Exception, e: error = 'Invalid regular expression %s: %s' % (repr(self.string), e) lexer.syntax_error(error, self)
def value(self, context): pattern = String.value(self, context)[0] return re.compile(pattern, self.flags)