def def_code_generate(self): generated_code = [] generated_code.append("def "+self.sign+"()") generated_code.append("\tcase @token") epsilon_flag = False for row in self.analized_data: if row[0] != nonToken.epsilon_symbol: frst = [] if row[0] != nonToken.repete_start_symbol: row[0].get_first(frst) else: row[1].get_first(frst) code = "\twhen " + ",".join(frst) generated_code.append(code) for i, col in enumerate(row): if Token.is_generated(col.get_sign()): code = "\t\tchecktoken(\"" + self.sign + "\", " + col.get_entity() + ")" elif nonToken.is_generated(col.get_sign()): code = "\t\t" + col.get_sign() + "()" elif col == nonToken.repete_start_symbol: if Token.is_generated(row[i+1].get_sign()): code = "\t\twhile @token == " + row[i+1].get_entity() + " do" elif nonToken.is_generated(row[i+1].get_sign()): frst = [] row[i+1].get_first(frst) code = "\t\twhile " for ft in frst: code += "@token == " + ft + " || " code = code[:-3] + "do" elif col == nonToken.repete_end_symbol: code = "\t\tend" generated_code.append(code) else: epsilon_flag = True if epsilon_flag: generated_code.append("\telse") else: generated_code.append("\telse") generated_code.append("\t\tputs \"error\"") generated_code.append("\t\texit(1)") generated_code.append("\tend") generated_code.append("end") return generated_code
def analize(self, grammars): self.analized_data = [] for i, grammar in enumerate(grammars): if grammar == '': continue self.analized_data.append([]) for unit in grammar: # if "unit" is already generated in Token, if Token.is_generated(unit): rtn = Token.return_token(unit) # if already generated in Non-Token, elif nonToken.is_generated(unit): rtn = nonToken.return_token(unit) elif unit == nonToken.repete_start_symbol.get_sign(): rtn = nonToken.repete_start_symbol elif unit == nonToken.repete_end_symbol.get_sign(): rtn = nonToken.repete_end_symbol elif unit == nonToken.epsilon_symbol.get_sign(): rtn = nonToken.epsilon_symbol else: print u"Error! Token or Non-Token excepted !" print unit self.analized_data[i].append(rtn)