示例#1
0
 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()
示例#2
0
文件: kernel.py 项目: gjvnq/Mathics
    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
示例#3
0
 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