def parse(self, feeder): self.feeder = feeder self.tokeniser = Tokeniser(feeder) self.current_token = None self.bracket_depth = 0 self.box_depth = 0 return self.parse_e()
def find_symbol_name(code, cursor_pos): ''' Given a string of code tokenize it until cursor_pos and return the final symbol name. returns None if no symbol is found at cursor_pos. >>> MathicsKernel.find_symbol_name('1 + Sin', 6) 'System`Sin' >>> MathicsKernel.find_symbol_name('1 + ` Sin[Cos[2]] + x', 8) 'System`Sin' >>> MathicsKernel.find_symbol_name('Sin `', 4) ''' tokeniser = Tokeniser(SingleLineFeeder(code)) start_pos = None end_pos = None name = None while True: try: token = tokeniser.next() except ScanError: continue if token.tag == 'END': break # ran out of tokens # find first token which contains cursor_pos if tokeniser.pos >= cursor_pos: if token.tag == 'Symbol': name = token.text start_pos = token.pos end_pos = tokeniser.pos break return start_pos, end_pos, name
def tokens(self, code): tokeniser = Tokeniser(SingleLineFeeder(code)) tokens = [] while True: token = tokeniser.next() if token.tag == 'END': break else: tokens.append(token) return tokens