You are on page 1of 3

En la primera parte declaramos los tokens

# calculadora_Calc_parsetab.py
# This file is automatically generated. Do not edit.
# pylint: disable=W,C,R
_tabversion = '3.10'

_lr_method = 'LALR'

_lr_signature = 'leftPLUSMINUSleftTIMESDIVIDEleftEXPrightUMINUSDIVIDE
EQUALS EXP LPAREN MINUS NAME NUMBER PLUS RPAREN
TIMESstatement : NAME EQUALS expressionstatement : expression\n
expression : expression PLUS expression\n | expression MINUS
expression\n | expression TIMES expression\n | expression
DIVIDE expression\n | expression EXP expression\n expression :
MINUS expression %prec UMINUSexpression : LPAREN expression
RPARENexpression : NUMBERexpression : NAME'

_lr_action_items = {'NAME':([0,4,5,7,8,9,10,11,12,],
[2,14,14,14,14,14,14,14,14,]),'MINUS':
([0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,],[4,-11,9,4,4,-
10,4,4,4,4,4,4,-8,-11,9,9,-3,-4,-5,-6,-7,-9,]),'LPAREN':([0,4,5,7,8,9,10,11,12,],
[5,5,5,5,5,5,5,5,5,]),'NUMBER':([0,4,5,7,8,9,10,11,12,],[6,6,6,6,6,6,6,6,6,]),'$end':
([1,2,3,6,13,14,16,17,18,19,20,21,22,],[0,-11,-2,-10,-8,-11,-1,-3,-4,-5,-6,-7,-
9,]),'EQUALS':([2,],[7,]),'PLUS':([2,3,6,13,14,15,16,17,18,19,20,21,22,],[-11,8,-10,-
8,-11,8,8,-3,-4,-5,-6,-7,-9,]),'TIMES':([2,3,6,13,14,15,16,17,18,19,20,21,22,],[-
11,10,-10,-8,-11,10,10,10,10,-5,-6,-7,-9,]),'DIVIDE':
([2,3,6,13,14,15,16,17,18,19,20,21,22,],[-11,11,-10,-8,-11,11,11,11,11,-5,-6,-7,-
9,]),'EXP':([2,3,6,13,14,15,16,17,18,19,20,21,22,],[-11,12,-10,-8,-
11,12,12,12,12,12,12,-7,-9,]),'RPAREN':([6,13,14,15,17,18,19,20,21,22,],[-10,-8,-
11,22,-3,-4,-5,-6,-7,-9,]),}
Esta funcion es para declarar que se introduce un numero entero y que sea
correcto el numero,
_lr_action = {}
for _k, _v in _lr_action_items.items():
for _x,_y in zip(_v[0],_v[1]):
if not _x in _lr_action: _lr_action[_x] = {}
_lr_action[_x][_k] = _y
del _lr_action_items

_lr_goto_items = {'statement':([0,],[1,]),'expression':([0,4,5,7,8,9,10,11,12,],
[3,13,15,16,17,18,19,20,21,]),}

_lr_goto = {}
for _k, _v in _lr_goto_items.items():
for _x, _y in zip(_v[0], _v[1]):
if not _x in _lr_goto: _lr_goto[_x] = {}
_lr_goto[_x][_k] = _y
del _lr_goto_items
Seguimos un método para que se introduzca una nueva línea
_lr_goto_items = {'statement':([0,],[1,]),'expression':([0,4,5,7,8,9,10,11,12,],
[3,13,15,16,17,18,19,20,21,]),}

_lr_goto = {}
for _k, _v in _lr_goto_items.items():
for _x, _y in zip(_v[0], _v[1]):
if not _x in _lr_goto: _lr_goto[_x] = {}
_lr_goto[_x][_k] = _y
del _lr_goto_items

Este método es para que se hagan las operaciones, como suma, resta,
multiplicación y división
_lr_goto = {}
for _k, _v in _lr_goto_items.items():
for _x, _y in zip(_v[0], _v[1]):
if not _x in _lr_goto: _lr_goto[_x] = {}
_lr_goto[_x][_k] = _y
del _lr_goto_items
_lr_productions = [
("S' -> statement","S'",1,None,None,None),
('statement -> NAME EQUALS
expression','statement',3,'p_statement_assign','calculadora.py',110),
('statement -> expression','statement',1,'p_statement_expr','calculadora.py',114),
('expression -> expression PLUS
expression','expression',3,'p_expression_binop','calculadora.py',119),
('expression -> expression MINUS
expression','expression',3,'p_expression_binop','calculadora.py',120),
('expression -> expression TIMES
expression','expression',3,'p_expression_binop','calculadora.py',121),
('expression -> expression DIVIDE
expression','expression',3,'p_expression_binop','calculadora.py',122),
('expression -> expression EXP
expression','expression',3,'p_expression_binop','calculadora.py',123),
('expression -> MINUS
expression','expression',2,'p_expression_uminus','calculadora.py',133),
('expression -> LPAREN expression
RPAREN','expression',3,'p_expression_group','calculadora.py',137),
('expression ->
NUMBER','expression',1,'p_expression_number','calculadora.py',141),
('expression -> NAME','expression',1,'p_expression_name','calculadora.py',145),

You might also like