Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

Necesito ayuda para integrar un generador de c digo ( genera un c digo objeto . o del c digo C le do desde un

Necesito ayuda para integrar un generador de cdigo (genera un cdigo objeto .o del cdigo C ledo desde un txt) en este analizador lxico, sintctico y semntico: import re import tkinter as tk from tkinter import filedialog, Text import pandas as pd import numpy as np # Analizador lxico LEXER_TABLE = pd.DataFrame(columnas=['TOKEN', 'IDENTITY'], index=range(1)) def lexer(cdigo): SMBOLOS =['(',')',';',',',':','\''] SYMBOLS_1=['(',')',';',',',':','\'','+','=','>'] SYMBOLS_1_DUP =[['Abrir corchetes', '('],['Cerrar corchetes', ')'],['Punto y coma', ';'],['Coma',','],['Dolo',':'],['Comilla simple', '\''],['ms','+'],['igual','='],['mayor','>']] palabras clave =['entero', 'principal', 'mientras', 'comienzo', 'fin', 'expr', '','', 'Procedimiento', 'Si', 'elseif', 'else' , 'entonces', 'printf', 'y','o'] palabras clave_def =[['t', 'integer'],['m', 'principal'],['l', 'mientras'],['b', 'comienzo'],['d', 'fin'],['e', 'expr'],['s',''],['o','+'],['o','='],['n',''],['p', 'Procedimiento'],['x','If'],['z', 'elseif'],[' y','ms'],['f', 'entonces'],['c', 'printf'],['&','y'],['|','o'],[' o','>']] PALABRAS CLAVE = SMBOLOS_1+ palabras clave espacio_blanco ='' lexema ='' tokens =[] cdigo = code.replace('\t','') para i, char en enumerar(cdigo): if char != espacio_blanco: lexema += char if (i +1< len(cdigo)): if cdigo[i +1]== espacio_blanco o cdigo[i +1] en PALABRAS CLAVE o lexema en PALABRAS CLAVE: if 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 estoy en PALABRAS CLAVE: LEXER_TABLE.at[j, 'TOKEN']= i LEXER_TABLE.at[j, 'IDENTITY']= 'Identificador' j +=1 print(f"Lexer Tokens: {tokens}") # Salida de depuracin tokens de retorno # Analizadores de sintaxis y semntica (ejemplo simplificado) EPSILON ="\epsi " gramtica =["S->E","E->E+T","E->T","T->T*F ","T->F","F->(E)","F->id"] def get_productions(X): producciones =[] para prod en gramtica: lhs, rhs = prod.split('->') if lhs == X: rhs ='.'+rhs Productions.append('->'.join([lhs, rhs])) return producciones def cierre(I): para produccin, a en I: if produccin.endswith("."): continuar lhs, rhs = produccin.split('->') alfa, B_beta = rhs.split('.') B = B_beta[0] beta = B_beta[1:] beta_a = a si beta: beta_a = beta[0]+a first_beta_a = first(beta_a) for b in first_beta_a: B_productions = get_productions(B) for gamma in B_productions: new_item =(gamma, b) if (new_item not in I): I .append(new_item) return Definitivamente get_symbols(grammar): terminales = set() non_terminals = set() para produccin en gramtica: lhs, rhs = production.split('->') non_terminals.add(lhs) for x in rhs: terminales.add(x) terminales = terminales.difference(non_terminals) terminales.add('$') devuelve terminales, non_terminals def first(symbols): final_set = set() para X en smbolos: first_set = set() if isTerminal(X): final_set.add(X) else: para produccin en gramtica: lhs, rhs = production.split('->') if lhs == X: para i en rango(len(rhs)): y = rhs[i] si y == X: continuar first_y = first(y) si EPSILON en first_y: first_y = first_y.replace(EPSILON,"") first_set.add(first_y) continuar de lo contrario: first_set.add(first_y) romper para i en first_set: si EPSILON no est en i: final_set.add(i) ms: i = i.replace(EPSILON,"") final_set.add(i) return "".join(list(final_set)) def isTerminal(symbol ): smbolo de retorno en terminales def shift_dot(produccin): lhs, rhs = production.split('->') x, y = rhs.split(".")

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

Beginning VB.NET Databases

Authors: Thearon Willis

1st Edition

1594864217, 978-1594864216

More Books

Students also viewed these Databases questions