def analyzation(self): buff = Buffer() stat = State() dict_state = dict_of_states() self.curr_p = -1 self.curr_symbs[1] = self.text[0] while stat.get_state()!=3: self.get_next() print(self.curr_p,' ', self.curr_symbs[0], self.define_symb(self.curr_symbs[0]), stat.get_state() ) if stat.get_state() == 1: next_state = dict_state.find_state( stat.get_state(), self.define_symb(self.curr_symbs[0]), self.define_symb(self.curr_symbs[0])) self.state_act(stat.get_state(),buff, next_state ) stat.set_state( next_state ) print('->' ,stat.get_state()) next_state = dict_state.find_state( stat.get_state(), self.define_symb(self.curr_symbs[0]), self.define_symb(self.curr_symbs[1])) print("BUFFER",buff.get_buff()) self.state_act(stat.get_state(),buff, next_state) stat.set_state( next_state ) print('->' ,stat.get_state()) self.state_act(stat.get_state(),buff, 3) for i in range(len(self.Lexems_arr)): print(self.Lexems_arr[i].get())
def get_lex(self): buff = Buffer() stat = State() dict_state = dict_of_states() if self.curr_symbs[1] == '': self.curr_symbs[1] = self.get_next_symb() while True: self.get__next() if stat.get_state() == 1: next_state = dict_state.find_state( stat.get_state(), self.define_symb(self.curr_symbs[1]), self.define_symb(self.curr_symbs[0])) stat.set_state(next_state) lexem_type = stat.get_state() next_state = dict_state.find_state( stat.get_state(), self.define_symb(self.curr_symbs[0]), self.define_symb(self.curr_symbs[1])) #print('states ', stat.get_state(), '--->' ,next_state, ' ; symbs ', self.curr_symbs[0],"---> ", self.curr_symbs[1], self.curr_l, self.curr_p, buff.get_buff()) self.state_action(stat.get_state(), buff) if stat.get_state() == 7: #строка, номер символа и текст сообщения об ошибке if self.curr_symbs[0] == "": str_err = str(self.curr_l) + ":" + str( self.curr_p) + " Unexpected end of file" raise ValueError(str_err) str_err = str(self.curr_l) + ":" + str( self.curr_p ) + " Unexpected symbol " + "'" + self.curr_symbs[0] + "'" raise ValueError(str_err) # ВЫНЕСТИ В ОТДЕЛЬНУЮ ФУНКЦИЮ if stat.get_state() == 4 and self.define_symb( self.curr_symbs[0]) == "N" and self.curr_symbs[1] == ".": self.get__next() if self.define_symb(self.curr_symbs[1]) == "N": next_state = 41 buff.add_buff(self.curr_symbs[0]) elif self.define_symb(self.curr_symbs[1]) == ".": self.init_array = True return self.create_lex(buff, 4) else: next_state = 7 str_err = str( self.curr_l) + ":" + str(self.curr_p + 1) + " Expected number or '.'" raise ValueError(str_err) #buff.add_buff(self.curr_symbs[0]) # ---> stat.set_state(next_state) #print(lexem_type, self.curr_symbs[0], self.lexem_pos) if stat.get_state() == 1: #if lexem_type == 80: #buff.clear_buff() #self.lexem_pos = -1 if buff.get_buff() != "": if lexem_type == 9: if buff.get_buff()[0] == buff.get_buff()[-1] == "'": return self.create_lex(buff, 5) if buff.get_buff()[0] == "{" and buff.get_buff( )[-1] == "}": return self.create_lex(buff, 81) if not buff.get_buff() in self.Delimiters: str_err = str(self.curr_l) + ":" + str( self.curr_p ) + " Wrong delimiter " + "'" + buff.get_buff( ) + "'" raise ValueError(str_err) #stat.set_state(7) else: return self.create_lex(buff, lexem_type) else: return self.create_lex(buff, lexem_type) if stat.get_state() == 3: if buff.get_buff() == "": return self.create_lex(buff, 3) else: return self.create_lex( buff, dict_state.find_state( 1, self.define_symb(self.curr_symbs[0]), self.define_symb(self.curr_symbs[0])))