Untitled

mail@pastecode.io avatar
unknown
plain_text
7 months ago
1.9 kB
2
Indexable
Never
import pandas as pd

class node_stack:
  def __init__(self, symbol, lexeme):
    global count
    self.symbol = symbol
    self.lexeme = lexeme
    self.id = count + 1
    count += 1

class node_tree:
  def __init__(self, id, symbol, lexeme):
    self.id = id
    self.symbol = symbol
    self.lexeme = lexeme
    self.children = []
    self.father = None

tabla = pd.read_csv("tabla.csv", index_col = 0)
count = 0
stack = []

# init stack
symbol_E = node_stack('E', None)
symbol_dollar = node_stack('$', None)
stack.append(symbol_dollar)
stack.append(symbol_E)

# init tree
root = node_tree(symbol_E.id, symbol_E.symbol, symbol_E.lexeme)

input = [ 
          {"symbol":"int", "lexeme":"4", "nroline":2, "col":2},
          {"symbol":"+", "lexeme":"+", "nroline":2, "col":4},
          {"symbol":"int", "lexeme":"5", "nroline":2, "col":6},
          {"symbol":"$", "lexeme":"$", "nroline":0, "col":0},
        ]

index_input = 0
while len(stack) > 0:
  if input[index_input]["symbol"] not in tabla.columns:
    print("Error de sintaxis")
    break 
  if stack[-1].symbol == input[index_input]["symbol"]:
    stack.pop()
    index_input += 1
  else:
    production = tabla.loc[stack[-1].symbol, input[index_input]["symbol"]]
    print(production)
    if production != ('e'):
      stack.pop()
      for symbol in reversed(production.split()):
        node = node_stack(symbol, None)
        print ('produccion:', node.symbol)
        print ('input actual', input[index_input]["symbol"])
        stack.append(node)
        #child = node_tree(node.id, node.symbol, node.lexeme)
      #child.father = root
      #root.children.append(child)
    #root = child
    else:
      stack.pop()
  #print ('stack actual', stack[-1].symbol)
      
if len(stack) == 0:
  print("Parser exitoso")
  # llamar a la función "imprimir_arbol" para imprimir el árbol sintáctico resultante
else:
  print("Error de sintaxis")