Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

Necesito ayuda para revisar este c digo y asegurarme de que se lea desde un lenguaje de programaci n de archivos C y lo procese

Necesito ayuda para revisar este cdigo y asegurarme de que se lea desde un lenguaje de programacin de archivos C y lo procese a travs de un analizador lxico, de sintaxis y semntico y luego genere un archivo objeto .o con el cdigo transformado a cdigo ensamblador. importar pandas como pd LEXER_TABLE = pd.DataFrame(columns =['TOKEN','IDENTITY'], index = range(1)) def lexer(code): SYMBOLS =['(',')',';',',',':',"'"] SYMBOLS_1=['(',')',';',',',':',"'",'+','=','>'] SYMBOLS_1_DUP =[['Abrir corchetes', '('],['cerrar corchetes', ')'],['punto y coma', ';'],['coma',','],['dos puntos' ,':'],['comilla simple', "'"],['ms','+'],['igual','='],['mayor que', '>']] palabras clave =['enteros', 'principal', 'mientras', 'comienzo', 'fin', 'expr', 'procedimiento', 'Si', 'elseif', 'else', 'entonces', 'printf', ' and', 'o'] PALABRAS CLAVE = SMBOLOS_1+ palabras clave espacio_blanco ='' lexema ='' tokens =[] cdigo = code.replace('\t','') para i, char en enumerar(cdigo): si char != espacio_blanco: lexema += char if (i+1< len(cdigo)): si cdigo[i+1]== espacio_blanco o cdigo[i +1] en PALABRAS CLAVE o lexema en PALABRAS CLAVE: si lexema !='': tokens.append(lexeme.replace('','')) lexema ='' j =0 para i en tokens: para k en SYMBOLS_1_DUP: si i == k[1]: LEXER_TABLE.at[j, 'TOKEN' ]= i LEXER_TABLE.at[j, 'IDENTITY']= k[0] j +=1 descanso si i en palabras clave: LEXER_TABLE.at[j, 'TOKEN']= i LEXER_TABLE.at[j, 'IDENTITY']= 'palabra clave' j +=1 continuar si i.isdigit(): LEXER_TABLE.at[j, 'TOKEN']= i LEXER_TABLE.at[j, 'IDENTITY']='Dgito' j +=1 continuar elif no en PALABRAS CLAVE: LEXER_TABLE.at[j, 'TOKEN']= i LEXER_TABLE.at[j, 'IDENTITY']= 'Identificador' j +=1 continuar print(f"Lexer Tokens: {tokens}") devolver tokens si __name__=="__main__": cdigo ="3+5*(10-20)" tokens = lexer(cdigo) print("tokens:", tokens) clase Nodo: def __init__(self, tipo, valor = Ninguno): self .type = tipo self.value = valor self.children =[] def add_child(self,nodo): self.children.append(nodo) clase Analizador: def __init__(self, tokens): self.tokens = tokens self.current_token_index =0 def parse(self): regresa self.expr() def expr(self): nodo = self.term() mientras self.current_token() en ['+','-']: token = self.current_token() self.eat(token) nodo = Nodo(tipo = token, valor = token) node.add_child(self.term()) devuelve nodo def term(self): nodo = self.factor() mientras self.current_token() en ['*','/']: token = self.current.token() self.eat(token) nodo = Nodo(tipo = token, valor = token) node.add_child(self.factor()) nodo de retorno def factor(self): token = self.current_token() if token.isdigit(): self.eat(token) return Nodo(tipo ='NMERO', valor = int(token)) elif token =='(': self.eat('(') nodo = self.expr() self.eat(')') devolver nodo def current_token(self): devolver self.tokens[self.current_token_index] def comer(self,token_type): si self .current_token()== token_type: self.current_token_index +=1 else: rise Exception(f"Token inesperado: {self.current_token()}") if __name__=="__main__": cdigo ="3+5*(10-20)" tokens = lexer(code) parser = Parser(tokens) try: ast = parser.parse() print("AST analizado exitosamente") excepto excepcin como e: print(f"error de anlisis: {e}") clase CodeGenerator: def __init__(self, ast): self.ast = ast self.code =[] self.temp_count =0 def generate_code(self): self.visit(self.ast) return self.code def visit(self, nodo): if node.type =='NMERO': self.code.append(f"LOAD {node.value}") elif node.type in ['+','-','*','/']: izquierda = nodo.nios[0] self.visit(izquierda) derecha = nodo.nios[1] self.visita(derecha) self.code.append(f"{node.type} TEMP{self.temp_count}") self.temp_count +=1 if __name__=="__main__": cdigo ="3+5*(10-20)" tokens = lexer(cdigo) parser = Parser(tokens) prueba: ast = parser.parse() codegen = CodeGenerator(ast) object_code = codegen.generate__code() print("Cdigo de objeto generado: ") para la lnea en object_code: print(line) excepto Excepcin como e: print(f"error de anlisis: {e}")

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Fundamentals Of Database Systems

Authors: Ramez Elmasri, Sham Navathe

4th Edition

0321122267, 978-0321122261

More Books

Students also viewed these Databases questions

Question

Connect MATH Hosted by ALEKS Co uestion 6 of 8 (1 point) | Atten

Answered: 1 week ago