From 7409ff4dc9570254c7bbd898562ad59be5fcbb1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pablo=20C=2E=20Ru=C3=ADz?= Date: Sat, 17 Oct 2020 19:42:09 -0500 Subject: [PATCH] semestre pasado --- .vscode/settings.json | 2 + TA.py | 609 +++-- TAX.py | 375 +++ __pycache__/Symbol.cpython-36.pyc | Bin 0 -> 1292 bytes __pycache__/Tokens.cpython-36.pyc | Bin 0 -> 978 bytes __pycache__/parsetab.cpython-36.pyc | Bin 0 -> 15402 bytes out.p | Bin 0 -> 637 bytes parser.out | 3780 +++++++++++++++------------ parsetab.py | 117 +- presentacion1.txt | 55 + presentacion2.txt | 24 + presentacion3.txt | 113 + presentacion4.txt | 58 + presentacion5.txt | 72 + presentacion6.txt | 46 + presentacion7.txt | 28 + presentacion8.txt | 33 + tempCodeRunnerFile.py | 1 + test.txt | 70 - 19 files changed, 3369 insertions(+), 2014 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 TAX.py create mode 100644 __pycache__/Symbol.cpython-36.pyc create mode 100644 __pycache__/Tokens.cpython-36.pyc create mode 100644 __pycache__/parsetab.cpython-36.pyc create mode 100644 out.p create mode 100644 presentacion1.txt create mode 100644 presentacion2.txt create mode 100644 presentacion3.txt create mode 100644 presentacion4.txt create mode 100644 presentacion5.txt create mode 100644 presentacion6.txt create mode 100644 presentacion7.txt create mode 100644 presentacion8.txt create mode 100644 tempCodeRunnerFile.py delete mode 100644 test.txt diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..7a73a41 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/TA.py b/TA.py index 6d1fc89..6d84ed1 100644 --- a/TA.py +++ b/TA.py @@ -1,254 +1,509 @@ -import Tokens import ply.lex as lex import ply.yacc as yacc import sys +import pickle -t_COMPARISON = r'\<|\>|\=|\<\=|\>\=|\!\=|\!|\&|\|' -t_PLUS = r'\+' -t_MINUS = r'\-' -t_STAR = r'\*' -t_SLASH = r'\\' -t_SEMICOLON = r'\;' -t_LEFT_PARENTESIS = r'\(' -t_RIGHT_PARENTESIS = r'\)' -t_STRING = r'\"[0-9]*[a-zA-Z]+[0-9]*\"' -t_ID = r'[0-9]*[a-zA-Z]+[0-9]*' - -def t_EQUAL(t): - r'\=' - t.type = 'EQUAL' - return t +#arreglar 2 y 5 +#implementar 1 -def t_CONSTANT(t): - r'[0-9]+' - t.type = 'CONSTANT' - return t +cuadruplos = [] +stackDeGotos = [] +value_stack = [] +errores = [] -t_ignore = ' \t' +tablaDeSimbolos = {} -def t_READ(t): - r'READ' - t.type = 'READ' - return t +temporals = 0 -def t_BE(t): - r'BE' - t.type = 'BE' - return t - -def t_INT(t): - r'INT' - t.type = 'INT' - return t +reserved = {'IF' : 'IF','END' : 'END','OTHERWISE' : 'ELSE','WHILE' : 'WHILE','FOR' : 'FOR','ENDFOR' : 'NEXT','SCALE' : 'TO','PROGRAMBEGIN' : 'PROGRAM','RUN' : 'START','PROGRAMDONE' : 'FINISH','BE' : 'DIM','as' : 'AS','INT' : 'INT','FLOAT' : 'FLOAT','ROUTINE' : 'ROUTINE','ENDROUTINE' : 'RETURN','CALL' : 'GOSUB','WRITE' : 'WRITE','WRITELINE' : 'WRITELINE','INCASE' : 'THEN','READ' : 'INPUT'} +tokens = ['NUMBER','ID','SUMAYRESTA','DIVISIONMULTIPLICACION','EQUALS','LPAREN','RPAREN','NOT','AND','OR','RELATIONAL','SEMICOLON','FLOTANTE','IZQB','DERB','STRING'] + list(reserved.values()) -def t_WRITE(t): - r'WRITE' - t.type = 'WRITE' - return t +t_STRING = r'\".*\"' +t_IZQB = r'\[' +t_DERB = r'\]' +t_EQUALS = r'\=' +t_LPAREN = r'\(' +t_RPAREN = r'\)' +t_NOT = r'\!' +t_AND = r'\&\&' +t_OR = r'\|\|' +t_RELATIONAL = r'\<\=|\!\=|\=\=|\>\=|\>|\<' +t_SEMICOLON = r'\;' +t_ignore = ' \t' -def t_WHILE(t): - r'WHILE' - t.type = 'WHILE' - return t +def t_ID(t): + r'[a-zA-Z_][a-zA-Z_0-9]*' + t.type = reserved.get(t.value,'ID') + return t -def t_ENDWHILE(t): - r'ENDWHILE' - t.type = 'ENDWHILE' - return t +def t_FLOTANTE(t): + r'\-?\d+\.\d+' + t.value = float(t.value) + return t -def t_FOR(t): - r'FOR' - t.type = 'FOR' +def t_NUMBER(t): + r'\-?\d+' + t.value = int(t.value) return t -def t_ENDFOR(t): - r'ENDFOR' - t.type = 'ENDFOR' +def t_SUMAYRESTA(t): + r'\+|\-' return t -def t_MATRIX(t): - r'MATRIX' - t.type = 'MATRIX' - return t - -def t_CALL(t): - r'CALL' - t.type = 'CALL' - return t - -def t_START(t): - r'START' - t.type = 'START' - return t - -def t_FINISH(t): - r'FINISH' - t.type = 'FINISH' - return t - -def t_RETURN(t): - r'RETURN' - t.type = 'RETURN' - return t - -def t_ROUTINE(t): - r'ROUTINE' - t.type = 'ROUTINE' - return t - -def t_FLOAT(t): - r'FLOAT' - t.type='FLOAT' +def t_DIVISIONMULTIPLICACION(t): + r'\*|\/|\^|\%' return t -t_COMA = r'\,' +def t_error(t): + print("no se reconoce el caracter '%s'" % t.value[0]) + t.lexer.skip(1) def t_newline(t): r'\n+' t.lexer.lineno += len(t.value) +lexer = lex.lex() -def t_error(t): - print("Error, invalid character '%s'" % t.value[0]) - t.lexer.skip(1) +def p_S(p): + ''' + S : PRINCIPAL PROGRAM START DECL R PRINCIPAL_C B FINISH + ''' + p[0] = "PROGRAM COMPILED SUCCESFULLY." -def p_PROGRAMA(p): +def p_PRINCIPAL_C(p): ''' - PROGRAMA : R START V B FINISH R + PRINCIPAL_C : ''' - p[0] = "DONE" - symbolsTable[p[2]] = 'START' + global cuadruplos + cuadruplos[0] = ('GOTO_UN', len(cuadruplos)) -def p_V(p): +def p_PRINCIPAL(p): ''' - V : BE VARIABLES SEMICOLON B V - | + PRINCIPAL : ''' - if len(p) > 1: - symbolsArray.insert(0,p[2]) + global cuadruplos + cuadruplos.append(('GOTO_UN')) -def p_VARIABLES(p): +def p_R(p): ''' - VARIABLES : FLOAT ID - | T ID - | T ID LEFT_PARENTESIS CONSTANT RIGHT_PARENTESIS - | T ID LEFT_PARENTESIS CONSTANT COMA CONSTANT RIGHT_PARENTESIS - | T ID LEFT_PARENTESIS CONSTANT COMA CONSTANT COMA CONSTANT RIGHT_PARENTESIS + R : REGLADERUTINAS R + | ''' +def p_SUBROURINTE_RULE(p): + ''' + REGLADERUTINAS : ROUTINE ID SUBACTION B RETURN + ''' + if(len(p) > 2): + global cuadruplos, tablaDeSimbolos + cuadruplos.append(('RETURN')) + tablaDeSimbolos[p[2]] = tablaDeSimbolos['temp'] + del tablaDeSimbolos['temp'] -def p_T(p): +def p_SUBACTION(p): ''' - T : INT - | VECTOR - | MATRIX - | CUBE + SUBACTION : ''' - typesArray.append(p[1]) + global tablaDeSimbolos, cuadruplos + tablaDeSimbolos['temp'] = ('ROUTINE', len(cuadruplos)) -def p_R(p): +def p_DECL(p): ''' - R : ROUTINE LEFT_PARENTESIS ID RIGHT_PARENTESIS V B RETURN R + DECL : DIM ID AS TYPE SEMICOLON DECL + | DIM ID ARRAY AS TYPE SEMICOLON DECL | ''' - if(len(p) > 1): - symbolsTable[p[2]] = 'ROUTINE' + global errores + if(len(p) > 2): + if len(p) > 7: + if p[2] in tablaDeSimbolos(): + errores.append("Can't declare same variable more than once. Error in line " + str(p.lineno(2))) + tablaDeSimbolos[p[2]] = (p[5] + str('Array'),p[3]) + else: + if p[2] in tablaDeSimbolos(): + errores.append("Can't declare same variable more than once. Error in line " + str(p.lineno(2))) + tablaDeSimbolos[p[2]] = p[4] + +def p_ARRAY(p): + ''' + ARRAY : REGLAARRAY ARRAY + | REGLAARRAY + ''' + if(len(p) > 2): + p[0] = [p[1]]+p[2] + else: + p[0] = [p[1]] + +def p_REGLAARRAY(p): + ''' + REGLAARRAY : IZQB EXPRESSION DERB + ''' + p[0] = p[2] + +def p_TYPE(p): + ''' + TYPE : INT + | FLOAT + ''' + p[0] = p[1] def p_B(p): ''' - B : CALL ID SEMICOLON V B - | ID INDICES EQUAL E SEMICOLON V B - | READ ID SEMICOLON V B - | WRITE STRING WRITE_AUX SEMICOLON V B - | WRITE E WRITE_AUX SEMICOLON V B - | IF LEFT_PARENTESIS EL RIGHT_PARENTESIS B ELSE_AUX ENDIF V B - | WHILE LEFT_PARENTESIS EL RIGHT_PARENTESIS V B ENDWHILE V B - | FOR LEFT_PARENTESIS EL COMA B RIGHT_PARENTESIS V B ENDFOR V B + B : S B + | S | ''' -def p_INDICES(p): +def p_S(p): ''' - INDICES : LEFT_PARENTESIS E RIGHT_PARENTESIS - | LEFT_PARENTESIS E COMA E RIGHT_PARENTESIS - | LEFT_PARENTESIS E COMA E COMA E RIGHT_PARENTESIS - | + S : REGLAIF + | REGLAIFELSE + | REGLAWHILE + | REGLACALL + | REGLAFOR + | REGLAWRITE + | REGLAWRITELINE + | REGLAREAD + | ASIGNACION ''' -def p_ELSE_AUX(p): +def p_REGLAREAD(p): ''' - ELSE_AUX : ELSE B - | + REGLAREAD : INPUT LPAREN EXPRESSION RPAREN SEMICOLON + ''' + global cuadruplos, tablaDeSimbolos, errores + if(isinstance(p[3],list)): + if(p[3][0] not in tablaDeSimbolos()): + errores.append('Undeclared identifier in line ' + str(p.lineno(3))) + else: + temp = get_next_temporal() + cuadruplos.append(('INPUT', temp)) + cuadruplos.append(('ASIGNACION', temp, p[3])) + else: + if(p[3] not in tablaDeSimbolos()): + errores.append('Undeclared identifier in line ' + str(p.lineno(3))) + else: + temp = get_next_temporal() + cuadruplos.append(('INPUT', temp)) + cuadruplos.append(('ASIGNACION', temp, p[3])) + +def p_REGLAWRITE(p): ''' + REGLAWRITE : WRITE LPAREN STRING RPAREN SEMICOLON + | WRITE LPAREN EXPRESSION RPAREN SEMICOLON + ''' + global cuadruplos + cuadruplos.append(('WRITE', p[3])) -def p_WRITE_AUX(p): +def p_REGLAWRITELINE(p): ''' - WRITE_AUX : COMA STRING WRITE_AUX - | COMA ID INDICES WRITE_AUX - | + REGLAWRITELINE : WRITELINE LPAREN STRING RPAREN SEMICOLON + | WRITELINE LPAREN EXPRESSION RPAREN SEMICOLON + ''' + global cuadruplos + cuadruplos.append(('WRITELINE', p[3])) + +def p_REGLACALL(p): + ''' + REGLACALL : GOSUB ID SEMICOLON + ''' + global tablaDeSimbolos, cuadruplos, errores + if( p[2] not in tablaDeSimbolos()): + errores.append("Undeclared Identifier in line " + str(p.lineno(2))) + elif(not isinstance(tablaDeSimbolos[p[2]], tuple)): + errores.append("Wrong Type of Identifier in line " + str(p.lineno(2))) + else: + cuadruplos.append(('FUNC_CALL', tablaDeSimbolos[p[2]][1])) + +def p_REGLAFOR(p): ''' -#EXPRESIONES LOGICAS (BOOLEANAS) -def p_EL(p): + REGLAFOR : FOR ASIGNACION TO EXPRESSION FOR_ACTION B NEXT ID ''' - EL : LEFT_PARENTESIS EL RIGHT_PARENTESIS EL_AUX - | CONSTANT EL_AUX - | ID EL_AUX + global cuadruplos, stackDeGotos + jump = stackDeGotos[-1] + stackDeGotos.pop() + temp = get_next_temporal() + cuadruplos.append(('ADD', p[2], 1, temp)) + cuadruplos.append(('ASIGNACION', temp, p[2])) + cuadruplos.append(('GOTO_UN', jump)) + cuadruplos[jump+1] = ('GOTO_TRUE', cuadruplos[jump][3], len(cuadruplos)) + +def p_FOR_ACTION(p): ''' + FOR_ACTION : + ''' + global cuadruplos, value_stack, stackDeGotos + temp = get_next_temporal() + cuadruplos.append(('EQUALS', cuadruplos[-1][2], value_stack[-1], temp)) + cuadruplos.append(('GOTO_TRUE', temp)) + stackDeGotos.append(len(cuadruplos)-2) + + -def p_EL_AUX(p): +def p_REGLAWHILE(p): ''' - EL_AUX : COMPARISON EL - | + REGLAWHILE : WHILE LPAREN WHILE_ACTION EXPRESSION WHILE_ACTION_JUMP RPAREN B END ''' -#EXPRESIONES MATEMATICAS -def p_E(p): + global stackDeGotos, cuadruplos + jump = stackDeGotos[-1] + stackDeGotos.pop() + jump2 = stackDeGotos[-1] + stackDeGotos.pop() + cuadruplos.append(('GOTO_UN', jump2)) + cuadruplos[jump] = ('GOTO_FALSE', cuadruplos[jump][1], len(cuadruplos)) + +def p_WHILE_ACTION(p): ''' - E : LEFT_PARENTESIS E RIGHT_PARENTESIS E_AUX - | CONSTANT E_AUX - | ID INDICES E_AUX + WHILE_ACTION : ''' + global stackDeGotos, cuadruplos + stackDeGotos.append(len(cuadruplos)) -def p_E_AUX(p): +def p_WHILE_ACTION_JUMP(p): ''' - E_AUX : PLUS E - | STAR E - | SLASH E - | MINUS E - | + WHILE_ACTION_JUMP : ''' + global cuadruplos, value_stack, stackDeGotos + cuadruplos.append(('GOTO_FALSE', value_stack[-1])) + stackDeGotos.append(len(cuadruplos)-1) + -def p_error(p): - print("No valido " + str(p.lineno)) +def p_REGLAIF(p): + ''' + REGLAIF : IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B END + ''' + global stackDeGotos, cuadruplos + jump = stackDeGotos[-1] + stackDeGotos.pop() + cuadruplos[jump] = ('GOTO_FALSE', cuadruplos[jump][1], len(cuadruplos)) +def p_REGLAIFELSE(p): + ''' + REGLAIFELSE : IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B ELSE_ACTION ELSE_RULE END + ''' + global stackDeGotos, cuadruplos + jump = stackDeGotos[-1] + stackDeGotos.pop() + cuadruplos[jump] = ('GOTO_UN', len(cuadruplos)) -try: - typesArray = [] - symbolsArray = [] - symbolsTable = {} +def p_ELSE_RULE(p): + ''' + ELSE_RULE : ELSE B + ''' - tokens = Tokens.Tokens - lexer = lex.lex() - yacc.yacc() - nameOfFile = 'test.txt' - archivo = open(nameOfFile,"r") - test = archivo.read() - archivo.close() +def p_IF_ACTION(p): + ''' + IF_ACTION : + ''' + global cuadruplos, stackDeGotos + cuadruplos.append(('GOTO_FALSE',value_stack[-1])) + stackDeGotos.append(len(cuadruplos)-1) - toParse = '' +def p_ELSE_ACTION(p): + ''' + ELSE_ACTION : + ''' + global cuadruplos + cuadruplos.append(('GOTO_UN')) + jump = stackDeGotos[-1] + stackDeGotos.pop() + stackDeGotos.append(len(cuadruplos)-1) + cuadruplos[jump] = ('GOTO_FALSE', cuadruplos[jump][1], len(cuadruplos)) + + +def p_ASIGNACION(p): + ''' + ASIGNACION : ID EQUALS EXPRESSION SEMICOLON + | ID ARRAY REVISA_LIMITES EQUALS EXPRESSION SEMICOLON + ''' + global tablaDeSimbolos, errores, stackDeGotos + if(not p[1] in tablaDeSimbolos): + WRITE("Undeclared Identifier in line: " + str(p.lineno(1))) + sys.exit() + elif(len(p) < 6): + operand1 = p[3] + result = p[1] + cuadruplos.append(('ASIGNACION',operand1, result)) + p[0] = p[1] + else: + jump = stackDeGotos.pop() + if(isinstance(tablaDeSimbolos[p[1]], tuple)): + if('Array' in tablaDeSimbolos[p[1]][0]): + cuadruplos[jump] = ('BCHECK', p[2], tablaDeSimbolos[p[1]][1]) + cuadruplos.append(('ASIGNACION',p[5], [p[1], p[2]])) + else: + errores.append("Wrong Type of Identifier in line " + str(p.lineno(1))) + else: + errores.append("Wrong Type of Identifier in line " + str(p.lineno(1))) + +def p_REVISA_LIMITES(p): + ''' + REVISA_LIMITES : + ''' + global cuadruplos + cuadruplos.append(('BCHECK',)) + stackDeGotos.append(len(cuadruplos)-1) - for char in test: - if not(char == ' ' or char == '\t' or char == '\n' or char == '\s'): - toParse+=char - #toParse = test - #print(toParse) - print(yacc.parse(toParse,tracking = True)) +def p_EXPRESSION(p): + ''' + EXPRESSION : OR_LEVEL + ''' + p[0] = p[1] + value_stack.append(p[0]) +def p_OR_LEVEL(p): + ''' + OR_LEVEL : OR_LEVEL OR AND_LEVEL + | AND_LEVEL + ''' + if(len(p) > 2): + temp = get_next_temporal() + cuadruplos.append(('OR', p[1], p[3], temp)) + p[0] = temp + else: + p[0] = p[1] + +def p_AND_LEVEL(p): + ''' + AND_LEVEL : AND_LEVEL AND RELATIONAL_LEVEL + | RELATIONAL_LEVEL + ''' + if(len(p) > 2): + temp = get_next_temporal() + cuadruplos.append(('AND', p[1], p[3], temp)) + p[0] = temp + else: + p[0] = p[1] + +def p_RELATIONAL_LEVEL(p): + ''' + RELATIONAL_LEVEL : RELATIONAL_LEVEL RELATIONAL SUMAYRESTA_LEVEL + | SUMAYRESTA_LEVEL + ''' + if(len(p) > 2): + temp = get_next_temporal() + if(p[2] == '<='): + cuadruplos.append(('LEQTHAN',p[1],p[3],temp)) + elif(p[2] == '>='): + cuadruplos.append(('GEQTHAN',p[1],p[3],temp)) + elif(p[2] == '=='): + cuadruplos.append(('EQUALS',p[1],p[3],temp)) + elif(p[2] == '!='): + cuadruplos.append(('NOTEQUALS',p[1],p[3],temp)) + elif(p[2] == '>'): + cuadruplos.append(('GTHAN', p[1], p[3], temp)) + elif(p[2] == '<'): + cuadruplos.append(('LTHAN', p[1], p[3], temp)) + p[0] = temp + else: + p[0] = p[1] + +def p_SUMAYRESTA_LEVEL(p): + ''' + SUMAYRESTA_LEVEL : SUMAYRESTA_LEVEL SUMAYRESTA DIVISIONMULTIPLICACION_LEVEL + | DIVISIONMULTIPLICACION_LEVEL + ''' + if(len(p) > 2): + temp = get_next_temporal() + if(p[2] == "+"): + cuadruplos.append(('ADD',p[1], p[3], temp)) + else: + cuadruplos.append(('SUB',p[1], p[3], temp)) + p[0] = temp + else: + p[0] = p[1] + +def p_DIVISIONMULTIPLICACION_LEVEL(p): + ''' + DIVISIONMULTIPLICACION_LEVEL : DIVISIONMULTIPLICACION_LEVEL DIVISIONMULTIPLICACION NOT_LEVEL + | NOT_LEVEL + ''' + if(len(p) > 2): + temp = get_next_temporal() + if(p[2] == '*'): + cuadruplos.append(('MULT',p[1], p[3], temp)) + elif(p[2] == '%'): + cuadruplos.append(('MOD',p[1], p[3], temp)) + elif(p[2] == '/'): + cuadruplos.append(('DIV',p[1], p[3], temp)) + else: + cuadruplos.append(('POW',p[1], p[3], temp)) + p[0] = temp + else: + p[0] = p[1] + + +def p_NOT_LEVEL(p): + ''' + NOT_LEVEL : NOT NOT_LEVEL + | F + ''' + if(len(p) > 2): + temp = get_next_temporal() + cuadruplos.append(('NOT', p[2], temp)) + p[0] = temp + else: + p[0] = p[1] +def p_F(p): + ''' + F : ID + | ID ARRAY REVISA_LIMITES + | FLOTANTE + | NUMBER + | LPAREN EXPRESSION RPAREN + + ''' + global tablaDeSimbolos, errores + if(len(p)==4 and not p[1] == '('): + jump = stackDeGotos.pop() + if(isinstance(tablaDeSimbolos[p[1]], tuple)): + if('Array' in tablaDeSimbolos[p[1]][0]): + cuadruplos[jump] = ('BCHECK', p[2], tablaDeSimbolos[p[1]][1]) + p[0] = [p[1], p[2]] + else: + errores.append("Wrong Type of Identifier in line " + str(p.lineno(1))) + else: + errores.append("Wrong Type of Identifier in line " + str(p.lineno(1))) + elif(len(p) > 3): + p[0] = p[2] + else: + if(isinstance(p[1], str)): + if(p[1] not in tablaDeSimbolos): + errores.append("Undeclared identifier in line " + str(p.lineno(1))) + p[0] = p[1] + +def get_next_temporal(): + global temporals + temporals = temporals + 1 + return "t" + str(temporals) - #print(toParse) - #parser.parse(toParse) -except EOFError as e: - print(e) \ No newline at end of file +def p_error(p): + WRITE("\tSyntax error in line " + str(p.lineno)) + for error in errores: + WRITE(error) + sys.exit() + +parser = yacc.yacc() + +if __name__ == '__main__': + try: + arch_name = input() + arch = open(arch_name,'r') + info = arch.read() + arch.close() + if(yacc.parse(info, tracking = True) == 'PROGRAM COMPILED SUCCESFULLY.'): + WRITE("Correct syntax.") + else: + WRITE("Syntax error.") + + if(len(errores) > 0): + for error in errores: + WRITE(error) + else: + pickle.dump({"cuadruplos": cuadruplos, "SymbolTable" : tablaDeSimbolos}, open("out.p", "wb")) + except EOFError: + WRITE(EOFError) \ No newline at end of file diff --git a/TAX.py b/TAX.py new file mode 100644 index 0000000..f39369c --- /dev/null +++ b/TAX.py @@ -0,0 +1,375 @@ +import pickle +from decimal import * +import sys + +def calculaOffset(dimensions, indexes): + dimensionsProduct = 1 + indexes = indexes[::-1] + for i in dimensions: + dimensionsProduct *= i + dimensionsProduct /= dimensions[0] + result = 0 + for i in range(len(indexes)): + result += (indexes[len(indexes) - i - 1] * dimensionsProduct) + dimensionsProduct /= dimensions[i] + return int(result) + +def revisaElTipo(element): + if(isinstance(element,str)): + return 'str' + elif(isinstance(element,list)): + return "list" + elif(isinstance(element,dict)): + return 'dict' + elif(isinstance(element,int)): + return 'int' + elif(isinstance(element,float)): + return 'float' + return 'None' + +def getValue(element): + t = revisaElTipo(element) + if(t == 'str'): + return variablesDelPrograma[element].get('value') + if(t == 'list'): + return getValueArray(element) + if(t == 'int'): + return int(element) + if(t == 'float'): + return Decimal(element) + +def getValueArray(element): + elem = element.copy() + indexes = elem[1].copy() + for i in range(len(indexes)): + indexes[i] = getValue(indexes[i]) + dimensions = variablesDelPrograma[elem[0]].get('dimensions').copy() + offset = calculaOffset(dimensions, indexes) + real_value = int(variablesDelPrograma[elem[0]].get('value')[offset]) + return real_value + +def setValue(val, busco): + global variablesDelPrograma + t = revisaElTipo(busco) + if(t == 'list'): + setArrayValue(val, busco) + return + ty = variablesDelPrograma[busco].get('type') + if(ty == 'INT'): + variablesDelPrograma[busco]['value'] = int(getValue(val)) + else: + variablesDelPrograma[busco]['value'] = Decimal(getValue(val)) + return + +def setArrayValue(val, busco): + global variablesDelPrograma + indexes = busco[1].copy() + for i in range(len(indexes)): + indexes[i] = int(getValue(indexes[i])) + info = variablesDelPrograma[busco[0]] + dimensions = info.get('dimensions').copy() + offset = calculaOffset(dimensions, indexes) + if('int' in info.get('type')): + info['value'][offset] = int(getValue(val)) + else: + info['value'][offset] = Decimal(getValue(val)) + return + +def ApplyOperation(op_one,op_two,operator): + if(operator == 'plus'): + return getValue(op_one) + getValue(op_two) + elif(operator == 'minus'): + return getValue(op_one) - getValue(op_two) + elif(operator == 'multiply'): + return getValue(op_one) * getValue(op_two) + elif(operator == 'divide'): + if(getValue(op_two) == 0): + print("Can't divide by 0") + print("Program Terminated") + sys.exit() + return getValue(op_one) / getValue(op_two) + elif(operator == 'pow'): + return getValue(op_one) ** getValue(op_two) + elif(operator == 'mod'): + return getValue(op_one) % getValue(op_two) + elif(operator == 'equals'): + return getValue(op_one) == getValue(op_two) + elif(operator == 'nequals'): + return getValue(op_one) != getValue(op_two) + elif(operator == 'gthan'): + return getValue(op_one) > getValue(op_two) + elif(operator == 'lthan'): + return getValue(op_one) < getValue(op_two) + elif(operator == 'geqthan'): + return getValue(op_one) >= getValue(op_two) + elif(operator == 'leqthan'): + return getValue(op_one) <= getValue(op_two) + elif(operator == 'and'): + return getValue(op_one) and getValue(op_two) + elif(operator == 'or'): + return getValue(op_one) or getValue(op_two) + + + +def ejecutaInstrucciones(): + global quadruplos, numeroDeInstruccion + inst = quadruplos[numeroDeInstruccion] + #print(inst) + if(inst[0] == 'GOTO_UN'): + UnconditionalGoto(inst) + elif(inst[0] == 'GOTO_FALSE'): + gotoFalse(inst) + elif(inst[0] == 'GOTO_TRUE'): + gotoTrue(inst) + elif(inst[0] == 'FUNC_CALL'): + llamadaARutina(inst) + elif(inst[0] == 'PRINT'): + Print(inst) + elif(inst[0] == 'BCHECK'): + BoundCheck(inst) + elif(inst[0] == 'PRINTLN'): + PrintLn(inst) + elif(inst[0] == 'INPUT'): + Input(inst) + elif(inst[0] == 'ASSIGN'): + Assign(inst) + elif(inst == 'RETURN'): + Return(inst) + elif(inst[0] == 'EQUALS'): + Equals(inst) + elif(inst[0] == 'ADD'): + Add(inst) + elif(inst[0] == 'SUB'): + Substract(inst) + elif(inst[0] == 'MULT'): + Multiply(inst) + elif(inst[0] == 'DIV'): + Divide(inst) + elif(inst[0] == 'POW'): + Pow(inst) + elif(inst[0] == 'MOD'): + Mod(inst) + elif(inst[0] == 'NOTEQUALS'): + NotEquals(inst) + elif(inst[0] == 'GTHAN'): + GreaterThan(inst) + elif(inst[0] == 'LTHAN'): + LessThan(inst) + elif(inst[0] == 'GEQTHAN'): + GreaterEqualThan(inst) + elif(inst[0] == 'LEQTHAN'): + LessEqualThan(inst) + elif(inst[0] == 'AND'): + And(inst) + elif(inst[0] == 'OR'): + Or(inst) + +def UnconditionalGoto(inst): + global numeroDeInstruccion + numeroDeInstruccion = inst[1] + return + +def gotoFalse(inst): + global numeroDeInstruccion + if(not getValue(inst[1])): + numeroDeInstruccion = inst[2] + else: + numeroDeInstruccion += 1 + return + +def gotoTrue(inst): + global numeroDeInstruccion + if(getValue(inst[1])): + numeroDeInstruccion = inst[2] + else: + numeroDeInstruccion+=1 + return + +def llamadaARutina(inst): + global numeroDeInstruccion, program_stack + program_stack.append(numeroDeInstruccion+1) + numeroDeInstruccion = inst[1] + return + +def Return(inst): + global program_stack, numeroDeInstruccion + numeroDeInstruccion = program_stack.pop() + return + +def Assign(inst): + global numeroDeInstruccion + setValue(inst[1],inst[2]) + numeroDeInstruccion += 1 + return + +def BoundCheck(inst): + global variablesDelPrograma, numeroDeInstruccion, quadruplos + bounds = inst[2] + busco = inst[1] + if(len(bounds)!=len(busco)): + print("Matrix size error") + print("Program terminated") + numeroDeInstruccion == len(quadruplos) + else: + for (indx, value) in enumerate(busco): + if(value in variablesDelPrograma.keys()): + value = variablesDelPrograma[value].get('value') + if(value >= bounds[indx]): + print("Array out of bounds error") + print("Program terminated") + numeroDeInstruccion = len(quadruplos) + numeroDeInstruccion+=1 + return + +def Input(inst): + global numeroDeInstruccion, variablesDelPrograma + read_variable = float(input()) + variablesDelPrograma[inst[1]] = {'value': read_variable, 'type' : 'float'} + numeroDeInstruccion += 1 + return + +def Add(inst): + global numeroDeInstruccion, variablesDelPrograma + answer = ApplyOperation(inst[1],inst[2],'plus') + variablesDelPrograma[inst[3]] = {'value': answer, 'type' : 'float'} + numeroDeInstruccion += 1 + return + +def Substract(inst): + global numeroDeInstruccion, variablesDelPrograma + answer = ApplyOperation(inst[1],inst[2],'minus') + variablesDelPrograma[inst[3]] = {'value': answer, 'type' : 'float'} + numeroDeInstruccion += 1 + return + +def Multiply(inst): + global numeroDeInstruccion, variablesDelPrograma + answer = ApplyOperation(inst[1],inst[2],'multiply') + variablesDelPrograma[inst[3]] = {'value': answer, 'type' : 'float'} + numeroDeInstruccion += 1 + return + +def Divide(inst): + global numeroDeInstruccion, variablesDelPrograma + answer = ApplyOperation(inst[1],inst[2],'divide') + variablesDelPrograma[inst[3]] = {'value': answer, 'type' : 'float'} + numeroDeInstruccion += 1 + return + +def Pow(inst): + global numeroDeInstruccion, variablesDelPrograma + answer = ApplyOperation(inst[1],inst[2],'pow') + variablesDelPrograma[inst[3]] = {'value': answer, 'type' : 'float'} + numeroDeInstruccion += 1 + return + +def Mod(inst): + global numeroDeInstruccion, variablesDelPrograma + answer = ApplyOperation(inst[1],inst[2],'mod') + variablesDelPrograma[inst[3]] = {'value': answer, 'type' : 'float'} + numeroDeInstruccion += 1 + return + +def Equals(inst): + global numeroDeInstruccion, variablesDelPrograma + comparison = ApplyOperation(inst[1], inst[2], 'equals') + variablesDelPrograma[inst[3]] = {'value': int(comparison), 'type': 'int'} + numeroDeInstruccion += 1 + return + +def NotEquals(inst): + global numeroDeInstruccion, variablesDelPrograma + comparison = ApplyOperation(inst[1], inst[2], 'nequals') + variablesDelPrograma[inst[3]] = {'value': int(comparison), 'type': 'int'} + numeroDeInstruccion += 1 + return + +def GreaterThan(inst): + global numeroDeInstruccion, variablesDelPrograma + comparison = ApplyOperation(inst[1], inst[2], 'gthan') + variablesDelPrograma[inst[3]] = {'value': int(comparison), 'type': 'int'} + numeroDeInstruccion += 1 + return + +def LessThan(inst): + global numeroDeInstruccion, variablesDelPrograma + comparison = ApplyOperation(inst[1], inst[2], 'lthan') + variablesDelPrograma[inst[3]] = {'value': int(comparison), 'type': 'int'} + numeroDeInstruccion += 1 + return + +def GreaterEqualThan(inst): + global numeroDeInstruccion, variablesDelPrograma + comparison = ApplyOperation(inst[1], inst[2], 'geqthan') + variablesDelPrograma[inst[3]] = {'value': int(comparison), 'type': 'int'} + numeroDeInstruccion += 1 + return + +def LessEqualThan(inst): + global numeroDeInstruccion, variablesDelPrograma + comparison = ApplyOperation(inst[1], inst[2], 'leqthan') + variablesDelPrograma[inst[3]] = {'value': int(comparison), 'type': 'int'} + numeroDeInstruccion += 1 + return + +def And(inst): + global numeroDeInstruccion, variablesDelPrograma + comparison = ApplyOperation(inst[1], inst[2], 'and') + variablesDelPrograma[inst[3]] = {'value': int(comparison), 'type': 'int'} + numeroDeInstruccion += 1 + return + +def Or(inst): + global numeroDeInstruccion, variablesDelPrograma + comparison = ApplyOperation(inst[1], inst[2], 'or') + variablesDelPrograma[inst[3]] = {'value': int(comparison), 'type': 'int'} + numeroDeInstruccion += 1 + return + +def Print(inst): + global numeroDeInstruccion, variablesDelPrograma + val = inst[1] + t = revisaElTipo(val) + if(t == 'str' and val not in variablesDelPrograma.keys()): + print(val.replace('"',""), end='') + else: + print(getValue(val), end='') + numeroDeInstruccion += 1 + return + +def PrintLn(inst): + global numeroDeInstruccion, variablesDelPrograma + val = inst[1] + t = revisaElTipo(val) + if(t == 'str' and val not in variablesDelPrograma.keys()): + print(val.replace('"',"")) + else: + print(getValue(val)) + numeroDeInstruccion += 1 + return + +def inicializa(): + global variables, variablesDelPrograma + for var in variables.items(): + if(isinstance(var[1], tuple) and 'Array' in var[1][0]): + length = 1 + for n in var[1][1]: + length = length * n + variablesDelPrograma[var[0]] = {"type":var[1][0],"value":[0]*length,"dimensions":var[1][1]} + else: + variablesDelPrograma[var[0]] = {"type":var[1],"value":0} + + +if __name__ == '__main__': + global numeroDeInstruccion, data, quadruplos, variables, variablesDelPrograma, program_stack + getcontext().prec=6 + numeroDeInstruccion = 0 + data = pickle.load(open("out.p","rb")) + quadruplos = data['Quadruples'] + variables = data['SymbolTable'] + variablesDelPrograma = {} + program_stack = [] + inicializa() + + while(numeroDeInstruccion < len(quadruplos)): + ejecutaInstrucciones() diff --git a/__pycache__/Symbol.cpython-36.pyc b/__pycache__/Symbol.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bcd05625c0c0999a6c191c26122a6d80b0a72642 GIT binary patch literal 1292 zcmZuxzi-n(6uvwEh?_QTBmzPeLKR{lO9ga`5NcsSU9zNNuqsY&&M9skJ3Tw4iM*vN zBReY_bBF#Rw=(r#VB&jrT#D#L_q}(|@4mZxKeE$mHE+IMe|qXN_KV#a7W7@rY!jfE z;xY622d0FwE}60x!WW7USl7P6ch(;g)L)ywwE~KLx zVDXGQn2nFpc<5mZ4U!J#d(3PbQ1F6DRtO+3ETAZCAhZ)3R;O@_#)2%4VqoO`u4_c3 zjGfOWp=kt4=`hQT6D2CVFq^VEPs%LJWt2pD6vXm8h^L`(N`X7sSs0J})$>3{!BHGa zu(fU%MC-S2mrH(seKbvmd6Xs~rGr*gG!B!}@apd3_1(qJ52n}g#@|m=?{K2iV;zix zAxI7n_71CyZck>$ljTjNq`+iN0ORiRH{V$L)jmUVqCwKeEF*ahrQnL6imVMOPKE9$ zYd|&|`j&D^-NpBpur*-2D3G&LOMfoxQXb^&gd^fsVUMg_DDSHnu-Y~fwdL%pveoP4 z9r#wjceUjEx#as^?tJS@GB<19TQmUPa37&#iscn>z=n)!y9Ot9qa}clW6_AwN>V_s}WMMC0As0==eU z(Nr}We+o=fCw6%ikbfU4&x3efy2~ OraJpAMYp`PC;k9d6E}tc literal 0 HcmV?d00001 diff --git a/__pycache__/Tokens.cpython-36.pyc b/__pycache__/Tokens.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3e2c8b18f7504f0acf2731ff231c9ddb112f4862 GIT binary patch literal 978 zcmciB+iuf95C&i;vE3wXXbF^ZD3mjVLphXC2_b|Vuj7UFI;=OeLJ?6#%0bYka>NDi z!AtN;bIT3Szy)G{l2+*pkSL#bc2}O+v9ngIRsa0@{`P&zaeg{epC*r=^KVpU29Mu3 zgJ$M5*2&9kU@ZBO)G~{yxFKl9q+KhuAm0evHJaR3pcJ`A1R;5wMp{8d8IdbgCdd;y z9ngmqIL?TE+2>NvD=7%p{)uxAkB#&>1c7Qrd7 z1Wto9;4C-?mce;&0jz+F;1akDu7IoH8n_N_fSaHJZh_n24!8?e!98#vJOB^D8h8Zo zFK86Vx5Ljnd!rvtzK&V&dwKArx1SF`-IpdN$~dx2^7fqw>?;;o$3+oo8s^ L=p*A4{?GR>2RPg~ literal 0 HcmV?d00001 diff --git a/__pycache__/parsetab.cpython-36.pyc b/__pycache__/parsetab.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..260b104b5b0f835cee07a5633d1a4b85b8354cac GIT binary patch literal 15402 zcmd5?33Qa#bslM?(Jll6vBR*KO$M`gLtyNYG(rQ?2+fQn7=dNril4C!hymN6ka%Cx zC2`$0ZDY4h+O$cUG>NmXcJ|#)(j{&Gu1UI$(`IqHrc3gD_upqm@^DVh0p5Av{P(_l z?|bjQ?Y<{=w6rw7;mzjl&-R8w-wFBt9mV%;$mia&G8B?fHY8QqDyhy^OIT`*YN>4s zNv%6B|_ zGwRtQ*U47dX4kh}cF6T|gWM=L$<4A;x};5Z$!@tt_Q`g&AGOME>lSEsMX0=^!r$k$_6#MfhG zeLW^)CB7cJN_{;X@bz#-z8=0Jz8)^?>tPu#@%8Xk>g(}^>|rdkIQ(8 zug9-aUylTQJyMacN3MvkN6PwoL`F({J#v-$IvenHwjy6=uZXX+WqqBMY>BV40be%> zqrQ1=+;^mGi5X%;V}|JP zq%S_qxbfj!H$v=?gMqQ>1YJqwG6=bYvyM<_Nvzn3ICnK7IQ}v@v701O#*v+u z6-jowvE;$BW61V0mh1~elLvJaGeyy4uI%XT$Cx;=`A)>*UL@{B;r+%M*T+r_os+8#gTGxl+3to4SF?K?!+x*jchS$D2NgVkM`nqpTNJ%YHcpKkO{q|0R0csI;f_4SUZ3)_r{@^Be zNDk>e&Y}*>VWrrsHIl@Q>a-EjUZ-`o@{WT3iD5)wfu8Z-z^wb1ed99bxZaYocOTku z?mgna*%)(d+rj&tW!=5e8FO9x$7j4>`Rh1de1kIP+VvFQB(0i!w@0Jht?SsV_c?!k z$I9K>jCQ-u()+7bYv9&uEO6^R`igf+f89rCx-}XL?E1^ypv$$O!)?JG72Rn4t(fKZ zYINA`I8*j6U#=w!-Ii>r_FwX& zx|?MU*2A>CN-oK(H9c&s)|NNO zU9fs5^5wi>Y{ScrzaKkiZMkpHH&$!w%f0ZFf8W{fzV8IR&zBwlyH1ZhVxQXm##ZfF zrTgjS^qc#xzu!DMLfyvE*mkR<`pDGTXV=eL>{BWc)CM7^VmBy(hH4kkvO|j0&QP zyqwoK;(oji$Mkjh=bl-Y4d+7HnhOUf!*|v`9O?}n88}>>jb!UC+%{Q1StsGeAz);2 z=;3OVZ9-W?wsEpyvgWQxbLh#A{F`#2$(qTA-J!`w{z5vk8~n46j1fj zk6$%`cj;!lLbquf@hXir;!M{zT2u>p=v6!P=BwUZ#5aiTj2gs%jD@xuH7NJE3sH`w z-1!)-)!2nNhxQtElG7;f5sb}am_c>WE0$OU4L6mQSd6!CH+$x#3bT%=N&jNd zf$>_c<7Gv#56FW$jz@HtaBhRvKG`T|gy;A}ILCR4U%<)nu+fOoDKEViu}M)XBYlTh z)|>D*34hvdQASgVeeU0uPBZ?B5llNQ+GsATb%I$*UOW5*Z3uQO4>mEviu7Ea`vmBZUOZM`880# z4(bt5zaejw8hIL2AE;+Qg_U|7)NjgfNwfSm%H9O(&GI`a`(03P0rh+G`}lj?TS2`I z)Z0O|EASHeTaZsO-=V0Y|lzkG^r$9xN`ZTD|fC?-1Sx}#o&!g-Mko+R3FS*p0L4C!gz6$CE zmwFM@*IerBpuXW!e+24}UFuIj{i#cR6V#u%)SrX;3o+rdzeMeS1?sQmZ$SMmsJ{dC zEtmQ>sPD+%qwF70_K%?c$))}oR6$;XU%rd7e*yKc@;!{^_d)#t)DPul^!7)f{teW> z%YUHkKSBK$sQ;E9qwIe`{V%Bhlm7?x6M5>%DhZv40IQIzr3DyPZjEwlK}TdRuui%4 z%54DMC^f()Nov+*l;C4toaG`P+DR;4Qn_TV^$$J zceuzx>O{ndWn1KR>ClFBRVXxFvt!G)t!B+YY#?>?)`n0h*4vvN>5j&dz0p`Y+M5`R z#s|{zXdHBWcqBHEj`k&ziFALoZ(t~viS{K&2D{^_Xx~sOx_5}0iQZ_UFPcam7|8%L z(Shz%tY?259|vNocrrRTGLY#_j7F33gPCY@2-&g#0|!!6P#j3&cW7@aHW*Dg22$~X zSSB%)j15Fn@ytjn8BJLx)A7MX&(Oe7GMdiBQW+o&?Tw-}siBcfA{mcn`cZRcC_2`k z7>GAU@h=_iiVnsS$%$AGZMwBt7JB17sKhTY(G%^qyRP~QJ_9K4DqG-Zr%^i}u9b0;nbWv?;bqqL1_4&(S&KXXrflGcfu6q)y-x#z4}~()HnI#L)A- zNw0;T0Gp_*$zDKyKNZb?Pu*(+)U9=8tJ{mCcP4~SM?lifL|F09_lYx9IFs?YO2 zYIC<7cQ$)2a7G1U+?^~3a})4YLm785>5i1>4O%E&PTqWgWhI=>S|zrIuNFUlV&BN% z0cYdt=DzCH=a+-+@&%Rw-}1KSFBGuvmd+6r+byz(T=&AFntikWvh8rWIDK}Oj-D4@ z``sl4<9eJ}3seQX_WAmx3Z<^M#}GYrPa~h3gLB{#g{;k~duSxtJJHi0@7eDhVl%2~ zoBRs?R(U&AR}?d6AU+zmc23oDIOwGN$%%)$J;_T&v}(E{Q1!lf276~-z(!fNnkp`V z#S)gsh+4;ez;+4CYNEykmLOZ{C+(QQKG_4tN_lE6z=pXXZBvX60>*;08gf}MqQOLw zN}oz8^g+a4-R0+oN?me78k@4B6PqYqUDle?Vub?#M`WRz5GEkR3Kec9)DZBWCPRh8 zgb1OQP*2Db#tEkhjRZtvp+X&@iO@`FA+!EgmZ-R zgnJ1067C~hAY3F&6YeKGNO*|w2;ot}a>7l7orGP4-Gn`aTM1o+RfO$?TL`xi)(}<@ z@E=q|g(zV?VJ%@bVFO_?QOQ5`=w({e%OA48b70hA@vXhtNvcNa!J?37v!_ zVTdq77$uAm4iXL#gfK~%BIF2n67C}0O*ln3Ls&y} zW}O{dPuHxSJS}Fe2EAq&(Z1Q}g`Z}1qR*_=L&>bwlhzF5z%*+$NT3mfV*^RER>KoW z_nHywa$r`+(q_FA`I`|dTsOmzH)}O=Gb7e*!mP6wyBV=|5wp?Toy;({K(iWE);kd) zY-!A6Hn_XJS;K?d3}gA5b@qM4j9BZ|j95$74CA0RYj~`f)tMnPVnsn_4G+VOYt5>( z+2jl6%^JqUW>w0ZIq{udSR|v)s4nEp{QABAJ1l!?~FAYt)re7 z0JG7HXv}&iXfYeryH=gewx=zs(F+aXGz}Y3p>rufmk`~Xjotxg);p(>+29^7W}D|` zYmYUX{d+q4Y2DN8!UlJvHLLo}W`Cq&Hu;WAv%x*j&AEOl4O`4cFW@qpe22W*palIf zU6)=T-MlB7o~}->PfqVnlkhqHa&Bt*cVWJp;i-xAbZsWKW$NPeBA+E(*(t?jrt;6)jYv&5tAt(S^p2vr71S<& z)yuz^#^#|%S`AmAby+Dqfr9Dz?mX}}_EXepQXMO%Dm+EuYxH6W7x0!pofm;R$4bTp#_C^P`bU0bm5&W z+2m7)F=yZL2l~$bk^cYG@J+bmsz|pQ0#3pg|C#BdK*vSt1Mj*&~>(=!V9IE-sV(zk)?|Rn*Qyo@U>EHZv!iQ zou%yoZEH&_e1j!7dZOCf3h%-B=b_9|_S6gCq`mE4!)Z?`=gu_4#W?>7+m@$VcuCvl zF-mNCyRUQAbC0XScRgk2+UzvNy9&?LnCIA-)~N}t+g2~UOp9H9mfIlD;%rU&5e-UGDWh|6$s0z$&m_xN^H_al{vgT)x$rF8le9ur3^k zKI^$&*4OTCP^^svHcBpT?rm;aZjiF`-QdCRTJAp-b_;X*a^0cIrL%-v3R~hU&W+Rh z2K)JduAKG#Apc34sK+6p(N)f%c2_{#I*WXP&ukA1xsx=|;g|N!0B*f(udg`wfGYTw zEaaUiF3)3x%fKtnJwf?Zjs%_Oe*0e_@;q+1+?>+f>#4ZFA*twwh`A?O*6GrLLW-3< zEaX2&^B5^tC-*dMEO%+zC=NVx&roJ}F}s|oPdD%ak^ej^MpRU6B==U@_NiIntaios zf{}Y0#kTna;9?QGzTitm{tK)ZtKP4fd(P^!&pwR>;_2M;l-U~Kl?XX1-aAPCi>!}9 zsy{f-y+C720z4XXL-yQ@D&W#~p(l`MWWj-RMRMPwN~=p#r7!nwGVA(CBzp6VHyG{o z<-SM$Vw+$3=$89F%bT^_zM$oPKvt8otgBk?hvY0*&P?wtxtAfcvDIvvIDhomy_5NK zxihED#)-T06Q?H6pFAUG3%}3hjMGQY-;yqo#cV4zjWg%Z*n0I2ZO-A>RQ`)T8nUOzw z>gaLQdN>n1JasgGZW8Uq^~0>+eF}gep%`T~jr$YFSltsJ?1Z VRkf?Tu87}S^|MQDRUMa|ehTd0hFbst literal 0 HcmV?d00001 diff --git a/out.p b/out.p new file mode 100644 index 0000000000000000000000000000000000000000..7ef5c7a917289db161ecaef02d71ad61bbc7df0f GIT binary patch literal 637 zcmY*XSx>@17%T!Rhqs9Lfmgjy!23+2sH9C%D9OGUQVvs-Dh{@ZK9Km-{o5{UT+_GR znc11yZ}&Ucfh3ctBuS61*=W1(cJl*)C-lgqkAZhZqgbuz2&w}fLL7Q16?8+>5hg(< zcz&s&*F&F7!fdA*_lk~w($CiQ)|+ECT5UwsDCuE;H=I=FjJ?xPPGrg_o*VSu9 z(~waE9yHc@Y6!bhUyKSyqH~j PROGRAMA -Rule 1 PROGRAMA -> R START V B FINISH R -Rule 2 V -> BE VARIABLES SEMICOLON B V -Rule 3 V -> -Rule 4 VARIABLES -> FLOAT ID -Rule 5 VARIABLES -> T ID -Rule 6 VARIABLES -> T ID LEFT_PARENTESIS CONSTANT RIGHT_PARENTESIS -Rule 7 VARIABLES -> T ID LEFT_PARENTESIS CONSTANT COMA CONSTANT RIGHT_PARENTESIS -Rule 8 VARIABLES -> T ID LEFT_PARENTESIS CONSTANT COMA CONSTANT COMA CONSTANT RIGHT_PARENTESIS -Rule 9 T -> INT -Rule 10 T -> VECTOR -Rule 11 T -> MATRIX -Rule 12 T -> CUBE -Rule 13 R -> ROUTINE LEFT_PARENTESIS ID RIGHT_PARENTESIS V B RETURN R -Rule 14 R -> -Rule 15 B -> CALL ID SEMICOLON V B -Rule 16 B -> ID INDICES EQUAL E SEMICOLON V B -Rule 17 B -> READ ID SEMICOLON V B -Rule 18 B -> WRITE STRING WRITE_AUX SEMICOLON V B -Rule 19 B -> WRITE E WRITE_AUX SEMICOLON V B -Rule 20 B -> IF LEFT_PARENTESIS EL RIGHT_PARENTESIS B ELSE_AUX ENDIF V B -Rule 21 B -> WHILE LEFT_PARENTESIS EL RIGHT_PARENTESIS V B ENDWHILE V B -Rule 22 B -> FOR LEFT_PARENTESIS EL COMA B RIGHT_PARENTESIS V B ENDFOR V B -Rule 23 B -> -Rule 24 INDICES -> LEFT_PARENTESIS E RIGHT_PARENTESIS -Rule 25 INDICES -> LEFT_PARENTESIS E COMA E RIGHT_PARENTESIS -Rule 26 INDICES -> LEFT_PARENTESIS E COMA E COMA E RIGHT_PARENTESIS -Rule 27 INDICES -> -Rule 28 ELSE_AUX -> ELSE B -Rule 29 ELSE_AUX -> -Rule 30 WRITE_AUX -> COMA STRING WRITE_AUX -Rule 31 WRITE_AUX -> COMA ID INDICES WRITE_AUX -Rule 32 WRITE_AUX -> -Rule 33 EL -> LEFT_PARENTESIS EL RIGHT_PARENTESIS EL_AUX -Rule 34 EL -> CONSTANT EL_AUX -Rule 35 EL -> ID EL_AUX -Rule 36 EL_AUX -> COMPARISON EL -Rule 37 EL_AUX -> -Rule 38 E -> LEFT_PARENTESIS E RIGHT_PARENTESIS E_AUX -Rule 39 E -> CONSTANT E_AUX -Rule 40 E -> ID INDICES E_AUX -Rule 41 E_AUX -> PLUS E -Rule 42 E_AUX -> STAR E -Rule 43 E_AUX -> SLASH E -Rule 44 E_AUX -> MINUS E -Rule 45 E_AUX -> +Rule 0 S' -> S +Rule 1 S -> MAIN_ACTION PROGRAM START DECL R MAIN_ACTION_C B FINISH +Rule 2 MAIN_ACTION_C -> +Rule 3 MAIN_ACTION -> +Rule 4 R -> SUBROUTINE_RULE R +Rule 5 R -> +Rule 6 SUBROUTINE_RULE -> SUBROUTINE ID SUBACTION B RETURN +Rule 7 SUBACTION -> +Rule 8 DECL -> DIM ID AS TYPE SEMICOLON DECL +Rule 9 DECL -> DIM ID ARRAY AS TYPE SEMICOLON DECL +Rule 10 DECL -> +Rule 11 ARRAY -> ARRAY_RULE ARRAY +Rule 12 ARRAY -> ARRAY_RULE +Rule 13 ARRAY_RULE -> LBRACKET EXPRESSION RBRACKET +Rule 14 TYPE -> INT +Rule 15 TYPE -> FLOAT +Rule 16 B -> STATEMENT B +Rule 17 B -> STATEMENT +Rule 18 B -> +Rule 19 STATEMENT -> IF_RULE +Rule 20 STATEMENT -> IFELSE_RULE +Rule 21 STATEMENT -> WHILE_RULE +Rule 22 STATEMENT -> GOSUB_RULE +Rule 23 STATEMENT -> FOR_RULE +Rule 24 STATEMENT -> PRINT_RULE +Rule 25 STATEMENT -> PRINTLN_RULE +Rule 26 STATEMENT -> INPUT_RULE +Rule 27 STATEMENT -> ASSIGN +Rule 28 INPUT_RULE -> INPUT LPAREN EXPRESSION RPAREN SEMICOLON +Rule 29 PRINT_RULE -> PRINT LPAREN STRING RPAREN SEMICOLON +Rule 30 PRINT_RULE -> PRINT LPAREN EXPRESSION RPAREN SEMICOLON +Rule 31 PRINTLN_RULE -> PRINTLN LPAREN STRING RPAREN SEMICOLON +Rule 32 PRINTLN_RULE -> PRINTLN LPAREN EXPRESSION RPAREN SEMICOLON +Rule 33 GOSUB_RULE -> GOSUB ID SEMICOLON +Rule 34 FOR_RULE -> FOR ASSIGN TO EXPRESSION FOR_ACTION B NEXT ID +Rule 35 FOR_ACTION -> +Rule 36 WHILE_RULE -> WHILE LPAREN WHILE_ACTION EXPRESSION WHILE_ACTION_JUMP RPAREN B END +Rule 37 WHILE_ACTION -> +Rule 38 WHILE_ACTION_JUMP -> +Rule 39 IF_RULE -> IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B END +Rule 40 IFELSE_RULE -> IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B ELSE_ACTION ELSE_RULE END +Rule 41 ELSE_RULE -> ELSE B +Rule 42 IF_ACTION -> +Rule 43 ELSE_ACTION -> +Rule 44 ASSIGN -> ID EQUALS EXPRESSION SEMICOLON +Rule 45 ASSIGN -> ID ARRAY BOUND_CHECK EQUALS EXPRESSION SEMICOLON +Rule 46 BOUND_CHECK -> +Rule 47 EXPRESSION -> OR_LEVEL +Rule 48 OR_LEVEL -> OR_LEVEL OR AND_LEVEL +Rule 49 OR_LEVEL -> AND_LEVEL +Rule 50 AND_LEVEL -> AND_LEVEL AND RELATIONAL_LEVEL +Rule 51 AND_LEVEL -> RELATIONAL_LEVEL +Rule 52 RELATIONAL_LEVEL -> RELATIONAL_LEVEL RELATIONAL ADDSUB_LEVEL +Rule 53 RELATIONAL_LEVEL -> ADDSUB_LEVEL +Rule 54 ADDSUB_LEVEL -> ADDSUB_LEVEL ADDSUB MULTDIV_LEVEL +Rule 55 ADDSUB_LEVEL -> MULTDIV_LEVEL +Rule 56 MULTDIV_LEVEL -> MULTDIV_LEVEL MULTDIV NOT_LEVEL +Rule 57 MULTDIV_LEVEL -> NOT_LEVEL +Rule 58 NOT_LEVEL -> NOT NOT_LEVEL +Rule 59 NOT_LEVEL -> F +Rule 60 F -> ID +Rule 61 F -> ID ARRAY BOUND_CHECK +Rule 62 F -> FNUMBER +Rule 63 F -> NUMBER +Rule 64 F -> LPAREN EXPRESSION RPAREN Terminals, with rules where they appear -AND : -BE : 2 -BOOLEAN_EXPRESSION : -CALL : 15 -COMA : 7 8 8 22 25 26 26 30 31 -COMPARISON : 36 -CONSTANT : 6 7 7 8 8 8 34 39 -CUBE : 12 -ELSE : 28 -ENDFOR : 22 -ENDIF : 20 -ENDWHILE : 21 -EQUAL : 16 -EQUAL_EQUAL : +ADDSUB : 54 +AND : 50 +AS : 8 9 +DIM : 8 9 +ELSE : 41 +END : 36 39 40 +EQUALS : 44 45 FINISH : 1 -FLOAT : 4 -FOR : 22 -GREATER_THAN : -GREATER_THAN_EQUAL : -ID : 4 5 6 7 8 13 15 16 17 31 35 40 -IF : 20 -INT : 9 -LEFT_PARENTESIS : 6 7 8 13 20 21 22 24 25 26 33 38 -LENGTH : -LENGTH_I : -LENGTH_J : -LENGTH_K : -LESS_THAN : -LESS_THAN_EQUAL : -MATHEMATICAL_CONSTANT : -MATHEMATICAL_EXPRESSION : -MATRIX : 11 -MEAN : -MEDIAN : -MINUS : 44 -MODE : -NOT : -NOT_EQUAL : -OR : -PLUS : 41 -READ : 17 -RETURN : 13 -RIGHT_PARENTESIS : 6 7 8 13 20 21 22 24 25 26 33 38 -ROUTINE : 13 -RREF : -SEMICOLON : 2 15 16 17 18 19 -SLASH : 43 -STAR : 42 +FLOAT : 15 +FNUMBER : 62 +FOR : 34 +GOSUB : 33 +ID : 6 8 9 33 34 44 45 60 61 +IF : 39 40 +INPUT : 28 +INT : 14 +LBRACKET : 13 +LPAREN : 28 29 30 31 32 36 39 40 64 +MULTDIV : 56 +NEXT : 34 +NOT : 58 +NUMBER : 63 +OR : 48 +PRINT : 29 30 +PRINTLN : 31 32 +PROGRAM : 1 +RBRACKET : 13 +RELATIONAL : 52 +RETURN : 6 +RPAREN : 28 29 30 31 32 36 39 40 64 +SEMICOLON : 8 9 28 29 30 31 32 33 44 45 START : 1 -STRING : 18 30 -VECTOR : 10 -WHILE : 21 -WRITE : 18 19 +STRING : 29 31 +SUBROUTINE : 6 +THEN : 39 40 +TO : 34 +WHILE : 36 error : Nonterminals, with rules where they appear -B : 1 2 13 15 16 17 18 19 20 20 21 21 22 22 22 28 -E : 16 19 24 25 25 26 26 26 38 41 42 43 44 -EL : 20 21 22 33 36 -ELSE_AUX : 20 -EL_AUX : 33 34 35 -E_AUX : 38 39 40 -INDICES : 16 31 40 -PROGRAMA : 0 -R : 1 1 13 -T : 5 6 7 8 -V : 1 2 13 15 16 17 18 19 20 21 21 22 22 -VARIABLES : 2 -WRITE_AUX : 18 19 30 31 +ADDSUB_LEVEL : 52 53 54 +AND_LEVEL : 48 49 50 +ARRAY : 9 11 45 61 +ARRAY_RULE : 11 12 +ASSIGN : 27 34 +B : 1 6 16 34 36 39 40 41 +BOUND_CHECK : 45 61 +DECL : 1 8 9 +ELSE_ACTION : 40 +ELSE_RULE : 40 +EXPRESSION : 13 28 30 32 34 36 39 40 44 45 64 +F : 59 +FOR_ACTION : 34 +FOR_RULE : 23 +GOSUB_RULE : 22 +IFELSE_RULE : 20 +IF_ACTION : 39 40 +IF_RULE : 19 +INPUT_RULE : 26 +MAIN_ACTION : 1 +MAIN_ACTION_C : 1 +MULTDIV_LEVEL : 54 55 56 +NOT_LEVEL : 56 57 58 +OR_LEVEL : 47 48 +PRINTLN_RULE : 25 +PRINT_RULE : 24 +R : 1 4 +RELATIONAL_LEVEL : 50 51 52 +S : 0 +STATEMENT : 16 17 +SUBACTION : 6 +SUBROUTINE_RULE : 4 +TYPE : 8 9 +WHILE_ACTION : 36 +WHILE_ACTION_JUMP : 36 +WHILE_RULE : 21 Parsing method: LALR state 0 - (0) S' -> . PROGRAMA - (1) PROGRAMA -> . R START V B FINISH R - (13) R -> . ROUTINE LEFT_PARENTESIS ID RIGHT_PARENTESIS V B RETURN R - (14) R -> . + (0) S' -> . S + (1) S -> . MAIN_ACTION PROGRAM START DECL R MAIN_ACTION_C B FINISH + (3) MAIN_ACTION -> . - ROUTINE shift and go to state 3 - START reduce using rule 14 (R -> .) + PROGRAM reduce using rule 3 (MAIN_ACTION -> .) - PROGRAMA shift and go to state 1 - R shift and go to state 2 + S shift and go to state 1 + MAIN_ACTION shift and go to state 2 state 1 - (0) S' -> PROGRAMA . + (0) S' -> S . state 2 - (1) PROGRAMA -> R . START V B FINISH R + (1) S -> MAIN_ACTION . PROGRAM START DECL R MAIN_ACTION_C B FINISH - START shift and go to state 4 + PROGRAM shift and go to state 3 state 3 - (13) R -> ROUTINE . LEFT_PARENTESIS ID RIGHT_PARENTESIS V B RETURN R + (1) S -> MAIN_ACTION PROGRAM . START DECL R MAIN_ACTION_C B FINISH - LEFT_PARENTESIS shift and go to state 5 + START shift and go to state 4 state 4 - (1) PROGRAMA -> R START . V B FINISH R - (2) V -> . BE VARIABLES SEMICOLON B V - (3) V -> . - - BE shift and go to state 7 - CALL reduce using rule 3 (V -> .) - ID reduce using rule 3 (V -> .) - READ reduce using rule 3 (V -> .) - WRITE reduce using rule 3 (V -> .) - IF reduce using rule 3 (V -> .) - WHILE reduce using rule 3 (V -> .) - FOR reduce using rule 3 (V -> .) - FINISH reduce using rule 3 (V -> .) - - V shift and go to state 6 + (1) S -> MAIN_ACTION PROGRAM START . DECL R MAIN_ACTION_C B FINISH + (8) DECL -> . DIM ID AS TYPE SEMICOLON DECL + (9) DECL -> . DIM ID ARRAY AS TYPE SEMICOLON DECL + (10) DECL -> . + + DIM shift and go to state 6 + SUBROUTINE reduce using rule 10 (DECL -> .) + IF reduce using rule 10 (DECL -> .) + WHILE reduce using rule 10 (DECL -> .) + GOSUB reduce using rule 10 (DECL -> .) + FOR reduce using rule 10 (DECL -> .) + PRINT reduce using rule 10 (DECL -> .) + PRINTLN reduce using rule 10 (DECL -> .) + INPUT reduce using rule 10 (DECL -> .) + ID reduce using rule 10 (DECL -> .) + FINISH reduce using rule 10 (DECL -> .) + + DECL shift and go to state 5 state 5 - (13) R -> ROUTINE LEFT_PARENTESIS . ID RIGHT_PARENTESIS V B RETURN R + (1) S -> MAIN_ACTION PROGRAM START DECL . R MAIN_ACTION_C B FINISH + (4) R -> . SUBROUTINE_RULE R + (5) R -> . + (6) SUBROUTINE_RULE -> . SUBROUTINE ID SUBACTION B RETURN + + IF reduce using rule 5 (R -> .) + WHILE reduce using rule 5 (R -> .) + GOSUB reduce using rule 5 (R -> .) + FOR reduce using rule 5 (R -> .) + PRINT reduce using rule 5 (R -> .) + PRINTLN reduce using rule 5 (R -> .) + INPUT reduce using rule 5 (R -> .) + ID reduce using rule 5 (R -> .) + FINISH reduce using rule 5 (R -> .) + SUBROUTINE shift and go to state 9 + + R shift and go to state 7 + SUBROUTINE_RULE shift and go to state 8 - ID shift and go to state 8 +state 6 + (8) DECL -> DIM . ID AS TYPE SEMICOLON DECL + (9) DECL -> DIM . ID ARRAY AS TYPE SEMICOLON DECL -state 6 + ID shift and go to state 10 - (1) PROGRAMA -> R START V . B FINISH R - (15) B -> . CALL ID SEMICOLON V B - (16) B -> . ID INDICES EQUAL E SEMICOLON V B - (17) B -> . READ ID SEMICOLON V B - (18) B -> . WRITE STRING WRITE_AUX SEMICOLON V B - (19) B -> . WRITE E WRITE_AUX SEMICOLON V B - (20) B -> . IF LEFT_PARENTESIS EL RIGHT_PARENTESIS B ELSE_AUX ENDIF V B - (21) B -> . WHILE LEFT_PARENTESIS EL RIGHT_PARENTESIS V B ENDWHILE V B - (22) B -> . FOR LEFT_PARENTESIS EL COMA B RIGHT_PARENTESIS V B ENDFOR V B - (23) B -> . - - CALL shift and go to state 10 - ID shift and go to state 11 - READ shift and go to state 12 - WRITE shift and go to state 13 - IF shift and go to state 14 - WHILE shift and go to state 15 - FOR shift and go to state 16 - FINISH reduce using rule 23 (B -> .) - - B shift and go to state 9 state 7 - (2) V -> BE . VARIABLES SEMICOLON B V - (4) VARIABLES -> . FLOAT ID - (5) VARIABLES -> . T ID - (6) VARIABLES -> . T ID LEFT_PARENTESIS CONSTANT RIGHT_PARENTESIS - (7) VARIABLES -> . T ID LEFT_PARENTESIS CONSTANT COMA CONSTANT RIGHT_PARENTESIS - (8) VARIABLES -> . T ID LEFT_PARENTESIS CONSTANT COMA CONSTANT COMA CONSTANT RIGHT_PARENTESIS - (9) T -> . INT - (10) T -> . VECTOR - (11) T -> . MATRIX - (12) T -> . CUBE - - FLOAT shift and go to state 18 - INT shift and go to state 20 - VECTOR shift and go to state 21 - MATRIX shift and go to state 22 - CUBE shift and go to state 23 - - VARIABLES shift and go to state 17 - T shift and go to state 19 + (1) S -> MAIN_ACTION PROGRAM START DECL R . MAIN_ACTION_C B FINISH + (2) MAIN_ACTION_C -> . -state 8 + IF reduce using rule 2 (MAIN_ACTION_C -> .) + WHILE reduce using rule 2 (MAIN_ACTION_C -> .) + GOSUB reduce using rule 2 (MAIN_ACTION_C -> .) + FOR reduce using rule 2 (MAIN_ACTION_C -> .) + PRINT reduce using rule 2 (MAIN_ACTION_C -> .) + PRINTLN reduce using rule 2 (MAIN_ACTION_C -> .) + INPUT reduce using rule 2 (MAIN_ACTION_C -> .) + ID reduce using rule 2 (MAIN_ACTION_C -> .) + FINISH reduce using rule 2 (MAIN_ACTION_C -> .) - (13) R -> ROUTINE LEFT_PARENTESIS ID . RIGHT_PARENTESIS V B RETURN R + MAIN_ACTION_C shift and go to state 11 - RIGHT_PARENTESIS shift and go to state 24 +state 8 + (4) R -> SUBROUTINE_RULE . R + (4) R -> . SUBROUTINE_RULE R + (5) R -> . + (6) SUBROUTINE_RULE -> . SUBROUTINE ID SUBACTION B RETURN + + IF reduce using rule 5 (R -> .) + WHILE reduce using rule 5 (R -> .) + GOSUB reduce using rule 5 (R -> .) + FOR reduce using rule 5 (R -> .) + PRINT reduce using rule 5 (R -> .) + PRINTLN reduce using rule 5 (R -> .) + INPUT reduce using rule 5 (R -> .) + ID reduce using rule 5 (R -> .) + FINISH reduce using rule 5 (R -> .) + SUBROUTINE shift and go to state 9 + + SUBROUTINE_RULE shift and go to state 8 + R shift and go to state 12 state 9 - (1) PROGRAMA -> R START V B . FINISH R + (6) SUBROUTINE_RULE -> SUBROUTINE . ID SUBACTION B RETURN - FINISH shift and go to state 25 + ID shift and go to state 13 state 10 - (15) B -> CALL . ID SEMICOLON V B + (8) DECL -> DIM ID . AS TYPE SEMICOLON DECL + (9) DECL -> DIM ID . ARRAY AS TYPE SEMICOLON DECL + (11) ARRAY -> . ARRAY_RULE ARRAY + (12) ARRAY -> . ARRAY_RULE + (13) ARRAY_RULE -> . LBRACKET EXPRESSION RBRACKET - ID shift and go to state 26 + AS shift and go to state 14 + LBRACKET shift and go to state 17 + ARRAY shift and go to state 15 + ARRAY_RULE shift and go to state 16 state 11 - (16) B -> ID . INDICES EQUAL E SEMICOLON V B - (24) INDICES -> . LEFT_PARENTESIS E RIGHT_PARENTESIS - (25) INDICES -> . LEFT_PARENTESIS E COMA E RIGHT_PARENTESIS - (26) INDICES -> . LEFT_PARENTESIS E COMA E COMA E RIGHT_PARENTESIS - (27) INDICES -> . - - LEFT_PARENTESIS shift and go to state 28 - EQUAL reduce using rule 27 (INDICES -> .) - - INDICES shift and go to state 27 + (1) S -> MAIN_ACTION PROGRAM START DECL R MAIN_ACTION_C . B FINISH + (16) B -> . STATEMENT B + (17) B -> . STATEMENT + (18) B -> . + (19) STATEMENT -> . IF_RULE + (20) STATEMENT -> . IFELSE_RULE + (21) STATEMENT -> . WHILE_RULE + (22) STATEMENT -> . GOSUB_RULE + (23) STATEMENT -> . FOR_RULE + (24) STATEMENT -> . PRINT_RULE + (25) STATEMENT -> . PRINTLN_RULE + (26) STATEMENT -> . INPUT_RULE + (27) STATEMENT -> . ASSIGN + (39) IF_RULE -> . IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B END + (40) IFELSE_RULE -> . IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B ELSE_ACTION ELSE_RULE END + (36) WHILE_RULE -> . WHILE LPAREN WHILE_ACTION EXPRESSION WHILE_ACTION_JUMP RPAREN B END + (33) GOSUB_RULE -> . GOSUB ID SEMICOLON + (34) FOR_RULE -> . FOR ASSIGN TO EXPRESSION FOR_ACTION B NEXT ID + (29) PRINT_RULE -> . PRINT LPAREN STRING RPAREN SEMICOLON + (30) PRINT_RULE -> . PRINT LPAREN EXPRESSION RPAREN SEMICOLON + (31) PRINTLN_RULE -> . PRINTLN LPAREN STRING RPAREN SEMICOLON + (32) PRINTLN_RULE -> . PRINTLN LPAREN EXPRESSION RPAREN SEMICOLON + (28) INPUT_RULE -> . INPUT LPAREN EXPRESSION RPAREN SEMICOLON + (44) ASSIGN -> . ID EQUALS EXPRESSION SEMICOLON + (45) ASSIGN -> . ID ARRAY BOUND_CHECK EQUALS EXPRESSION SEMICOLON + + FINISH reduce using rule 18 (B -> .) + IF shift and go to state 29 + WHILE shift and go to state 30 + GOSUB shift and go to state 31 + FOR shift and go to state 33 + PRINT shift and go to state 34 + PRINTLN shift and go to state 35 + INPUT shift and go to state 36 + ID shift and go to state 32 + + B shift and go to state 18 + STATEMENT shift and go to state 19 + IF_RULE shift and go to state 20 + IFELSE_RULE shift and go to state 21 + WHILE_RULE shift and go to state 22 + GOSUB_RULE shift and go to state 23 + FOR_RULE shift and go to state 24 + PRINT_RULE shift and go to state 25 + PRINTLN_RULE shift and go to state 26 + INPUT_RULE shift and go to state 27 + ASSIGN shift and go to state 28 state 12 - (17) B -> READ . ID SEMICOLON V B + (4) R -> SUBROUTINE_RULE R . - ID shift and go to state 29 + IF reduce using rule 4 (R -> SUBROUTINE_RULE R .) + WHILE reduce using rule 4 (R -> SUBROUTINE_RULE R .) + GOSUB reduce using rule 4 (R -> SUBROUTINE_RULE R .) + FOR reduce using rule 4 (R -> SUBROUTINE_RULE R .) + PRINT reduce using rule 4 (R -> SUBROUTINE_RULE R .) + PRINTLN reduce using rule 4 (R -> SUBROUTINE_RULE R .) + INPUT reduce using rule 4 (R -> SUBROUTINE_RULE R .) + ID reduce using rule 4 (R -> SUBROUTINE_RULE R .) + FINISH reduce using rule 4 (R -> SUBROUTINE_RULE R .) state 13 - (18) B -> WRITE . STRING WRITE_AUX SEMICOLON V B - (19) B -> WRITE . E WRITE_AUX SEMICOLON V B - (38) E -> . LEFT_PARENTESIS E RIGHT_PARENTESIS E_AUX - (39) E -> . CONSTANT E_AUX - (40) E -> . ID INDICES E_AUX + (6) SUBROUTINE_RULE -> SUBROUTINE ID . SUBACTION B RETURN + (7) SUBACTION -> . - STRING shift and go to state 30 - LEFT_PARENTESIS shift and go to state 32 - CONSTANT shift and go to state 33 - ID shift and go to state 34 + IF reduce using rule 7 (SUBACTION -> .) + WHILE reduce using rule 7 (SUBACTION -> .) + GOSUB reduce using rule 7 (SUBACTION -> .) + FOR reduce using rule 7 (SUBACTION -> .) + PRINT reduce using rule 7 (SUBACTION -> .) + PRINTLN reduce using rule 7 (SUBACTION -> .) + INPUT reduce using rule 7 (SUBACTION -> .) + ID reduce using rule 7 (SUBACTION -> .) + RETURN reduce using rule 7 (SUBACTION -> .) - E shift and go to state 31 + SUBACTION shift and go to state 37 state 14 - (20) B -> IF . LEFT_PARENTESIS EL RIGHT_PARENTESIS B ELSE_AUX ENDIF V B + (8) DECL -> DIM ID AS . TYPE SEMICOLON DECL + (14) TYPE -> . INT + (15) TYPE -> . FLOAT - LEFT_PARENTESIS shift and go to state 35 + INT shift and go to state 39 + FLOAT shift and go to state 40 + TYPE shift and go to state 38 state 15 - (21) B -> WHILE . LEFT_PARENTESIS EL RIGHT_PARENTESIS V B ENDWHILE V B + (9) DECL -> DIM ID ARRAY . AS TYPE SEMICOLON DECL - LEFT_PARENTESIS shift and go to state 36 + AS shift and go to state 41 state 16 - (22) B -> FOR . LEFT_PARENTESIS EL COMA B RIGHT_PARENTESIS V B ENDFOR V B - - LEFT_PARENTESIS shift and go to state 37 - + (11) ARRAY -> ARRAY_RULE . ARRAY + (12) ARRAY -> ARRAY_RULE . + (11) ARRAY -> . ARRAY_RULE ARRAY + (12) ARRAY -> . ARRAY_RULE + (13) ARRAY_RULE -> . LBRACKET EXPRESSION RBRACKET + + AS reduce using rule 12 (ARRAY -> ARRAY_RULE .) + EQUALS reduce using rule 12 (ARRAY -> ARRAY_RULE .) + MULTDIV reduce using rule 12 (ARRAY -> ARRAY_RULE .) + ADDSUB reduce using rule 12 (ARRAY -> ARRAY_RULE .) + RELATIONAL reduce using rule 12 (ARRAY -> ARRAY_RULE .) + AND reduce using rule 12 (ARRAY -> ARRAY_RULE .) + OR reduce using rule 12 (ARRAY -> ARRAY_RULE .) + RBRACKET reduce using rule 12 (ARRAY -> ARRAY_RULE .) + RPAREN reduce using rule 12 (ARRAY -> ARRAY_RULE .) + SEMICOLON reduce using rule 12 (ARRAY -> ARRAY_RULE .) + IF reduce using rule 12 (ARRAY -> ARRAY_RULE .) + WHILE reduce using rule 12 (ARRAY -> ARRAY_RULE .) + GOSUB reduce using rule 12 (ARRAY -> ARRAY_RULE .) + FOR reduce using rule 12 (ARRAY -> ARRAY_RULE .) + PRINT reduce using rule 12 (ARRAY -> ARRAY_RULE .) + PRINTLN reduce using rule 12 (ARRAY -> ARRAY_RULE .) + INPUT reduce using rule 12 (ARRAY -> ARRAY_RULE .) + ID reduce using rule 12 (ARRAY -> ARRAY_RULE .) + NEXT reduce using rule 12 (ARRAY -> ARRAY_RULE .) + LBRACKET shift and go to state 17 + + ARRAY_RULE shift and go to state 16 + ARRAY shift and go to state 42 state 17 - (2) V -> BE VARIABLES . SEMICOLON B V - - SEMICOLON shift and go to state 38 - + (13) ARRAY_RULE -> LBRACKET . EXPRESSION RBRACKET + (47) EXPRESSION -> . OR_LEVEL + (48) OR_LEVEL -> . OR_LEVEL OR AND_LEVEL + (49) OR_LEVEL -> . AND_LEVEL + (50) AND_LEVEL -> . AND_LEVEL AND RELATIONAL_LEVEL + (51) AND_LEVEL -> . RELATIONAL_LEVEL + (52) RELATIONAL_LEVEL -> . RELATIONAL_LEVEL RELATIONAL ADDSUB_LEVEL + (53) RELATIONAL_LEVEL -> . ADDSUB_LEVEL + (54) ADDSUB_LEVEL -> . ADDSUB_LEVEL ADDSUB MULTDIV_LEVEL + (55) ADDSUB_LEVEL -> . MULTDIV_LEVEL + (56) MULTDIV_LEVEL -> . MULTDIV_LEVEL MULTDIV NOT_LEVEL + (57) MULTDIV_LEVEL -> . NOT_LEVEL + (58) NOT_LEVEL -> . NOT NOT_LEVEL + (59) NOT_LEVEL -> . F + (60) F -> . ID + (61) F -> . ID ARRAY BOUND_CHECK + (62) F -> . FNUMBER + (63) F -> . NUMBER + (64) F -> . LPAREN EXPRESSION RPAREN + + NOT shift and go to state 50 + ID shift and go to state 52 + FNUMBER shift and go to state 53 + NUMBER shift and go to state 54 + LPAREN shift and go to state 55 + + EXPRESSION shift and go to state 43 + OR_LEVEL shift and go to state 44 + AND_LEVEL shift and go to state 45 + RELATIONAL_LEVEL shift and go to state 46 + ADDSUB_LEVEL shift and go to state 47 + MULTDIV_LEVEL shift and go to state 48 + NOT_LEVEL shift and go to state 49 + F shift and go to state 51 state 18 - (4) VARIABLES -> FLOAT . ID + (1) S -> MAIN_ACTION PROGRAM START DECL R MAIN_ACTION_C B . FINISH - ID shift and go to state 39 + FINISH shift and go to state 56 state 19 - (5) VARIABLES -> T . ID - (6) VARIABLES -> T . ID LEFT_PARENTESIS CONSTANT RIGHT_PARENTESIS - (7) VARIABLES -> T . ID LEFT_PARENTESIS CONSTANT COMA CONSTANT RIGHT_PARENTESIS - (8) VARIABLES -> T . ID LEFT_PARENTESIS CONSTANT COMA CONSTANT COMA CONSTANT RIGHT_PARENTESIS - - ID shift and go to state 40 - + (16) B -> STATEMENT . B + (17) B -> STATEMENT . + (16) B -> . STATEMENT B + (17) B -> . STATEMENT + (18) B -> . + (19) STATEMENT -> . IF_RULE + (20) STATEMENT -> . IFELSE_RULE + (21) STATEMENT -> . WHILE_RULE + (22) STATEMENT -> . GOSUB_RULE + (23) STATEMENT -> . FOR_RULE + (24) STATEMENT -> . PRINT_RULE + (25) STATEMENT -> . PRINTLN_RULE + (26) STATEMENT -> . INPUT_RULE + (27) STATEMENT -> . ASSIGN + (39) IF_RULE -> . IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B END + (40) IFELSE_RULE -> . IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B ELSE_ACTION ELSE_RULE END + (36) WHILE_RULE -> . WHILE LPAREN WHILE_ACTION EXPRESSION WHILE_ACTION_JUMP RPAREN B END + (33) GOSUB_RULE -> . GOSUB ID SEMICOLON + (34) FOR_RULE -> . FOR ASSIGN TO EXPRESSION FOR_ACTION B NEXT ID + (29) PRINT_RULE -> . PRINT LPAREN STRING RPAREN SEMICOLON + (30) PRINT_RULE -> . PRINT LPAREN EXPRESSION RPAREN SEMICOLON + (31) PRINTLN_RULE -> . PRINTLN LPAREN STRING RPAREN SEMICOLON + (32) PRINTLN_RULE -> . PRINTLN LPAREN EXPRESSION RPAREN SEMICOLON + (28) INPUT_RULE -> . INPUT LPAREN EXPRESSION RPAREN SEMICOLON + (44) ASSIGN -> . ID EQUALS EXPRESSION SEMICOLON + (45) ASSIGN -> . ID ARRAY BOUND_CHECK EQUALS EXPRESSION SEMICOLON + + ! reduce/reduce conflict for FINISH resolved using rule 17 (B -> STATEMENT .) + ! reduce/reduce conflict for RETURN resolved using rule 17 (B -> STATEMENT .) + ! reduce/reduce conflict for NEXT resolved using rule 17 (B -> STATEMENT .) + ! reduce/reduce conflict for END resolved using rule 17 (B -> STATEMENT .) + ! reduce/reduce conflict for ELSE resolved using rule 17 (B -> STATEMENT .) + FINISH reduce using rule 17 (B -> STATEMENT .) + RETURN reduce using rule 17 (B -> STATEMENT .) + NEXT reduce using rule 17 (B -> STATEMENT .) + END reduce using rule 17 (B -> STATEMENT .) + ELSE reduce using rule 17 (B -> STATEMENT .) + IF shift and go to state 29 + WHILE shift and go to state 30 + GOSUB shift and go to state 31 + FOR shift and go to state 33 + PRINT shift and go to state 34 + PRINTLN shift and go to state 35 + INPUT shift and go to state 36 + ID shift and go to state 32 + + ! FINISH [ reduce using rule 18 (B -> .) ] + ! RETURN [ reduce using rule 18 (B -> .) ] + ! NEXT [ reduce using rule 18 (B -> .) ] + ! END [ reduce using rule 18 (B -> .) ] + ! ELSE [ reduce using rule 18 (B -> .) ] + + STATEMENT shift and go to state 19 + B shift and go to state 57 + IF_RULE shift and go to state 20 + IFELSE_RULE shift and go to state 21 + WHILE_RULE shift and go to state 22 + GOSUB_RULE shift and go to state 23 + FOR_RULE shift and go to state 24 + PRINT_RULE shift and go to state 25 + PRINTLN_RULE shift and go to state 26 + INPUT_RULE shift and go to state 27 + ASSIGN shift and go to state 28 state 20 - (9) T -> INT . + (19) STATEMENT -> IF_RULE . - ID reduce using rule 9 (T -> INT .) + IF reduce using rule 19 (STATEMENT -> IF_RULE .) + WHILE reduce using rule 19 (STATEMENT -> IF_RULE .) + GOSUB reduce using rule 19 (STATEMENT -> IF_RULE .) + FOR reduce using rule 19 (STATEMENT -> IF_RULE .) + PRINT reduce using rule 19 (STATEMENT -> IF_RULE .) + PRINTLN reduce using rule 19 (STATEMENT -> IF_RULE .) + INPUT reduce using rule 19 (STATEMENT -> IF_RULE .) + ID reduce using rule 19 (STATEMENT -> IF_RULE .) + FINISH reduce using rule 19 (STATEMENT -> IF_RULE .) + RETURN reduce using rule 19 (STATEMENT -> IF_RULE .) + NEXT reduce using rule 19 (STATEMENT -> IF_RULE .) + END reduce using rule 19 (STATEMENT -> IF_RULE .) + ELSE reduce using rule 19 (STATEMENT -> IF_RULE .) state 21 - (10) T -> VECTOR . + (20) STATEMENT -> IFELSE_RULE . - ID reduce using rule 10 (T -> VECTOR .) + IF reduce using rule 20 (STATEMENT -> IFELSE_RULE .) + WHILE reduce using rule 20 (STATEMENT -> IFELSE_RULE .) + GOSUB reduce using rule 20 (STATEMENT -> IFELSE_RULE .) + FOR reduce using rule 20 (STATEMENT -> IFELSE_RULE .) + PRINT reduce using rule 20 (STATEMENT -> IFELSE_RULE .) + PRINTLN reduce using rule 20 (STATEMENT -> IFELSE_RULE .) + INPUT reduce using rule 20 (STATEMENT -> IFELSE_RULE .) + ID reduce using rule 20 (STATEMENT -> IFELSE_RULE .) + FINISH reduce using rule 20 (STATEMENT -> IFELSE_RULE .) + RETURN reduce using rule 20 (STATEMENT -> IFELSE_RULE .) + NEXT reduce using rule 20 (STATEMENT -> IFELSE_RULE .) + END reduce using rule 20 (STATEMENT -> IFELSE_RULE .) + ELSE reduce using rule 20 (STATEMENT -> IFELSE_RULE .) state 22 - (11) T -> MATRIX . + (21) STATEMENT -> WHILE_RULE . - ID reduce using rule 11 (T -> MATRIX .) + IF reduce using rule 21 (STATEMENT -> WHILE_RULE .) + WHILE reduce using rule 21 (STATEMENT -> WHILE_RULE .) + GOSUB reduce using rule 21 (STATEMENT -> WHILE_RULE .) + FOR reduce using rule 21 (STATEMENT -> WHILE_RULE .) + PRINT reduce using rule 21 (STATEMENT -> WHILE_RULE .) + PRINTLN reduce using rule 21 (STATEMENT -> WHILE_RULE .) + INPUT reduce using rule 21 (STATEMENT -> WHILE_RULE .) + ID reduce using rule 21 (STATEMENT -> WHILE_RULE .) + FINISH reduce using rule 21 (STATEMENT -> WHILE_RULE .) + RETURN reduce using rule 21 (STATEMENT -> WHILE_RULE .) + NEXT reduce using rule 21 (STATEMENT -> WHILE_RULE .) + END reduce using rule 21 (STATEMENT -> WHILE_RULE .) + ELSE reduce using rule 21 (STATEMENT -> WHILE_RULE .) state 23 - (12) T -> CUBE . + (22) STATEMENT -> GOSUB_RULE . - ID reduce using rule 12 (T -> CUBE .) + IF reduce using rule 22 (STATEMENT -> GOSUB_RULE .) + WHILE reduce using rule 22 (STATEMENT -> GOSUB_RULE .) + GOSUB reduce using rule 22 (STATEMENT -> GOSUB_RULE .) + FOR reduce using rule 22 (STATEMENT -> GOSUB_RULE .) + PRINT reduce using rule 22 (STATEMENT -> GOSUB_RULE .) + PRINTLN reduce using rule 22 (STATEMENT -> GOSUB_RULE .) + INPUT reduce using rule 22 (STATEMENT -> GOSUB_RULE .) + ID reduce using rule 22 (STATEMENT -> GOSUB_RULE .) + FINISH reduce using rule 22 (STATEMENT -> GOSUB_RULE .) + RETURN reduce using rule 22 (STATEMENT -> GOSUB_RULE .) + NEXT reduce using rule 22 (STATEMENT -> GOSUB_RULE .) + END reduce using rule 22 (STATEMENT -> GOSUB_RULE .) + ELSE reduce using rule 22 (STATEMENT -> GOSUB_RULE .) state 24 - (13) R -> ROUTINE LEFT_PARENTESIS ID RIGHT_PARENTESIS . V B RETURN R - (2) V -> . BE VARIABLES SEMICOLON B V - (3) V -> . + (23) STATEMENT -> FOR_RULE . - BE shift and go to state 7 - CALL reduce using rule 3 (V -> .) - ID reduce using rule 3 (V -> .) - READ reduce using rule 3 (V -> .) - WRITE reduce using rule 3 (V -> .) - IF reduce using rule 3 (V -> .) - WHILE reduce using rule 3 (V -> .) - FOR reduce using rule 3 (V -> .) - RETURN reduce using rule 3 (V -> .) + IF reduce using rule 23 (STATEMENT -> FOR_RULE .) + WHILE reduce using rule 23 (STATEMENT -> FOR_RULE .) + GOSUB reduce using rule 23 (STATEMENT -> FOR_RULE .) + FOR reduce using rule 23 (STATEMENT -> FOR_RULE .) + PRINT reduce using rule 23 (STATEMENT -> FOR_RULE .) + PRINTLN reduce using rule 23 (STATEMENT -> FOR_RULE .) + INPUT reduce using rule 23 (STATEMENT -> FOR_RULE .) + ID reduce using rule 23 (STATEMENT -> FOR_RULE .) + FINISH reduce using rule 23 (STATEMENT -> FOR_RULE .) + RETURN reduce using rule 23 (STATEMENT -> FOR_RULE .) + NEXT reduce using rule 23 (STATEMENT -> FOR_RULE .) + END reduce using rule 23 (STATEMENT -> FOR_RULE .) + ELSE reduce using rule 23 (STATEMENT -> FOR_RULE .) - V shift and go to state 41 state 25 - (1) PROGRAMA -> R START V B FINISH . R - (13) R -> . ROUTINE LEFT_PARENTESIS ID RIGHT_PARENTESIS V B RETURN R - (14) R -> . + (24) STATEMENT -> PRINT_RULE . - ROUTINE shift and go to state 3 - $end reduce using rule 14 (R -> .) + IF reduce using rule 24 (STATEMENT -> PRINT_RULE .) + WHILE reduce using rule 24 (STATEMENT -> PRINT_RULE .) + GOSUB reduce using rule 24 (STATEMENT -> PRINT_RULE .) + FOR reduce using rule 24 (STATEMENT -> PRINT_RULE .) + PRINT reduce using rule 24 (STATEMENT -> PRINT_RULE .) + PRINTLN reduce using rule 24 (STATEMENT -> PRINT_RULE .) + INPUT reduce using rule 24 (STATEMENT -> PRINT_RULE .) + ID reduce using rule 24 (STATEMENT -> PRINT_RULE .) + FINISH reduce using rule 24 (STATEMENT -> PRINT_RULE .) + RETURN reduce using rule 24 (STATEMENT -> PRINT_RULE .) + NEXT reduce using rule 24 (STATEMENT -> PRINT_RULE .) + END reduce using rule 24 (STATEMENT -> PRINT_RULE .) + ELSE reduce using rule 24 (STATEMENT -> PRINT_RULE .) - R shift and go to state 42 state 26 - (15) B -> CALL ID . SEMICOLON V B + (25) STATEMENT -> PRINTLN_RULE . - SEMICOLON shift and go to state 43 + IF reduce using rule 25 (STATEMENT -> PRINTLN_RULE .) + WHILE reduce using rule 25 (STATEMENT -> PRINTLN_RULE .) + GOSUB reduce using rule 25 (STATEMENT -> PRINTLN_RULE .) + FOR reduce using rule 25 (STATEMENT -> PRINTLN_RULE .) + PRINT reduce using rule 25 (STATEMENT -> PRINTLN_RULE .) + PRINTLN reduce using rule 25 (STATEMENT -> PRINTLN_RULE .) + INPUT reduce using rule 25 (STATEMENT -> PRINTLN_RULE .) + ID reduce using rule 25 (STATEMENT -> PRINTLN_RULE .) + FINISH reduce using rule 25 (STATEMENT -> PRINTLN_RULE .) + RETURN reduce using rule 25 (STATEMENT -> PRINTLN_RULE .) + NEXT reduce using rule 25 (STATEMENT -> PRINTLN_RULE .) + END reduce using rule 25 (STATEMENT -> PRINTLN_RULE .) + ELSE reduce using rule 25 (STATEMENT -> PRINTLN_RULE .) state 27 - (16) B -> ID INDICES . EQUAL E SEMICOLON V B + (26) STATEMENT -> INPUT_RULE . - EQUAL shift and go to state 44 + IF reduce using rule 26 (STATEMENT -> INPUT_RULE .) + WHILE reduce using rule 26 (STATEMENT -> INPUT_RULE .) + GOSUB reduce using rule 26 (STATEMENT -> INPUT_RULE .) + FOR reduce using rule 26 (STATEMENT -> INPUT_RULE .) + PRINT reduce using rule 26 (STATEMENT -> INPUT_RULE .) + PRINTLN reduce using rule 26 (STATEMENT -> INPUT_RULE .) + INPUT reduce using rule 26 (STATEMENT -> INPUT_RULE .) + ID reduce using rule 26 (STATEMENT -> INPUT_RULE .) + FINISH reduce using rule 26 (STATEMENT -> INPUT_RULE .) + RETURN reduce using rule 26 (STATEMENT -> INPUT_RULE .) + NEXT reduce using rule 26 (STATEMENT -> INPUT_RULE .) + END reduce using rule 26 (STATEMENT -> INPUT_RULE .) + ELSE reduce using rule 26 (STATEMENT -> INPUT_RULE .) state 28 - (24) INDICES -> LEFT_PARENTESIS . E RIGHT_PARENTESIS - (25) INDICES -> LEFT_PARENTESIS . E COMA E RIGHT_PARENTESIS - (26) INDICES -> LEFT_PARENTESIS . E COMA E COMA E RIGHT_PARENTESIS - (38) E -> . LEFT_PARENTESIS E RIGHT_PARENTESIS E_AUX - (39) E -> . CONSTANT E_AUX - (40) E -> . ID INDICES E_AUX + (27) STATEMENT -> ASSIGN . - LEFT_PARENTESIS shift and go to state 32 - CONSTANT shift and go to state 33 - ID shift and go to state 34 + IF reduce using rule 27 (STATEMENT -> ASSIGN .) + WHILE reduce using rule 27 (STATEMENT -> ASSIGN .) + GOSUB reduce using rule 27 (STATEMENT -> ASSIGN .) + FOR reduce using rule 27 (STATEMENT -> ASSIGN .) + PRINT reduce using rule 27 (STATEMENT -> ASSIGN .) + PRINTLN reduce using rule 27 (STATEMENT -> ASSIGN .) + INPUT reduce using rule 27 (STATEMENT -> ASSIGN .) + ID reduce using rule 27 (STATEMENT -> ASSIGN .) + FINISH reduce using rule 27 (STATEMENT -> ASSIGN .) + RETURN reduce using rule 27 (STATEMENT -> ASSIGN .) + NEXT reduce using rule 27 (STATEMENT -> ASSIGN .) + END reduce using rule 27 (STATEMENT -> ASSIGN .) + ELSE reduce using rule 27 (STATEMENT -> ASSIGN .) - E shift and go to state 45 state 29 - (17) B -> READ ID . SEMICOLON V B + (39) IF_RULE -> IF . LPAREN EXPRESSION IF_ACTION RPAREN THEN B END + (40) IFELSE_RULE -> IF . LPAREN EXPRESSION IF_ACTION RPAREN THEN B ELSE_ACTION ELSE_RULE END - SEMICOLON shift and go to state 46 + LPAREN shift and go to state 58 state 30 - (18) B -> WRITE STRING . WRITE_AUX SEMICOLON V B - (30) WRITE_AUX -> . COMA STRING WRITE_AUX - (31) WRITE_AUX -> . COMA ID INDICES WRITE_AUX - (32) WRITE_AUX -> . + (36) WHILE_RULE -> WHILE . LPAREN WHILE_ACTION EXPRESSION WHILE_ACTION_JUMP RPAREN B END - COMA shift and go to state 48 - SEMICOLON reduce using rule 32 (WRITE_AUX -> .) + LPAREN shift and go to state 59 - WRITE_AUX shift and go to state 47 state 31 - (19) B -> WRITE E . WRITE_AUX SEMICOLON V B - (30) WRITE_AUX -> . COMA STRING WRITE_AUX - (31) WRITE_AUX -> . COMA ID INDICES WRITE_AUX - (32) WRITE_AUX -> . + (33) GOSUB_RULE -> GOSUB . ID SEMICOLON - COMA shift and go to state 48 - SEMICOLON reduce using rule 32 (WRITE_AUX -> .) + ID shift and go to state 60 - WRITE_AUX shift and go to state 49 state 32 - (38) E -> LEFT_PARENTESIS . E RIGHT_PARENTESIS E_AUX - (38) E -> . LEFT_PARENTESIS E RIGHT_PARENTESIS E_AUX - (39) E -> . CONSTANT E_AUX - (40) E -> . ID INDICES E_AUX + (44) ASSIGN -> ID . EQUALS EXPRESSION SEMICOLON + (45) ASSIGN -> ID . ARRAY BOUND_CHECK EQUALS EXPRESSION SEMICOLON + (11) ARRAY -> . ARRAY_RULE ARRAY + (12) ARRAY -> . ARRAY_RULE + (13) ARRAY_RULE -> . LBRACKET EXPRESSION RBRACKET - LEFT_PARENTESIS shift and go to state 32 - CONSTANT shift and go to state 33 - ID shift and go to state 34 + EQUALS shift and go to state 61 + LBRACKET shift and go to state 17 - E shift and go to state 50 + ARRAY shift and go to state 62 + ARRAY_RULE shift and go to state 16 state 33 - (39) E -> CONSTANT . E_AUX - (41) E_AUX -> . PLUS E - (42) E_AUX -> . STAR E - (43) E_AUX -> . SLASH E - (44) E_AUX -> . MINUS E - (45) E_AUX -> . + (34) FOR_RULE -> FOR . ASSIGN TO EXPRESSION FOR_ACTION B NEXT ID + (44) ASSIGN -> . ID EQUALS EXPRESSION SEMICOLON + (45) ASSIGN -> . ID ARRAY BOUND_CHECK EQUALS EXPRESSION SEMICOLON - PLUS shift and go to state 52 - STAR shift and go to state 53 - SLASH shift and go to state 54 - MINUS shift and go to state 55 - COMA reduce using rule 45 (E_AUX -> .) - SEMICOLON reduce using rule 45 (E_AUX -> .) - RIGHT_PARENTESIS reduce using rule 45 (E_AUX -> .) + ID shift and go to state 32 - E_AUX shift and go to state 51 + ASSIGN shift and go to state 63 state 34 - (40) E -> ID . INDICES E_AUX - (24) INDICES -> . LEFT_PARENTESIS E RIGHT_PARENTESIS - (25) INDICES -> . LEFT_PARENTESIS E COMA E RIGHT_PARENTESIS - (26) INDICES -> . LEFT_PARENTESIS E COMA E COMA E RIGHT_PARENTESIS - (27) INDICES -> . + (29) PRINT_RULE -> PRINT . LPAREN STRING RPAREN SEMICOLON + (30) PRINT_RULE -> PRINT . LPAREN EXPRESSION RPAREN SEMICOLON - LEFT_PARENTESIS shift and go to state 28 - PLUS reduce using rule 27 (INDICES -> .) - STAR reduce using rule 27 (INDICES -> .) - SLASH reduce using rule 27 (INDICES -> .) - MINUS reduce using rule 27 (INDICES -> .) - COMA reduce using rule 27 (INDICES -> .) - SEMICOLON reduce using rule 27 (INDICES -> .) - RIGHT_PARENTESIS reduce using rule 27 (INDICES -> .) + LPAREN shift and go to state 64 - INDICES shift and go to state 56 state 35 - (20) B -> IF LEFT_PARENTESIS . EL RIGHT_PARENTESIS B ELSE_AUX ENDIF V B - (33) EL -> . LEFT_PARENTESIS EL RIGHT_PARENTESIS EL_AUX - (34) EL -> . CONSTANT EL_AUX - (35) EL -> . ID EL_AUX + (31) PRINTLN_RULE -> PRINTLN . LPAREN STRING RPAREN SEMICOLON + (32) PRINTLN_RULE -> PRINTLN . LPAREN EXPRESSION RPAREN SEMICOLON - LEFT_PARENTESIS shift and go to state 57 - CONSTANT shift and go to state 59 - ID shift and go to state 60 + LPAREN shift and go to state 65 - EL shift and go to state 58 state 36 - (21) B -> WHILE LEFT_PARENTESIS . EL RIGHT_PARENTESIS V B ENDWHILE V B - (33) EL -> . LEFT_PARENTESIS EL RIGHT_PARENTESIS EL_AUX - (34) EL -> . CONSTANT EL_AUX - (35) EL -> . ID EL_AUX + (28) INPUT_RULE -> INPUT . LPAREN EXPRESSION RPAREN SEMICOLON - LEFT_PARENTESIS shift and go to state 57 - CONSTANT shift and go to state 59 - ID shift and go to state 60 + LPAREN shift and go to state 66 - EL shift and go to state 61 state 37 - (22) B -> FOR LEFT_PARENTESIS . EL COMA B RIGHT_PARENTESIS V B ENDFOR V B - (33) EL -> . LEFT_PARENTESIS EL RIGHT_PARENTESIS EL_AUX - (34) EL -> . CONSTANT EL_AUX - (35) EL -> . ID EL_AUX + (6) SUBROUTINE_RULE -> SUBROUTINE ID SUBACTION . B RETURN + (16) B -> . STATEMENT B + (17) B -> . STATEMENT + (18) B -> . + (19) STATEMENT -> . IF_RULE + (20) STATEMENT -> . IFELSE_RULE + (21) STATEMENT -> . WHILE_RULE + (22) STATEMENT -> . GOSUB_RULE + (23) STATEMENT -> . FOR_RULE + (24) STATEMENT -> . PRINT_RULE + (25) STATEMENT -> . PRINTLN_RULE + (26) STATEMENT -> . INPUT_RULE + (27) STATEMENT -> . ASSIGN + (39) IF_RULE -> . IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B END + (40) IFELSE_RULE -> . IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B ELSE_ACTION ELSE_RULE END + (36) WHILE_RULE -> . WHILE LPAREN WHILE_ACTION EXPRESSION WHILE_ACTION_JUMP RPAREN B END + (33) GOSUB_RULE -> . GOSUB ID SEMICOLON + (34) FOR_RULE -> . FOR ASSIGN TO EXPRESSION FOR_ACTION B NEXT ID + (29) PRINT_RULE -> . PRINT LPAREN STRING RPAREN SEMICOLON + (30) PRINT_RULE -> . PRINT LPAREN EXPRESSION RPAREN SEMICOLON + (31) PRINTLN_RULE -> . PRINTLN LPAREN STRING RPAREN SEMICOLON + (32) PRINTLN_RULE -> . PRINTLN LPAREN EXPRESSION RPAREN SEMICOLON + (28) INPUT_RULE -> . INPUT LPAREN EXPRESSION RPAREN SEMICOLON + (44) ASSIGN -> . ID EQUALS EXPRESSION SEMICOLON + (45) ASSIGN -> . ID ARRAY BOUND_CHECK EQUALS EXPRESSION SEMICOLON + + RETURN reduce using rule 18 (B -> .) + IF shift and go to state 29 + WHILE shift and go to state 30 + GOSUB shift and go to state 31 + FOR shift and go to state 33 + PRINT shift and go to state 34 + PRINTLN shift and go to state 35 + INPUT shift and go to state 36 + ID shift and go to state 32 + + B shift and go to state 67 + STATEMENT shift and go to state 19 + IF_RULE shift and go to state 20 + IFELSE_RULE shift and go to state 21 + WHILE_RULE shift and go to state 22 + GOSUB_RULE shift and go to state 23 + FOR_RULE shift and go to state 24 + PRINT_RULE shift and go to state 25 + PRINTLN_RULE shift and go to state 26 + INPUT_RULE shift and go to state 27 + ASSIGN shift and go to state 28 - LEFT_PARENTESIS shift and go to state 57 - CONSTANT shift and go to state 59 - ID shift and go to state 60 +state 38 - EL shift and go to state 62 + (8) DECL -> DIM ID AS TYPE . SEMICOLON DECL -state 38 + SEMICOLON shift and go to state 68 - (2) V -> BE VARIABLES SEMICOLON . B V - (15) B -> . CALL ID SEMICOLON V B - (16) B -> . ID INDICES EQUAL E SEMICOLON V B - (17) B -> . READ ID SEMICOLON V B - (18) B -> . WRITE STRING WRITE_AUX SEMICOLON V B - (19) B -> . WRITE E WRITE_AUX SEMICOLON V B - (20) B -> . IF LEFT_PARENTESIS EL RIGHT_PARENTESIS B ELSE_AUX ENDIF V B - (21) B -> . WHILE LEFT_PARENTESIS EL RIGHT_PARENTESIS V B ENDWHILE V B - (22) B -> . FOR LEFT_PARENTESIS EL COMA B RIGHT_PARENTESIS V B ENDFOR V B - (23) B -> . - - ! shift/reduce conflict for CALL resolved as shift - ! shift/reduce conflict for ID resolved as shift - ! shift/reduce conflict for READ resolved as shift - ! shift/reduce conflict for WRITE resolved as shift - ! shift/reduce conflict for IF resolved as shift - ! shift/reduce conflict for WHILE resolved as shift - ! shift/reduce conflict for FOR resolved as shift - CALL shift and go to state 10 - ID shift and go to state 11 - READ shift and go to state 12 - WRITE shift and go to state 13 - IF shift and go to state 14 - WHILE shift and go to state 15 - FOR shift and go to state 16 - BE reduce using rule 23 (B -> .) - FINISH reduce using rule 23 (B -> .) - RETURN reduce using rule 23 (B -> .) - ELSE reduce using rule 23 (B -> .) - ENDIF reduce using rule 23 (B -> .) - RIGHT_PARENTESIS reduce using rule 23 (B -> .) - ENDWHILE reduce using rule 23 (B -> .) - ENDFOR reduce using rule 23 (B -> .) - - ! CALL [ reduce using rule 23 (B -> .) ] - ! ID [ reduce using rule 23 (B -> .) ] - ! READ [ reduce using rule 23 (B -> .) ] - ! WRITE [ reduce using rule 23 (B -> .) ] - ! IF [ reduce using rule 23 (B -> .) ] - ! WHILE [ reduce using rule 23 (B -> .) ] - ! FOR [ reduce using rule 23 (B -> .) ] - - B shift and go to state 63 state 39 - (4) VARIABLES -> FLOAT ID . + (14) TYPE -> INT . - SEMICOLON reduce using rule 4 (VARIABLES -> FLOAT ID .) + SEMICOLON reduce using rule 14 (TYPE -> INT .) state 40 - (5) VARIABLES -> T ID . - (6) VARIABLES -> T ID . LEFT_PARENTESIS CONSTANT RIGHT_PARENTESIS - (7) VARIABLES -> T ID . LEFT_PARENTESIS CONSTANT COMA CONSTANT RIGHT_PARENTESIS - (8) VARIABLES -> T ID . LEFT_PARENTESIS CONSTANT COMA CONSTANT COMA CONSTANT RIGHT_PARENTESIS + (15) TYPE -> FLOAT . - SEMICOLON reduce using rule 5 (VARIABLES -> T ID .) - LEFT_PARENTESIS shift and go to state 64 + SEMICOLON reduce using rule 15 (TYPE -> FLOAT .) state 41 - (13) R -> ROUTINE LEFT_PARENTESIS ID RIGHT_PARENTESIS V . B RETURN R - (15) B -> . CALL ID SEMICOLON V B - (16) B -> . ID INDICES EQUAL E SEMICOLON V B - (17) B -> . READ ID SEMICOLON V B - (18) B -> . WRITE STRING WRITE_AUX SEMICOLON V B - (19) B -> . WRITE E WRITE_AUX SEMICOLON V B - (20) B -> . IF LEFT_PARENTESIS EL RIGHT_PARENTESIS B ELSE_AUX ENDIF V B - (21) B -> . WHILE LEFT_PARENTESIS EL RIGHT_PARENTESIS V B ENDWHILE V B - (22) B -> . FOR LEFT_PARENTESIS EL COMA B RIGHT_PARENTESIS V B ENDFOR V B - (23) B -> . - - CALL shift and go to state 10 - ID shift and go to state 11 - READ shift and go to state 12 - WRITE shift and go to state 13 - IF shift and go to state 14 - WHILE shift and go to state 15 - FOR shift and go to state 16 - RETURN reduce using rule 23 (B -> .) - - B shift and go to state 65 + (9) DECL -> DIM ID ARRAY AS . TYPE SEMICOLON DECL + (14) TYPE -> . INT + (15) TYPE -> . FLOAT -state 42 + INT shift and go to state 39 + FLOAT shift and go to state 40 + + TYPE shift and go to state 69 - (1) PROGRAMA -> R START V B FINISH R . +state 42 - $end reduce using rule 1 (PROGRAMA -> R START V B FINISH R .) + (11) ARRAY -> ARRAY_RULE ARRAY . + + AS reduce using rule 11 (ARRAY -> ARRAY_RULE ARRAY .) + EQUALS reduce using rule 11 (ARRAY -> ARRAY_RULE ARRAY .) + MULTDIV reduce using rule 11 (ARRAY -> ARRAY_RULE ARRAY .) + ADDSUB reduce using rule 11 (ARRAY -> ARRAY_RULE ARRAY .) + RELATIONAL reduce using rule 11 (ARRAY -> ARRAY_RULE ARRAY .) + AND reduce using rule 11 (ARRAY -> ARRAY_RULE ARRAY .) + OR reduce using rule 11 (ARRAY -> ARRAY_RULE ARRAY .) + RBRACKET reduce using rule 11 (ARRAY -> ARRAY_RULE ARRAY .) + RPAREN reduce using rule 11 (ARRAY -> ARRAY_RULE ARRAY .) + SEMICOLON reduce using rule 11 (ARRAY -> ARRAY_RULE ARRAY .) + IF reduce using rule 11 (ARRAY -> ARRAY_RULE ARRAY .) + WHILE reduce using rule 11 (ARRAY -> ARRAY_RULE ARRAY .) + GOSUB reduce using rule 11 (ARRAY -> ARRAY_RULE ARRAY .) + FOR reduce using rule 11 (ARRAY -> ARRAY_RULE ARRAY .) + PRINT reduce using rule 11 (ARRAY -> ARRAY_RULE ARRAY .) + PRINTLN reduce using rule 11 (ARRAY -> ARRAY_RULE ARRAY .) + INPUT reduce using rule 11 (ARRAY -> ARRAY_RULE ARRAY .) + ID reduce using rule 11 (ARRAY -> ARRAY_RULE ARRAY .) + NEXT reduce using rule 11 (ARRAY -> ARRAY_RULE ARRAY .) state 43 - (15) B -> CALL ID SEMICOLON . V B - (2) V -> . BE VARIABLES SEMICOLON B V - (3) V -> . - - ! shift/reduce conflict for BE resolved as shift - BE shift and go to state 7 - CALL reduce using rule 3 (V -> .) - ID reduce using rule 3 (V -> .) - READ reduce using rule 3 (V -> .) - WRITE reduce using rule 3 (V -> .) - IF reduce using rule 3 (V -> .) - WHILE reduce using rule 3 (V -> .) - FOR reduce using rule 3 (V -> .) - FINISH reduce using rule 3 (V -> .) - RETURN reduce using rule 3 (V -> .) - ELSE reduce using rule 3 (V -> .) - ENDIF reduce using rule 3 (V -> .) - RIGHT_PARENTESIS reduce using rule 3 (V -> .) - ENDWHILE reduce using rule 3 (V -> .) - ENDFOR reduce using rule 3 (V -> .) - - ! BE [ reduce using rule 3 (V -> .) ] - - V shift and go to state 66 + (13) ARRAY_RULE -> LBRACKET EXPRESSION . RBRACKET + + RBRACKET shift and go to state 70 + state 44 - (16) B -> ID INDICES EQUAL . E SEMICOLON V B - (38) E -> . LEFT_PARENTESIS E RIGHT_PARENTESIS E_AUX - (39) E -> . CONSTANT E_AUX - (40) E -> . ID INDICES E_AUX + (47) EXPRESSION -> OR_LEVEL . + (48) OR_LEVEL -> OR_LEVEL . OR AND_LEVEL - LEFT_PARENTESIS shift and go to state 32 - CONSTANT shift and go to state 33 - ID shift and go to state 34 + RBRACKET reduce using rule 47 (EXPRESSION -> OR_LEVEL .) + RPAREN reduce using rule 47 (EXPRESSION -> OR_LEVEL .) + SEMICOLON reduce using rule 47 (EXPRESSION -> OR_LEVEL .) + IF reduce using rule 47 (EXPRESSION -> OR_LEVEL .) + WHILE reduce using rule 47 (EXPRESSION -> OR_LEVEL .) + GOSUB reduce using rule 47 (EXPRESSION -> OR_LEVEL .) + FOR reduce using rule 47 (EXPRESSION -> OR_LEVEL .) + PRINT reduce using rule 47 (EXPRESSION -> OR_LEVEL .) + PRINTLN reduce using rule 47 (EXPRESSION -> OR_LEVEL .) + INPUT reduce using rule 47 (EXPRESSION -> OR_LEVEL .) + ID reduce using rule 47 (EXPRESSION -> OR_LEVEL .) + NEXT reduce using rule 47 (EXPRESSION -> OR_LEVEL .) + OR shift and go to state 71 - E shift and go to state 67 state 45 - (24) INDICES -> LEFT_PARENTESIS E . RIGHT_PARENTESIS - (25) INDICES -> LEFT_PARENTESIS E . COMA E RIGHT_PARENTESIS - (26) INDICES -> LEFT_PARENTESIS E . COMA E COMA E RIGHT_PARENTESIS - - RIGHT_PARENTESIS shift and go to state 68 - COMA shift and go to state 69 + (49) OR_LEVEL -> AND_LEVEL . + (50) AND_LEVEL -> AND_LEVEL . AND RELATIONAL_LEVEL + + OR reduce using rule 49 (OR_LEVEL -> AND_LEVEL .) + RBRACKET reduce using rule 49 (OR_LEVEL -> AND_LEVEL .) + RPAREN reduce using rule 49 (OR_LEVEL -> AND_LEVEL .) + SEMICOLON reduce using rule 49 (OR_LEVEL -> AND_LEVEL .) + IF reduce using rule 49 (OR_LEVEL -> AND_LEVEL .) + WHILE reduce using rule 49 (OR_LEVEL -> AND_LEVEL .) + GOSUB reduce using rule 49 (OR_LEVEL -> AND_LEVEL .) + FOR reduce using rule 49 (OR_LEVEL -> AND_LEVEL .) + PRINT reduce using rule 49 (OR_LEVEL -> AND_LEVEL .) + PRINTLN reduce using rule 49 (OR_LEVEL -> AND_LEVEL .) + INPUT reduce using rule 49 (OR_LEVEL -> AND_LEVEL .) + ID reduce using rule 49 (OR_LEVEL -> AND_LEVEL .) + NEXT reduce using rule 49 (OR_LEVEL -> AND_LEVEL .) + AND shift and go to state 72 state 46 - (17) B -> READ ID SEMICOLON . V B - (2) V -> . BE VARIABLES SEMICOLON B V - (3) V -> . - - ! shift/reduce conflict for BE resolved as shift - BE shift and go to state 7 - CALL reduce using rule 3 (V -> .) - ID reduce using rule 3 (V -> .) - READ reduce using rule 3 (V -> .) - WRITE reduce using rule 3 (V -> .) - IF reduce using rule 3 (V -> .) - WHILE reduce using rule 3 (V -> .) - FOR reduce using rule 3 (V -> .) - FINISH reduce using rule 3 (V -> .) - RETURN reduce using rule 3 (V -> .) - ELSE reduce using rule 3 (V -> .) - ENDIF reduce using rule 3 (V -> .) - RIGHT_PARENTESIS reduce using rule 3 (V -> .) - ENDWHILE reduce using rule 3 (V -> .) - ENDFOR reduce using rule 3 (V -> .) - - ! BE [ reduce using rule 3 (V -> .) ] - - V shift and go to state 70 + (51) AND_LEVEL -> RELATIONAL_LEVEL . + (52) RELATIONAL_LEVEL -> RELATIONAL_LEVEL . RELATIONAL ADDSUB_LEVEL + + AND reduce using rule 51 (AND_LEVEL -> RELATIONAL_LEVEL .) + OR reduce using rule 51 (AND_LEVEL -> RELATIONAL_LEVEL .) + RBRACKET reduce using rule 51 (AND_LEVEL -> RELATIONAL_LEVEL .) + RPAREN reduce using rule 51 (AND_LEVEL -> RELATIONAL_LEVEL .) + SEMICOLON reduce using rule 51 (AND_LEVEL -> RELATIONAL_LEVEL .) + IF reduce using rule 51 (AND_LEVEL -> RELATIONAL_LEVEL .) + WHILE reduce using rule 51 (AND_LEVEL -> RELATIONAL_LEVEL .) + GOSUB reduce using rule 51 (AND_LEVEL -> RELATIONAL_LEVEL .) + FOR reduce using rule 51 (AND_LEVEL -> RELATIONAL_LEVEL .) + PRINT reduce using rule 51 (AND_LEVEL -> RELATIONAL_LEVEL .) + PRINTLN reduce using rule 51 (AND_LEVEL -> RELATIONAL_LEVEL .) + INPUT reduce using rule 51 (AND_LEVEL -> RELATIONAL_LEVEL .) + ID reduce using rule 51 (AND_LEVEL -> RELATIONAL_LEVEL .) + NEXT reduce using rule 51 (AND_LEVEL -> RELATIONAL_LEVEL .) + RELATIONAL shift and go to state 73 -state 47 - (18) B -> WRITE STRING WRITE_AUX . SEMICOLON V B +state 47 - SEMICOLON shift and go to state 71 + (53) RELATIONAL_LEVEL -> ADDSUB_LEVEL . + (54) ADDSUB_LEVEL -> ADDSUB_LEVEL . ADDSUB MULTDIV_LEVEL + + RELATIONAL reduce using rule 53 (RELATIONAL_LEVEL -> ADDSUB_LEVEL .) + AND reduce using rule 53 (RELATIONAL_LEVEL -> ADDSUB_LEVEL .) + OR reduce using rule 53 (RELATIONAL_LEVEL -> ADDSUB_LEVEL .) + RBRACKET reduce using rule 53 (RELATIONAL_LEVEL -> ADDSUB_LEVEL .) + RPAREN reduce using rule 53 (RELATIONAL_LEVEL -> ADDSUB_LEVEL .) + SEMICOLON reduce using rule 53 (RELATIONAL_LEVEL -> ADDSUB_LEVEL .) + IF reduce using rule 53 (RELATIONAL_LEVEL -> ADDSUB_LEVEL .) + WHILE reduce using rule 53 (RELATIONAL_LEVEL -> ADDSUB_LEVEL .) + GOSUB reduce using rule 53 (RELATIONAL_LEVEL -> ADDSUB_LEVEL .) + FOR reduce using rule 53 (RELATIONAL_LEVEL -> ADDSUB_LEVEL .) + PRINT reduce using rule 53 (RELATIONAL_LEVEL -> ADDSUB_LEVEL .) + PRINTLN reduce using rule 53 (RELATIONAL_LEVEL -> ADDSUB_LEVEL .) + INPUT reduce using rule 53 (RELATIONAL_LEVEL -> ADDSUB_LEVEL .) + ID reduce using rule 53 (RELATIONAL_LEVEL -> ADDSUB_LEVEL .) + NEXT reduce using rule 53 (RELATIONAL_LEVEL -> ADDSUB_LEVEL .) + ADDSUB shift and go to state 74 state 48 - (30) WRITE_AUX -> COMA . STRING WRITE_AUX - (31) WRITE_AUX -> COMA . ID INDICES WRITE_AUX - - STRING shift and go to state 72 - ID shift and go to state 73 + (55) ADDSUB_LEVEL -> MULTDIV_LEVEL . + (56) MULTDIV_LEVEL -> MULTDIV_LEVEL . MULTDIV NOT_LEVEL + + ADDSUB reduce using rule 55 (ADDSUB_LEVEL -> MULTDIV_LEVEL .) + RELATIONAL reduce using rule 55 (ADDSUB_LEVEL -> MULTDIV_LEVEL .) + AND reduce using rule 55 (ADDSUB_LEVEL -> MULTDIV_LEVEL .) + OR reduce using rule 55 (ADDSUB_LEVEL -> MULTDIV_LEVEL .) + RBRACKET reduce using rule 55 (ADDSUB_LEVEL -> MULTDIV_LEVEL .) + RPAREN reduce using rule 55 (ADDSUB_LEVEL -> MULTDIV_LEVEL .) + SEMICOLON reduce using rule 55 (ADDSUB_LEVEL -> MULTDIV_LEVEL .) + IF reduce using rule 55 (ADDSUB_LEVEL -> MULTDIV_LEVEL .) + WHILE reduce using rule 55 (ADDSUB_LEVEL -> MULTDIV_LEVEL .) + GOSUB reduce using rule 55 (ADDSUB_LEVEL -> MULTDIV_LEVEL .) + FOR reduce using rule 55 (ADDSUB_LEVEL -> MULTDIV_LEVEL .) + PRINT reduce using rule 55 (ADDSUB_LEVEL -> MULTDIV_LEVEL .) + PRINTLN reduce using rule 55 (ADDSUB_LEVEL -> MULTDIV_LEVEL .) + INPUT reduce using rule 55 (ADDSUB_LEVEL -> MULTDIV_LEVEL .) + ID reduce using rule 55 (ADDSUB_LEVEL -> MULTDIV_LEVEL .) + NEXT reduce using rule 55 (ADDSUB_LEVEL -> MULTDIV_LEVEL .) + MULTDIV shift and go to state 75 state 49 - (19) B -> WRITE E WRITE_AUX . SEMICOLON V B - - SEMICOLON shift and go to state 74 + (57) MULTDIV_LEVEL -> NOT_LEVEL . + + MULTDIV reduce using rule 57 (MULTDIV_LEVEL -> NOT_LEVEL .) + ADDSUB reduce using rule 57 (MULTDIV_LEVEL -> NOT_LEVEL .) + RELATIONAL reduce using rule 57 (MULTDIV_LEVEL -> NOT_LEVEL .) + AND reduce using rule 57 (MULTDIV_LEVEL -> NOT_LEVEL .) + OR reduce using rule 57 (MULTDIV_LEVEL -> NOT_LEVEL .) + RBRACKET reduce using rule 57 (MULTDIV_LEVEL -> NOT_LEVEL .) + RPAREN reduce using rule 57 (MULTDIV_LEVEL -> NOT_LEVEL .) + SEMICOLON reduce using rule 57 (MULTDIV_LEVEL -> NOT_LEVEL .) + IF reduce using rule 57 (MULTDIV_LEVEL -> NOT_LEVEL .) + WHILE reduce using rule 57 (MULTDIV_LEVEL -> NOT_LEVEL .) + GOSUB reduce using rule 57 (MULTDIV_LEVEL -> NOT_LEVEL .) + FOR reduce using rule 57 (MULTDIV_LEVEL -> NOT_LEVEL .) + PRINT reduce using rule 57 (MULTDIV_LEVEL -> NOT_LEVEL .) + PRINTLN reduce using rule 57 (MULTDIV_LEVEL -> NOT_LEVEL .) + INPUT reduce using rule 57 (MULTDIV_LEVEL -> NOT_LEVEL .) + ID reduce using rule 57 (MULTDIV_LEVEL -> NOT_LEVEL .) + NEXT reduce using rule 57 (MULTDIV_LEVEL -> NOT_LEVEL .) state 50 - (38) E -> LEFT_PARENTESIS E . RIGHT_PARENTESIS E_AUX + (58) NOT_LEVEL -> NOT . NOT_LEVEL + (58) NOT_LEVEL -> . NOT NOT_LEVEL + (59) NOT_LEVEL -> . F + (60) F -> . ID + (61) F -> . ID ARRAY BOUND_CHECK + (62) F -> . FNUMBER + (63) F -> . NUMBER + (64) F -> . LPAREN EXPRESSION RPAREN - RIGHT_PARENTESIS shift and go to state 75 + NOT shift and go to state 50 + ID shift and go to state 52 + FNUMBER shift and go to state 53 + NUMBER shift and go to state 54 + LPAREN shift and go to state 55 + NOT_LEVEL shift and go to state 76 + F shift and go to state 51 state 51 - (39) E -> CONSTANT E_AUX . - - COMA reduce using rule 39 (E -> CONSTANT E_AUX .) - SEMICOLON reduce using rule 39 (E -> CONSTANT E_AUX .) - RIGHT_PARENTESIS reduce using rule 39 (E -> CONSTANT E_AUX .) + (59) NOT_LEVEL -> F . + + MULTDIV reduce using rule 59 (NOT_LEVEL -> F .) + ADDSUB reduce using rule 59 (NOT_LEVEL -> F .) + RELATIONAL reduce using rule 59 (NOT_LEVEL -> F .) + AND reduce using rule 59 (NOT_LEVEL -> F .) + OR reduce using rule 59 (NOT_LEVEL -> F .) + RBRACKET reduce using rule 59 (NOT_LEVEL -> F .) + RPAREN reduce using rule 59 (NOT_LEVEL -> F .) + SEMICOLON reduce using rule 59 (NOT_LEVEL -> F .) + IF reduce using rule 59 (NOT_LEVEL -> F .) + WHILE reduce using rule 59 (NOT_LEVEL -> F .) + GOSUB reduce using rule 59 (NOT_LEVEL -> F .) + FOR reduce using rule 59 (NOT_LEVEL -> F .) + PRINT reduce using rule 59 (NOT_LEVEL -> F .) + PRINTLN reduce using rule 59 (NOT_LEVEL -> F .) + INPUT reduce using rule 59 (NOT_LEVEL -> F .) + ID reduce using rule 59 (NOT_LEVEL -> F .) + NEXT reduce using rule 59 (NOT_LEVEL -> F .) state 52 - (41) E_AUX -> PLUS . E - (38) E -> . LEFT_PARENTESIS E RIGHT_PARENTESIS E_AUX - (39) E -> . CONSTANT E_AUX - (40) E -> . ID INDICES E_AUX - - LEFT_PARENTESIS shift and go to state 32 - CONSTANT shift and go to state 33 - ID shift and go to state 34 - - E shift and go to state 76 + (60) F -> ID . + (61) F -> ID . ARRAY BOUND_CHECK + (11) ARRAY -> . ARRAY_RULE ARRAY + (12) ARRAY -> . ARRAY_RULE + (13) ARRAY_RULE -> . LBRACKET EXPRESSION RBRACKET + + MULTDIV reduce using rule 60 (F -> ID .) + ADDSUB reduce using rule 60 (F -> ID .) + RELATIONAL reduce using rule 60 (F -> ID .) + AND reduce using rule 60 (F -> ID .) + OR reduce using rule 60 (F -> ID .) + RBRACKET reduce using rule 60 (F -> ID .) + RPAREN reduce using rule 60 (F -> ID .) + SEMICOLON reduce using rule 60 (F -> ID .) + IF reduce using rule 60 (F -> ID .) + WHILE reduce using rule 60 (F -> ID .) + GOSUB reduce using rule 60 (F -> ID .) + FOR reduce using rule 60 (F -> ID .) + PRINT reduce using rule 60 (F -> ID .) + PRINTLN reduce using rule 60 (F -> ID .) + INPUT reduce using rule 60 (F -> ID .) + ID reduce using rule 60 (F -> ID .) + NEXT reduce using rule 60 (F -> ID .) + LBRACKET shift and go to state 17 + + ARRAY shift and go to state 77 + ARRAY_RULE shift and go to state 16 state 53 - (42) E_AUX -> STAR . E - (38) E -> . LEFT_PARENTESIS E RIGHT_PARENTESIS E_AUX - (39) E -> . CONSTANT E_AUX - (40) E -> . ID INDICES E_AUX + (62) F -> FNUMBER . + + MULTDIV reduce using rule 62 (F -> FNUMBER .) + ADDSUB reduce using rule 62 (F -> FNUMBER .) + RELATIONAL reduce using rule 62 (F -> FNUMBER .) + AND reduce using rule 62 (F -> FNUMBER .) + OR reduce using rule 62 (F -> FNUMBER .) + RBRACKET reduce using rule 62 (F -> FNUMBER .) + RPAREN reduce using rule 62 (F -> FNUMBER .) + SEMICOLON reduce using rule 62 (F -> FNUMBER .) + IF reduce using rule 62 (F -> FNUMBER .) + WHILE reduce using rule 62 (F -> FNUMBER .) + GOSUB reduce using rule 62 (F -> FNUMBER .) + FOR reduce using rule 62 (F -> FNUMBER .) + PRINT reduce using rule 62 (F -> FNUMBER .) + PRINTLN reduce using rule 62 (F -> FNUMBER .) + INPUT reduce using rule 62 (F -> FNUMBER .) + ID reduce using rule 62 (F -> FNUMBER .) + NEXT reduce using rule 62 (F -> FNUMBER .) - LEFT_PARENTESIS shift and go to state 32 - CONSTANT shift and go to state 33 - ID shift and go to state 34 - - E shift and go to state 77 state 54 - (43) E_AUX -> SLASH . E - (38) E -> . LEFT_PARENTESIS E RIGHT_PARENTESIS E_AUX - (39) E -> . CONSTANT E_AUX - (40) E -> . ID INDICES E_AUX - - LEFT_PARENTESIS shift and go to state 32 - CONSTANT shift and go to state 33 - ID shift and go to state 34 + (63) F -> NUMBER . + + MULTDIV reduce using rule 63 (F -> NUMBER .) + ADDSUB reduce using rule 63 (F -> NUMBER .) + RELATIONAL reduce using rule 63 (F -> NUMBER .) + AND reduce using rule 63 (F -> NUMBER .) + OR reduce using rule 63 (F -> NUMBER .) + RBRACKET reduce using rule 63 (F -> NUMBER .) + RPAREN reduce using rule 63 (F -> NUMBER .) + SEMICOLON reduce using rule 63 (F -> NUMBER .) + IF reduce using rule 63 (F -> NUMBER .) + WHILE reduce using rule 63 (F -> NUMBER .) + GOSUB reduce using rule 63 (F -> NUMBER .) + FOR reduce using rule 63 (F -> NUMBER .) + PRINT reduce using rule 63 (F -> NUMBER .) + PRINTLN reduce using rule 63 (F -> NUMBER .) + INPUT reduce using rule 63 (F -> NUMBER .) + ID reduce using rule 63 (F -> NUMBER .) + NEXT reduce using rule 63 (F -> NUMBER .) - E shift and go to state 78 state 55 - (44) E_AUX -> MINUS . E - (38) E -> . LEFT_PARENTESIS E RIGHT_PARENTESIS E_AUX - (39) E -> . CONSTANT E_AUX - (40) E -> . ID INDICES E_AUX - - LEFT_PARENTESIS shift and go to state 32 - CONSTANT shift and go to state 33 - ID shift and go to state 34 - - E shift and go to state 79 + (64) F -> LPAREN . EXPRESSION RPAREN + (47) EXPRESSION -> . OR_LEVEL + (48) OR_LEVEL -> . OR_LEVEL OR AND_LEVEL + (49) OR_LEVEL -> . AND_LEVEL + (50) AND_LEVEL -> . AND_LEVEL AND RELATIONAL_LEVEL + (51) AND_LEVEL -> . RELATIONAL_LEVEL + (52) RELATIONAL_LEVEL -> . RELATIONAL_LEVEL RELATIONAL ADDSUB_LEVEL + (53) RELATIONAL_LEVEL -> . ADDSUB_LEVEL + (54) ADDSUB_LEVEL -> . ADDSUB_LEVEL ADDSUB MULTDIV_LEVEL + (55) ADDSUB_LEVEL -> . MULTDIV_LEVEL + (56) MULTDIV_LEVEL -> . MULTDIV_LEVEL MULTDIV NOT_LEVEL + (57) MULTDIV_LEVEL -> . NOT_LEVEL + (58) NOT_LEVEL -> . NOT NOT_LEVEL + (59) NOT_LEVEL -> . F + (60) F -> . ID + (61) F -> . ID ARRAY BOUND_CHECK + (62) F -> . FNUMBER + (63) F -> . NUMBER + (64) F -> . LPAREN EXPRESSION RPAREN + + NOT shift and go to state 50 + ID shift and go to state 52 + FNUMBER shift and go to state 53 + NUMBER shift and go to state 54 + LPAREN shift and go to state 55 + + EXPRESSION shift and go to state 78 + OR_LEVEL shift and go to state 44 + AND_LEVEL shift and go to state 45 + RELATIONAL_LEVEL shift and go to state 46 + ADDSUB_LEVEL shift and go to state 47 + MULTDIV_LEVEL shift and go to state 48 + NOT_LEVEL shift and go to state 49 + F shift and go to state 51 state 56 - (40) E -> ID INDICES . E_AUX - (41) E_AUX -> . PLUS E - (42) E_AUX -> . STAR E - (43) E_AUX -> . SLASH E - (44) E_AUX -> . MINUS E - (45) E_AUX -> . + (1) S -> MAIN_ACTION PROGRAM START DECL R MAIN_ACTION_C B FINISH . - PLUS shift and go to state 52 - STAR shift and go to state 53 - SLASH shift and go to state 54 - MINUS shift and go to state 55 - COMA reduce using rule 45 (E_AUX -> .) - SEMICOLON reduce using rule 45 (E_AUX -> .) - RIGHT_PARENTESIS reduce using rule 45 (E_AUX -> .) + $end reduce using rule 1 (S -> MAIN_ACTION PROGRAM START DECL R MAIN_ACTION_C B FINISH .) - E_AUX shift and go to state 80 state 57 - (33) EL -> LEFT_PARENTESIS . EL RIGHT_PARENTESIS EL_AUX - (33) EL -> . LEFT_PARENTESIS EL RIGHT_PARENTESIS EL_AUX - (34) EL -> . CONSTANT EL_AUX - (35) EL -> . ID EL_AUX + (16) B -> STATEMENT B . - LEFT_PARENTESIS shift and go to state 57 - CONSTANT shift and go to state 59 - ID shift and go to state 60 + FINISH reduce using rule 16 (B -> STATEMENT B .) + RETURN reduce using rule 16 (B -> STATEMENT B .) + NEXT reduce using rule 16 (B -> STATEMENT B .) + END reduce using rule 16 (B -> STATEMENT B .) + ELSE reduce using rule 16 (B -> STATEMENT B .) - EL shift and go to state 81 state 58 - (20) B -> IF LEFT_PARENTESIS EL . RIGHT_PARENTESIS B ELSE_AUX ENDIF V B - - RIGHT_PARENTESIS shift and go to state 82 - + (39) IF_RULE -> IF LPAREN . EXPRESSION IF_ACTION RPAREN THEN B END + (40) IFELSE_RULE -> IF LPAREN . EXPRESSION IF_ACTION RPAREN THEN B ELSE_ACTION ELSE_RULE END + (47) EXPRESSION -> . OR_LEVEL + (48) OR_LEVEL -> . OR_LEVEL OR AND_LEVEL + (49) OR_LEVEL -> . AND_LEVEL + (50) AND_LEVEL -> . AND_LEVEL AND RELATIONAL_LEVEL + (51) AND_LEVEL -> . RELATIONAL_LEVEL + (52) RELATIONAL_LEVEL -> . RELATIONAL_LEVEL RELATIONAL ADDSUB_LEVEL + (53) RELATIONAL_LEVEL -> . ADDSUB_LEVEL + (54) ADDSUB_LEVEL -> . ADDSUB_LEVEL ADDSUB MULTDIV_LEVEL + (55) ADDSUB_LEVEL -> . MULTDIV_LEVEL + (56) MULTDIV_LEVEL -> . MULTDIV_LEVEL MULTDIV NOT_LEVEL + (57) MULTDIV_LEVEL -> . NOT_LEVEL + (58) NOT_LEVEL -> . NOT NOT_LEVEL + (59) NOT_LEVEL -> . F + (60) F -> . ID + (61) F -> . ID ARRAY BOUND_CHECK + (62) F -> . FNUMBER + (63) F -> . NUMBER + (64) F -> . LPAREN EXPRESSION RPAREN + + NOT shift and go to state 50 + ID shift and go to state 52 + FNUMBER shift and go to state 53 + NUMBER shift and go to state 54 + LPAREN shift and go to state 55 + + EXPRESSION shift and go to state 79 + OR_LEVEL shift and go to state 44 + AND_LEVEL shift and go to state 45 + RELATIONAL_LEVEL shift and go to state 46 + ADDSUB_LEVEL shift and go to state 47 + MULTDIV_LEVEL shift and go to state 48 + NOT_LEVEL shift and go to state 49 + F shift and go to state 51 state 59 - (34) EL -> CONSTANT . EL_AUX - (36) EL_AUX -> . COMPARISON EL - (37) EL_AUX -> . + (36) WHILE_RULE -> WHILE LPAREN . WHILE_ACTION EXPRESSION WHILE_ACTION_JUMP RPAREN B END + (37) WHILE_ACTION -> . - COMPARISON shift and go to state 84 - RIGHT_PARENTESIS reduce using rule 37 (EL_AUX -> .) - COMA reduce using rule 37 (EL_AUX -> .) + NOT reduce using rule 37 (WHILE_ACTION -> .) + ID reduce using rule 37 (WHILE_ACTION -> .) + FNUMBER reduce using rule 37 (WHILE_ACTION -> .) + NUMBER reduce using rule 37 (WHILE_ACTION -> .) + LPAREN reduce using rule 37 (WHILE_ACTION -> .) - EL_AUX shift and go to state 83 + WHILE_ACTION shift and go to state 80 state 60 - (35) EL -> ID . EL_AUX - (36) EL_AUX -> . COMPARISON EL - (37) EL_AUX -> . + (33) GOSUB_RULE -> GOSUB ID . SEMICOLON - COMPARISON shift and go to state 84 - RIGHT_PARENTESIS reduce using rule 37 (EL_AUX -> .) - COMA reduce using rule 37 (EL_AUX -> .) + SEMICOLON shift and go to state 81 - EL_AUX shift and go to state 85 state 61 - (21) B -> WHILE LEFT_PARENTESIS EL . RIGHT_PARENTESIS V B ENDWHILE V B - - RIGHT_PARENTESIS shift and go to state 86 - + (44) ASSIGN -> ID EQUALS . EXPRESSION SEMICOLON + (47) EXPRESSION -> . OR_LEVEL + (48) OR_LEVEL -> . OR_LEVEL OR AND_LEVEL + (49) OR_LEVEL -> . AND_LEVEL + (50) AND_LEVEL -> . AND_LEVEL AND RELATIONAL_LEVEL + (51) AND_LEVEL -> . RELATIONAL_LEVEL + (52) RELATIONAL_LEVEL -> . RELATIONAL_LEVEL RELATIONAL ADDSUB_LEVEL + (53) RELATIONAL_LEVEL -> . ADDSUB_LEVEL + (54) ADDSUB_LEVEL -> . ADDSUB_LEVEL ADDSUB MULTDIV_LEVEL + (55) ADDSUB_LEVEL -> . MULTDIV_LEVEL + (56) MULTDIV_LEVEL -> . MULTDIV_LEVEL MULTDIV NOT_LEVEL + (57) MULTDIV_LEVEL -> . NOT_LEVEL + (58) NOT_LEVEL -> . NOT NOT_LEVEL + (59) NOT_LEVEL -> . F + (60) F -> . ID + (61) F -> . ID ARRAY BOUND_CHECK + (62) F -> . FNUMBER + (63) F -> . NUMBER + (64) F -> . LPAREN EXPRESSION RPAREN + + NOT shift and go to state 50 + ID shift and go to state 52 + FNUMBER shift and go to state 53 + NUMBER shift and go to state 54 + LPAREN shift and go to state 55 + + EXPRESSION shift and go to state 82 + OR_LEVEL shift and go to state 44 + AND_LEVEL shift and go to state 45 + RELATIONAL_LEVEL shift and go to state 46 + ADDSUB_LEVEL shift and go to state 47 + MULTDIV_LEVEL shift and go to state 48 + NOT_LEVEL shift and go to state 49 + F shift and go to state 51 state 62 - (22) B -> FOR LEFT_PARENTESIS EL . COMA B RIGHT_PARENTESIS V B ENDFOR V B + (45) ASSIGN -> ID ARRAY . BOUND_CHECK EQUALS EXPRESSION SEMICOLON + (46) BOUND_CHECK -> . - COMA shift and go to state 87 + EQUALS reduce using rule 46 (BOUND_CHECK -> .) + BOUND_CHECK shift and go to state 83 state 63 - (2) V -> BE VARIABLES SEMICOLON B . V - (2) V -> . BE VARIABLES SEMICOLON B V - (3) V -> . - - ! shift/reduce conflict for BE resolved as shift - BE shift and go to state 7 - CALL reduce using rule 3 (V -> .) - ID reduce using rule 3 (V -> .) - READ reduce using rule 3 (V -> .) - WRITE reduce using rule 3 (V -> .) - IF reduce using rule 3 (V -> .) - WHILE reduce using rule 3 (V -> .) - FOR reduce using rule 3 (V -> .) - FINISH reduce using rule 3 (V -> .) - RETURN reduce using rule 3 (V -> .) - ELSE reduce using rule 3 (V -> .) - ENDIF reduce using rule 3 (V -> .) - RIGHT_PARENTESIS reduce using rule 3 (V -> .) - ENDWHILE reduce using rule 3 (V -> .) - ENDFOR reduce using rule 3 (V -> .) - - ! BE [ reduce using rule 3 (V -> .) ] - - V shift and go to state 88 + (34) FOR_RULE -> FOR ASSIGN . TO EXPRESSION FOR_ACTION B NEXT ID -state 64 + TO shift and go to state 84 - (6) VARIABLES -> T ID LEFT_PARENTESIS . CONSTANT RIGHT_PARENTESIS - (7) VARIABLES -> T ID LEFT_PARENTESIS . CONSTANT COMA CONSTANT RIGHT_PARENTESIS - (8) VARIABLES -> T ID LEFT_PARENTESIS . CONSTANT COMA CONSTANT COMA CONSTANT RIGHT_PARENTESIS - CONSTANT shift and go to state 89 +state 64 + (29) PRINT_RULE -> PRINT LPAREN . STRING RPAREN SEMICOLON + (30) PRINT_RULE -> PRINT LPAREN . EXPRESSION RPAREN SEMICOLON + (47) EXPRESSION -> . OR_LEVEL + (48) OR_LEVEL -> . OR_LEVEL OR AND_LEVEL + (49) OR_LEVEL -> . AND_LEVEL + (50) AND_LEVEL -> . AND_LEVEL AND RELATIONAL_LEVEL + (51) AND_LEVEL -> . RELATIONAL_LEVEL + (52) RELATIONAL_LEVEL -> . RELATIONAL_LEVEL RELATIONAL ADDSUB_LEVEL + (53) RELATIONAL_LEVEL -> . ADDSUB_LEVEL + (54) ADDSUB_LEVEL -> . ADDSUB_LEVEL ADDSUB MULTDIV_LEVEL + (55) ADDSUB_LEVEL -> . MULTDIV_LEVEL + (56) MULTDIV_LEVEL -> . MULTDIV_LEVEL MULTDIV NOT_LEVEL + (57) MULTDIV_LEVEL -> . NOT_LEVEL + (58) NOT_LEVEL -> . NOT NOT_LEVEL + (59) NOT_LEVEL -> . F + (60) F -> . ID + (61) F -> . ID ARRAY BOUND_CHECK + (62) F -> . FNUMBER + (63) F -> . NUMBER + (64) F -> . LPAREN EXPRESSION RPAREN + + STRING shift and go to state 85 + NOT shift and go to state 50 + ID shift and go to state 52 + FNUMBER shift and go to state 53 + NUMBER shift and go to state 54 + LPAREN shift and go to state 55 + + EXPRESSION shift and go to state 86 + OR_LEVEL shift and go to state 44 + AND_LEVEL shift and go to state 45 + RELATIONAL_LEVEL shift and go to state 46 + ADDSUB_LEVEL shift and go to state 47 + MULTDIV_LEVEL shift and go to state 48 + NOT_LEVEL shift and go to state 49 + F shift and go to state 51 state 65 - (13) R -> ROUTINE LEFT_PARENTESIS ID RIGHT_PARENTESIS V B . RETURN R - - RETURN shift and go to state 90 - + (31) PRINTLN_RULE -> PRINTLN LPAREN . STRING RPAREN SEMICOLON + (32) PRINTLN_RULE -> PRINTLN LPAREN . EXPRESSION RPAREN SEMICOLON + (47) EXPRESSION -> . OR_LEVEL + (48) OR_LEVEL -> . OR_LEVEL OR AND_LEVEL + (49) OR_LEVEL -> . AND_LEVEL + (50) AND_LEVEL -> . AND_LEVEL AND RELATIONAL_LEVEL + (51) AND_LEVEL -> . RELATIONAL_LEVEL + (52) RELATIONAL_LEVEL -> . RELATIONAL_LEVEL RELATIONAL ADDSUB_LEVEL + (53) RELATIONAL_LEVEL -> . ADDSUB_LEVEL + (54) ADDSUB_LEVEL -> . ADDSUB_LEVEL ADDSUB MULTDIV_LEVEL + (55) ADDSUB_LEVEL -> . MULTDIV_LEVEL + (56) MULTDIV_LEVEL -> . MULTDIV_LEVEL MULTDIV NOT_LEVEL + (57) MULTDIV_LEVEL -> . NOT_LEVEL + (58) NOT_LEVEL -> . NOT NOT_LEVEL + (59) NOT_LEVEL -> . F + (60) F -> . ID + (61) F -> . ID ARRAY BOUND_CHECK + (62) F -> . FNUMBER + (63) F -> . NUMBER + (64) F -> . LPAREN EXPRESSION RPAREN + + STRING shift and go to state 87 + NOT shift and go to state 50 + ID shift and go to state 52 + FNUMBER shift and go to state 53 + NUMBER shift and go to state 54 + LPAREN shift and go to state 55 + + EXPRESSION shift and go to state 88 + OR_LEVEL shift and go to state 44 + AND_LEVEL shift and go to state 45 + RELATIONAL_LEVEL shift and go to state 46 + ADDSUB_LEVEL shift and go to state 47 + MULTDIV_LEVEL shift and go to state 48 + NOT_LEVEL shift and go to state 49 + F shift and go to state 51 state 66 - (15) B -> CALL ID SEMICOLON V . B - (15) B -> . CALL ID SEMICOLON V B - (16) B -> . ID INDICES EQUAL E SEMICOLON V B - (17) B -> . READ ID SEMICOLON V B - (18) B -> . WRITE STRING WRITE_AUX SEMICOLON V B - (19) B -> . WRITE E WRITE_AUX SEMICOLON V B - (20) B -> . IF LEFT_PARENTESIS EL RIGHT_PARENTESIS B ELSE_AUX ENDIF V B - (21) B -> . WHILE LEFT_PARENTESIS EL RIGHT_PARENTESIS V B ENDWHILE V B - (22) B -> . FOR LEFT_PARENTESIS EL COMA B RIGHT_PARENTESIS V B ENDFOR V B - (23) B -> . - - ! shift/reduce conflict for CALL resolved as shift - ! shift/reduce conflict for ID resolved as shift - ! shift/reduce conflict for READ resolved as shift - ! shift/reduce conflict for WRITE resolved as shift - ! shift/reduce conflict for IF resolved as shift - ! shift/reduce conflict for WHILE resolved as shift - ! shift/reduce conflict for FOR resolved as shift - CALL shift and go to state 10 - ID shift and go to state 11 - READ shift and go to state 12 - WRITE shift and go to state 13 - IF shift and go to state 14 - WHILE shift and go to state 15 - FOR shift and go to state 16 - BE reduce using rule 23 (B -> .) - FINISH reduce using rule 23 (B -> .) - RETURN reduce using rule 23 (B -> .) - ELSE reduce using rule 23 (B -> .) - ENDIF reduce using rule 23 (B -> .) - RIGHT_PARENTESIS reduce using rule 23 (B -> .) - ENDWHILE reduce using rule 23 (B -> .) - ENDFOR reduce using rule 23 (B -> .) - - ! CALL [ reduce using rule 23 (B -> .) ] - ! ID [ reduce using rule 23 (B -> .) ] - ! READ [ reduce using rule 23 (B -> .) ] - ! WRITE [ reduce using rule 23 (B -> .) ] - ! IF [ reduce using rule 23 (B -> .) ] - ! WHILE [ reduce using rule 23 (B -> .) ] - ! FOR [ reduce using rule 23 (B -> .) ] - - B shift and go to state 91 + (28) INPUT_RULE -> INPUT LPAREN . EXPRESSION RPAREN SEMICOLON + (47) EXPRESSION -> . OR_LEVEL + (48) OR_LEVEL -> . OR_LEVEL OR AND_LEVEL + (49) OR_LEVEL -> . AND_LEVEL + (50) AND_LEVEL -> . AND_LEVEL AND RELATIONAL_LEVEL + (51) AND_LEVEL -> . RELATIONAL_LEVEL + (52) RELATIONAL_LEVEL -> . RELATIONAL_LEVEL RELATIONAL ADDSUB_LEVEL + (53) RELATIONAL_LEVEL -> . ADDSUB_LEVEL + (54) ADDSUB_LEVEL -> . ADDSUB_LEVEL ADDSUB MULTDIV_LEVEL + (55) ADDSUB_LEVEL -> . MULTDIV_LEVEL + (56) MULTDIV_LEVEL -> . MULTDIV_LEVEL MULTDIV NOT_LEVEL + (57) MULTDIV_LEVEL -> . NOT_LEVEL + (58) NOT_LEVEL -> . NOT NOT_LEVEL + (59) NOT_LEVEL -> . F + (60) F -> . ID + (61) F -> . ID ARRAY BOUND_CHECK + (62) F -> . FNUMBER + (63) F -> . NUMBER + (64) F -> . LPAREN EXPRESSION RPAREN + + NOT shift and go to state 50 + ID shift and go to state 52 + FNUMBER shift and go to state 53 + NUMBER shift and go to state 54 + LPAREN shift and go to state 55 + + EXPRESSION shift and go to state 89 + OR_LEVEL shift and go to state 44 + AND_LEVEL shift and go to state 45 + RELATIONAL_LEVEL shift and go to state 46 + ADDSUB_LEVEL shift and go to state 47 + MULTDIV_LEVEL shift and go to state 48 + NOT_LEVEL shift and go to state 49 + F shift and go to state 51 state 67 - (16) B -> ID INDICES EQUAL E . SEMICOLON V B + (6) SUBROUTINE_RULE -> SUBROUTINE ID SUBACTION B . RETURN - SEMICOLON shift and go to state 92 + RETURN shift and go to state 90 state 68 - (24) INDICES -> LEFT_PARENTESIS E RIGHT_PARENTESIS . - - EQUAL reduce using rule 24 (INDICES -> LEFT_PARENTESIS E RIGHT_PARENTESIS .) - PLUS reduce using rule 24 (INDICES -> LEFT_PARENTESIS E RIGHT_PARENTESIS .) - STAR reduce using rule 24 (INDICES -> LEFT_PARENTESIS E RIGHT_PARENTESIS .) - SLASH reduce using rule 24 (INDICES -> LEFT_PARENTESIS E RIGHT_PARENTESIS .) - MINUS reduce using rule 24 (INDICES -> LEFT_PARENTESIS E RIGHT_PARENTESIS .) - COMA reduce using rule 24 (INDICES -> LEFT_PARENTESIS E RIGHT_PARENTESIS .) - SEMICOLON reduce using rule 24 (INDICES -> LEFT_PARENTESIS E RIGHT_PARENTESIS .) - RIGHT_PARENTESIS reduce using rule 24 (INDICES -> LEFT_PARENTESIS E RIGHT_PARENTESIS .) - + (8) DECL -> DIM ID AS TYPE SEMICOLON . DECL + (8) DECL -> . DIM ID AS TYPE SEMICOLON DECL + (9) DECL -> . DIM ID ARRAY AS TYPE SEMICOLON DECL + (10) DECL -> . + + DIM shift and go to state 6 + SUBROUTINE reduce using rule 10 (DECL -> .) + IF reduce using rule 10 (DECL -> .) + WHILE reduce using rule 10 (DECL -> .) + GOSUB reduce using rule 10 (DECL -> .) + FOR reduce using rule 10 (DECL -> .) + PRINT reduce using rule 10 (DECL -> .) + PRINTLN reduce using rule 10 (DECL -> .) + INPUT reduce using rule 10 (DECL -> .) + ID reduce using rule 10 (DECL -> .) + FINISH reduce using rule 10 (DECL -> .) + + DECL shift and go to state 91 state 69 - (25) INDICES -> LEFT_PARENTESIS E COMA . E RIGHT_PARENTESIS - (26) INDICES -> LEFT_PARENTESIS E COMA . E COMA E RIGHT_PARENTESIS - (38) E -> . LEFT_PARENTESIS E RIGHT_PARENTESIS E_AUX - (39) E -> . CONSTANT E_AUX - (40) E -> . ID INDICES E_AUX + (9) DECL -> DIM ID ARRAY AS TYPE . SEMICOLON DECL - LEFT_PARENTESIS shift and go to state 32 - CONSTANT shift and go to state 33 - ID shift and go to state 34 + SEMICOLON shift and go to state 92 - E shift and go to state 93 state 70 - (17) B -> READ ID SEMICOLON V . B - (15) B -> . CALL ID SEMICOLON V B - (16) B -> . ID INDICES EQUAL E SEMICOLON V B - (17) B -> . READ ID SEMICOLON V B - (18) B -> . WRITE STRING WRITE_AUX SEMICOLON V B - (19) B -> . WRITE E WRITE_AUX SEMICOLON V B - (20) B -> . IF LEFT_PARENTESIS EL RIGHT_PARENTESIS B ELSE_AUX ENDIF V B - (21) B -> . WHILE LEFT_PARENTESIS EL RIGHT_PARENTESIS V B ENDWHILE V B - (22) B -> . FOR LEFT_PARENTESIS EL COMA B RIGHT_PARENTESIS V B ENDFOR V B - (23) B -> . - - ! shift/reduce conflict for CALL resolved as shift - ! shift/reduce conflict for ID resolved as shift - ! shift/reduce conflict for READ resolved as shift - ! shift/reduce conflict for WRITE resolved as shift - ! shift/reduce conflict for IF resolved as shift - ! shift/reduce conflict for WHILE resolved as shift - ! shift/reduce conflict for FOR resolved as shift - CALL shift and go to state 10 - ID shift and go to state 11 - READ shift and go to state 12 - WRITE shift and go to state 13 - IF shift and go to state 14 - WHILE shift and go to state 15 - FOR shift and go to state 16 - BE reduce using rule 23 (B -> .) - FINISH reduce using rule 23 (B -> .) - RETURN reduce using rule 23 (B -> .) - ELSE reduce using rule 23 (B -> .) - ENDIF reduce using rule 23 (B -> .) - RIGHT_PARENTESIS reduce using rule 23 (B -> .) - ENDWHILE reduce using rule 23 (B -> .) - ENDFOR reduce using rule 23 (B -> .) - - ! CALL [ reduce using rule 23 (B -> .) ] - ! ID [ reduce using rule 23 (B -> .) ] - ! READ [ reduce using rule 23 (B -> .) ] - ! WRITE [ reduce using rule 23 (B -> .) ] - ! IF [ reduce using rule 23 (B -> .) ] - ! WHILE [ reduce using rule 23 (B -> .) ] - ! FOR [ reduce using rule 23 (B -> .) ] - - B shift and go to state 94 + (13) ARRAY_RULE -> LBRACKET EXPRESSION RBRACKET . + + LBRACKET reduce using rule 13 (ARRAY_RULE -> LBRACKET EXPRESSION RBRACKET .) + AS reduce using rule 13 (ARRAY_RULE -> LBRACKET EXPRESSION RBRACKET .) + EQUALS reduce using rule 13 (ARRAY_RULE -> LBRACKET EXPRESSION RBRACKET .) + MULTDIV reduce using rule 13 (ARRAY_RULE -> LBRACKET EXPRESSION RBRACKET .) + ADDSUB reduce using rule 13 (ARRAY_RULE -> LBRACKET EXPRESSION RBRACKET .) + RELATIONAL reduce using rule 13 (ARRAY_RULE -> LBRACKET EXPRESSION RBRACKET .) + AND reduce using rule 13 (ARRAY_RULE -> LBRACKET EXPRESSION RBRACKET .) + OR reduce using rule 13 (ARRAY_RULE -> LBRACKET EXPRESSION RBRACKET .) + RBRACKET reduce using rule 13 (ARRAY_RULE -> LBRACKET EXPRESSION RBRACKET .) + RPAREN reduce using rule 13 (ARRAY_RULE -> LBRACKET EXPRESSION RBRACKET .) + SEMICOLON reduce using rule 13 (ARRAY_RULE -> LBRACKET EXPRESSION RBRACKET .) + IF reduce using rule 13 (ARRAY_RULE -> LBRACKET EXPRESSION RBRACKET .) + WHILE reduce using rule 13 (ARRAY_RULE -> LBRACKET EXPRESSION RBRACKET .) + GOSUB reduce using rule 13 (ARRAY_RULE -> LBRACKET EXPRESSION RBRACKET .) + FOR reduce using rule 13 (ARRAY_RULE -> LBRACKET EXPRESSION RBRACKET .) + PRINT reduce using rule 13 (ARRAY_RULE -> LBRACKET EXPRESSION RBRACKET .) + PRINTLN reduce using rule 13 (ARRAY_RULE -> LBRACKET EXPRESSION RBRACKET .) + INPUT reduce using rule 13 (ARRAY_RULE -> LBRACKET EXPRESSION RBRACKET .) + ID reduce using rule 13 (ARRAY_RULE -> LBRACKET EXPRESSION RBRACKET .) + NEXT reduce using rule 13 (ARRAY_RULE -> LBRACKET EXPRESSION RBRACKET .) + state 71 - (18) B -> WRITE STRING WRITE_AUX SEMICOLON . V B - (2) V -> . BE VARIABLES SEMICOLON B V - (3) V -> . - - ! shift/reduce conflict for BE resolved as shift - BE shift and go to state 7 - CALL reduce using rule 3 (V -> .) - ID reduce using rule 3 (V -> .) - READ reduce using rule 3 (V -> .) - WRITE reduce using rule 3 (V -> .) - IF reduce using rule 3 (V -> .) - WHILE reduce using rule 3 (V -> .) - FOR reduce using rule 3 (V -> .) - FINISH reduce using rule 3 (V -> .) - RETURN reduce using rule 3 (V -> .) - ELSE reduce using rule 3 (V -> .) - ENDIF reduce using rule 3 (V -> .) - RIGHT_PARENTESIS reduce using rule 3 (V -> .) - ENDWHILE reduce using rule 3 (V -> .) - ENDFOR reduce using rule 3 (V -> .) - - ! BE [ reduce using rule 3 (V -> .) ] - - V shift and go to state 95 + (48) OR_LEVEL -> OR_LEVEL OR . AND_LEVEL + (50) AND_LEVEL -> . AND_LEVEL AND RELATIONAL_LEVEL + (51) AND_LEVEL -> . RELATIONAL_LEVEL + (52) RELATIONAL_LEVEL -> . RELATIONAL_LEVEL RELATIONAL ADDSUB_LEVEL + (53) RELATIONAL_LEVEL -> . ADDSUB_LEVEL + (54) ADDSUB_LEVEL -> . ADDSUB_LEVEL ADDSUB MULTDIV_LEVEL + (55) ADDSUB_LEVEL -> . MULTDIV_LEVEL + (56) MULTDIV_LEVEL -> . MULTDIV_LEVEL MULTDIV NOT_LEVEL + (57) MULTDIV_LEVEL -> . NOT_LEVEL + (58) NOT_LEVEL -> . NOT NOT_LEVEL + (59) NOT_LEVEL -> . F + (60) F -> . ID + (61) F -> . ID ARRAY BOUND_CHECK + (62) F -> . FNUMBER + (63) F -> . NUMBER + (64) F -> . LPAREN EXPRESSION RPAREN + + NOT shift and go to state 50 + ID shift and go to state 52 + FNUMBER shift and go to state 53 + NUMBER shift and go to state 54 + LPAREN shift and go to state 55 + + AND_LEVEL shift and go to state 93 + RELATIONAL_LEVEL shift and go to state 46 + ADDSUB_LEVEL shift and go to state 47 + MULTDIV_LEVEL shift and go to state 48 + NOT_LEVEL shift and go to state 49 + F shift and go to state 51 state 72 - (30) WRITE_AUX -> COMA STRING . WRITE_AUX - (30) WRITE_AUX -> . COMA STRING WRITE_AUX - (31) WRITE_AUX -> . COMA ID INDICES WRITE_AUX - (32) WRITE_AUX -> . - - COMA shift and go to state 48 - SEMICOLON reduce using rule 32 (WRITE_AUX -> .) - - WRITE_AUX shift and go to state 96 + (50) AND_LEVEL -> AND_LEVEL AND . RELATIONAL_LEVEL + (52) RELATIONAL_LEVEL -> . RELATIONAL_LEVEL RELATIONAL ADDSUB_LEVEL + (53) RELATIONAL_LEVEL -> . ADDSUB_LEVEL + (54) ADDSUB_LEVEL -> . ADDSUB_LEVEL ADDSUB MULTDIV_LEVEL + (55) ADDSUB_LEVEL -> . MULTDIV_LEVEL + (56) MULTDIV_LEVEL -> . MULTDIV_LEVEL MULTDIV NOT_LEVEL + (57) MULTDIV_LEVEL -> . NOT_LEVEL + (58) NOT_LEVEL -> . NOT NOT_LEVEL + (59) NOT_LEVEL -> . F + (60) F -> . ID + (61) F -> . ID ARRAY BOUND_CHECK + (62) F -> . FNUMBER + (63) F -> . NUMBER + (64) F -> . LPAREN EXPRESSION RPAREN + + NOT shift and go to state 50 + ID shift and go to state 52 + FNUMBER shift and go to state 53 + NUMBER shift and go to state 54 + LPAREN shift and go to state 55 + + RELATIONAL_LEVEL shift and go to state 94 + ADDSUB_LEVEL shift and go to state 47 + MULTDIV_LEVEL shift and go to state 48 + NOT_LEVEL shift and go to state 49 + F shift and go to state 51 state 73 - (31) WRITE_AUX -> COMA ID . INDICES WRITE_AUX - (24) INDICES -> . LEFT_PARENTESIS E RIGHT_PARENTESIS - (25) INDICES -> . LEFT_PARENTESIS E COMA E RIGHT_PARENTESIS - (26) INDICES -> . LEFT_PARENTESIS E COMA E COMA E RIGHT_PARENTESIS - (27) INDICES -> . - - LEFT_PARENTESIS shift and go to state 28 - COMA reduce using rule 27 (INDICES -> .) - SEMICOLON reduce using rule 27 (INDICES -> .) - - INDICES shift and go to state 97 + (52) RELATIONAL_LEVEL -> RELATIONAL_LEVEL RELATIONAL . ADDSUB_LEVEL + (54) ADDSUB_LEVEL -> . ADDSUB_LEVEL ADDSUB MULTDIV_LEVEL + (55) ADDSUB_LEVEL -> . MULTDIV_LEVEL + (56) MULTDIV_LEVEL -> . MULTDIV_LEVEL MULTDIV NOT_LEVEL + (57) MULTDIV_LEVEL -> . NOT_LEVEL + (58) NOT_LEVEL -> . NOT NOT_LEVEL + (59) NOT_LEVEL -> . F + (60) F -> . ID + (61) F -> . ID ARRAY BOUND_CHECK + (62) F -> . FNUMBER + (63) F -> . NUMBER + (64) F -> . LPAREN EXPRESSION RPAREN + + NOT shift and go to state 50 + ID shift and go to state 52 + FNUMBER shift and go to state 53 + NUMBER shift and go to state 54 + LPAREN shift and go to state 55 + + ADDSUB_LEVEL shift and go to state 95 + MULTDIV_LEVEL shift and go to state 48 + NOT_LEVEL shift and go to state 49 + F shift and go to state 51 state 74 - (19) B -> WRITE E WRITE_AUX SEMICOLON . V B - (2) V -> . BE VARIABLES SEMICOLON B V - (3) V -> . - - ! shift/reduce conflict for BE resolved as shift - BE shift and go to state 7 - CALL reduce using rule 3 (V -> .) - ID reduce using rule 3 (V -> .) - READ reduce using rule 3 (V -> .) - WRITE reduce using rule 3 (V -> .) - IF reduce using rule 3 (V -> .) - WHILE reduce using rule 3 (V -> .) - FOR reduce using rule 3 (V -> .) - FINISH reduce using rule 3 (V -> .) - RETURN reduce using rule 3 (V -> .) - ELSE reduce using rule 3 (V -> .) - ENDIF reduce using rule 3 (V -> .) - RIGHT_PARENTESIS reduce using rule 3 (V -> .) - ENDWHILE reduce using rule 3 (V -> .) - ENDFOR reduce using rule 3 (V -> .) - - ! BE [ reduce using rule 3 (V -> .) ] - - V shift and go to state 98 + (54) ADDSUB_LEVEL -> ADDSUB_LEVEL ADDSUB . MULTDIV_LEVEL + (56) MULTDIV_LEVEL -> . MULTDIV_LEVEL MULTDIV NOT_LEVEL + (57) MULTDIV_LEVEL -> . NOT_LEVEL + (58) NOT_LEVEL -> . NOT NOT_LEVEL + (59) NOT_LEVEL -> . F + (60) F -> . ID + (61) F -> . ID ARRAY BOUND_CHECK + (62) F -> . FNUMBER + (63) F -> . NUMBER + (64) F -> . LPAREN EXPRESSION RPAREN + + NOT shift and go to state 50 + ID shift and go to state 52 + FNUMBER shift and go to state 53 + NUMBER shift and go to state 54 + LPAREN shift and go to state 55 + + MULTDIV_LEVEL shift and go to state 96 + NOT_LEVEL shift and go to state 49 + F shift and go to state 51 state 75 - (38) E -> LEFT_PARENTESIS E RIGHT_PARENTESIS . E_AUX - (41) E_AUX -> . PLUS E - (42) E_AUX -> . STAR E - (43) E_AUX -> . SLASH E - (44) E_AUX -> . MINUS E - (45) E_AUX -> . + (56) MULTDIV_LEVEL -> MULTDIV_LEVEL MULTDIV . NOT_LEVEL + (58) NOT_LEVEL -> . NOT NOT_LEVEL + (59) NOT_LEVEL -> . F + (60) F -> . ID + (61) F -> . ID ARRAY BOUND_CHECK + (62) F -> . FNUMBER + (63) F -> . NUMBER + (64) F -> . LPAREN EXPRESSION RPAREN - PLUS shift and go to state 52 - STAR shift and go to state 53 - SLASH shift and go to state 54 - MINUS shift and go to state 55 - COMA reduce using rule 45 (E_AUX -> .) - SEMICOLON reduce using rule 45 (E_AUX -> .) - RIGHT_PARENTESIS reduce using rule 45 (E_AUX -> .) + NOT shift and go to state 50 + ID shift and go to state 52 + FNUMBER shift and go to state 53 + NUMBER shift and go to state 54 + LPAREN shift and go to state 55 - E_AUX shift and go to state 99 + NOT_LEVEL shift and go to state 97 + F shift and go to state 51 state 76 - (41) E_AUX -> PLUS E . - - COMA reduce using rule 41 (E_AUX -> PLUS E .) - SEMICOLON reduce using rule 41 (E_AUX -> PLUS E .) - RIGHT_PARENTESIS reduce using rule 41 (E_AUX -> PLUS E .) + (58) NOT_LEVEL -> NOT NOT_LEVEL . + + MULTDIV reduce using rule 58 (NOT_LEVEL -> NOT NOT_LEVEL .) + ADDSUB reduce using rule 58 (NOT_LEVEL -> NOT NOT_LEVEL .) + RELATIONAL reduce using rule 58 (NOT_LEVEL -> NOT NOT_LEVEL .) + AND reduce using rule 58 (NOT_LEVEL -> NOT NOT_LEVEL .) + OR reduce using rule 58 (NOT_LEVEL -> NOT NOT_LEVEL .) + RBRACKET reduce using rule 58 (NOT_LEVEL -> NOT NOT_LEVEL .) + RPAREN reduce using rule 58 (NOT_LEVEL -> NOT NOT_LEVEL .) + SEMICOLON reduce using rule 58 (NOT_LEVEL -> NOT NOT_LEVEL .) + IF reduce using rule 58 (NOT_LEVEL -> NOT NOT_LEVEL .) + WHILE reduce using rule 58 (NOT_LEVEL -> NOT NOT_LEVEL .) + GOSUB reduce using rule 58 (NOT_LEVEL -> NOT NOT_LEVEL .) + FOR reduce using rule 58 (NOT_LEVEL -> NOT NOT_LEVEL .) + PRINT reduce using rule 58 (NOT_LEVEL -> NOT NOT_LEVEL .) + PRINTLN reduce using rule 58 (NOT_LEVEL -> NOT NOT_LEVEL .) + INPUT reduce using rule 58 (NOT_LEVEL -> NOT NOT_LEVEL .) + ID reduce using rule 58 (NOT_LEVEL -> NOT NOT_LEVEL .) + NEXT reduce using rule 58 (NOT_LEVEL -> NOT NOT_LEVEL .) state 77 - (42) E_AUX -> STAR E . - - COMA reduce using rule 42 (E_AUX -> STAR E .) - SEMICOLON reduce using rule 42 (E_AUX -> STAR E .) - RIGHT_PARENTESIS reduce using rule 42 (E_AUX -> STAR E .) - + (61) F -> ID ARRAY . BOUND_CHECK + (46) BOUND_CHECK -> . + + MULTDIV reduce using rule 46 (BOUND_CHECK -> .) + ADDSUB reduce using rule 46 (BOUND_CHECK -> .) + RELATIONAL reduce using rule 46 (BOUND_CHECK -> .) + AND reduce using rule 46 (BOUND_CHECK -> .) + OR reduce using rule 46 (BOUND_CHECK -> .) + RBRACKET reduce using rule 46 (BOUND_CHECK -> .) + RPAREN reduce using rule 46 (BOUND_CHECK -> .) + SEMICOLON reduce using rule 46 (BOUND_CHECK -> .) + IF reduce using rule 46 (BOUND_CHECK -> .) + WHILE reduce using rule 46 (BOUND_CHECK -> .) + GOSUB reduce using rule 46 (BOUND_CHECK -> .) + FOR reduce using rule 46 (BOUND_CHECK -> .) + PRINT reduce using rule 46 (BOUND_CHECK -> .) + PRINTLN reduce using rule 46 (BOUND_CHECK -> .) + INPUT reduce using rule 46 (BOUND_CHECK -> .) + ID reduce using rule 46 (BOUND_CHECK -> .) + NEXT reduce using rule 46 (BOUND_CHECK -> .) + + BOUND_CHECK shift and go to state 98 state 78 - (43) E_AUX -> SLASH E . + (64) F -> LPAREN EXPRESSION . RPAREN - COMA reduce using rule 43 (E_AUX -> SLASH E .) - SEMICOLON reduce using rule 43 (E_AUX -> SLASH E .) - RIGHT_PARENTESIS reduce using rule 43 (E_AUX -> SLASH E .) + RPAREN shift and go to state 99 state 79 - (44) E_AUX -> MINUS E . + (39) IF_RULE -> IF LPAREN EXPRESSION . IF_ACTION RPAREN THEN B END + (40) IFELSE_RULE -> IF LPAREN EXPRESSION . IF_ACTION RPAREN THEN B ELSE_ACTION ELSE_RULE END + (42) IF_ACTION -> . - COMA reduce using rule 44 (E_AUX -> MINUS E .) - SEMICOLON reduce using rule 44 (E_AUX -> MINUS E .) - RIGHT_PARENTESIS reduce using rule 44 (E_AUX -> MINUS E .) + RPAREN reduce using rule 42 (IF_ACTION -> .) + IF_ACTION shift and go to state 100 state 80 - (40) E -> ID INDICES E_AUX . - - COMA reduce using rule 40 (E -> ID INDICES E_AUX .) - SEMICOLON reduce using rule 40 (E -> ID INDICES E_AUX .) - RIGHT_PARENTESIS reduce using rule 40 (E -> ID INDICES E_AUX .) - + (36) WHILE_RULE -> WHILE LPAREN WHILE_ACTION . EXPRESSION WHILE_ACTION_JUMP RPAREN B END + (47) EXPRESSION -> . OR_LEVEL + (48) OR_LEVEL -> . OR_LEVEL OR AND_LEVEL + (49) OR_LEVEL -> . AND_LEVEL + (50) AND_LEVEL -> . AND_LEVEL AND RELATIONAL_LEVEL + (51) AND_LEVEL -> . RELATIONAL_LEVEL + (52) RELATIONAL_LEVEL -> . RELATIONAL_LEVEL RELATIONAL ADDSUB_LEVEL + (53) RELATIONAL_LEVEL -> . ADDSUB_LEVEL + (54) ADDSUB_LEVEL -> . ADDSUB_LEVEL ADDSUB MULTDIV_LEVEL + (55) ADDSUB_LEVEL -> . MULTDIV_LEVEL + (56) MULTDIV_LEVEL -> . MULTDIV_LEVEL MULTDIV NOT_LEVEL + (57) MULTDIV_LEVEL -> . NOT_LEVEL + (58) NOT_LEVEL -> . NOT NOT_LEVEL + (59) NOT_LEVEL -> . F + (60) F -> . ID + (61) F -> . ID ARRAY BOUND_CHECK + (62) F -> . FNUMBER + (63) F -> . NUMBER + (64) F -> . LPAREN EXPRESSION RPAREN + + NOT shift and go to state 50 + ID shift and go to state 52 + FNUMBER shift and go to state 53 + NUMBER shift and go to state 54 + LPAREN shift and go to state 55 + + EXPRESSION shift and go to state 101 + OR_LEVEL shift and go to state 44 + AND_LEVEL shift and go to state 45 + RELATIONAL_LEVEL shift and go to state 46 + ADDSUB_LEVEL shift and go to state 47 + MULTDIV_LEVEL shift and go to state 48 + NOT_LEVEL shift and go to state 49 + F shift and go to state 51 state 81 - (33) EL -> LEFT_PARENTESIS EL . RIGHT_PARENTESIS EL_AUX + (33) GOSUB_RULE -> GOSUB ID SEMICOLON . - RIGHT_PARENTESIS shift and go to state 100 + IF reduce using rule 33 (GOSUB_RULE -> GOSUB ID SEMICOLON .) + WHILE reduce using rule 33 (GOSUB_RULE -> GOSUB ID SEMICOLON .) + GOSUB reduce using rule 33 (GOSUB_RULE -> GOSUB ID SEMICOLON .) + FOR reduce using rule 33 (GOSUB_RULE -> GOSUB ID SEMICOLON .) + PRINT reduce using rule 33 (GOSUB_RULE -> GOSUB ID SEMICOLON .) + PRINTLN reduce using rule 33 (GOSUB_RULE -> GOSUB ID SEMICOLON .) + INPUT reduce using rule 33 (GOSUB_RULE -> GOSUB ID SEMICOLON .) + ID reduce using rule 33 (GOSUB_RULE -> GOSUB ID SEMICOLON .) + FINISH reduce using rule 33 (GOSUB_RULE -> GOSUB ID SEMICOLON .) + RETURN reduce using rule 33 (GOSUB_RULE -> GOSUB ID SEMICOLON .) + NEXT reduce using rule 33 (GOSUB_RULE -> GOSUB ID SEMICOLON .) + END reduce using rule 33 (GOSUB_RULE -> GOSUB ID SEMICOLON .) + ELSE reduce using rule 33 (GOSUB_RULE -> GOSUB ID SEMICOLON .) state 82 - (20) B -> IF LEFT_PARENTESIS EL RIGHT_PARENTESIS . B ELSE_AUX ENDIF V B - (15) B -> . CALL ID SEMICOLON V B - (16) B -> . ID INDICES EQUAL E SEMICOLON V B - (17) B -> . READ ID SEMICOLON V B - (18) B -> . WRITE STRING WRITE_AUX SEMICOLON V B - (19) B -> . WRITE E WRITE_AUX SEMICOLON V B - (20) B -> . IF LEFT_PARENTESIS EL RIGHT_PARENTESIS B ELSE_AUX ENDIF V B - (21) B -> . WHILE LEFT_PARENTESIS EL RIGHT_PARENTESIS V B ENDWHILE V B - (22) B -> . FOR LEFT_PARENTESIS EL COMA B RIGHT_PARENTESIS V B ENDFOR V B - (23) B -> . - - CALL shift and go to state 10 - ID shift and go to state 11 - READ shift and go to state 12 - WRITE shift and go to state 13 - IF shift and go to state 14 - WHILE shift and go to state 15 - FOR shift and go to state 16 - ELSE reduce using rule 23 (B -> .) - ENDIF reduce using rule 23 (B -> .) - - B shift and go to state 101 + (44) ASSIGN -> ID EQUALS EXPRESSION . SEMICOLON -state 83 + SEMICOLON shift and go to state 102 - (34) EL -> CONSTANT EL_AUX . - RIGHT_PARENTESIS reduce using rule 34 (EL -> CONSTANT EL_AUX .) - COMA reduce using rule 34 (EL -> CONSTANT EL_AUX .) +state 83 + (45) ASSIGN -> ID ARRAY BOUND_CHECK . EQUALS EXPRESSION SEMICOLON -state 84 + EQUALS shift and go to state 103 - (36) EL_AUX -> COMPARISON . EL - (33) EL -> . LEFT_PARENTESIS EL RIGHT_PARENTESIS EL_AUX - (34) EL -> . CONSTANT EL_AUX - (35) EL -> . ID EL_AUX - LEFT_PARENTESIS shift and go to state 57 - CONSTANT shift and go to state 59 - ID shift and go to state 60 +state 84 - EL shift and go to state 102 + (34) FOR_RULE -> FOR ASSIGN TO . EXPRESSION FOR_ACTION B NEXT ID + (47) EXPRESSION -> . OR_LEVEL + (48) OR_LEVEL -> . OR_LEVEL OR AND_LEVEL + (49) OR_LEVEL -> . AND_LEVEL + (50) AND_LEVEL -> . AND_LEVEL AND RELATIONAL_LEVEL + (51) AND_LEVEL -> . RELATIONAL_LEVEL + (52) RELATIONAL_LEVEL -> . RELATIONAL_LEVEL RELATIONAL ADDSUB_LEVEL + (53) RELATIONAL_LEVEL -> . ADDSUB_LEVEL + (54) ADDSUB_LEVEL -> . ADDSUB_LEVEL ADDSUB MULTDIV_LEVEL + (55) ADDSUB_LEVEL -> . MULTDIV_LEVEL + (56) MULTDIV_LEVEL -> . MULTDIV_LEVEL MULTDIV NOT_LEVEL + (57) MULTDIV_LEVEL -> . NOT_LEVEL + (58) NOT_LEVEL -> . NOT NOT_LEVEL + (59) NOT_LEVEL -> . F + (60) F -> . ID + (61) F -> . ID ARRAY BOUND_CHECK + (62) F -> . FNUMBER + (63) F -> . NUMBER + (64) F -> . LPAREN EXPRESSION RPAREN + + NOT shift and go to state 50 + ID shift and go to state 52 + FNUMBER shift and go to state 53 + NUMBER shift and go to state 54 + LPAREN shift and go to state 55 + + EXPRESSION shift and go to state 104 + OR_LEVEL shift and go to state 44 + AND_LEVEL shift and go to state 45 + RELATIONAL_LEVEL shift and go to state 46 + ADDSUB_LEVEL shift and go to state 47 + MULTDIV_LEVEL shift and go to state 48 + NOT_LEVEL shift and go to state 49 + F shift and go to state 51 state 85 - (35) EL -> ID EL_AUX . + (29) PRINT_RULE -> PRINT LPAREN STRING . RPAREN SEMICOLON - RIGHT_PARENTESIS reduce using rule 35 (EL -> ID EL_AUX .) - COMA reduce using rule 35 (EL -> ID EL_AUX .) + RPAREN shift and go to state 105 state 86 - (21) B -> WHILE LEFT_PARENTESIS EL RIGHT_PARENTESIS . V B ENDWHILE V B - (2) V -> . BE VARIABLES SEMICOLON B V - (3) V -> . + (30) PRINT_RULE -> PRINT LPAREN EXPRESSION . RPAREN SEMICOLON - BE shift and go to state 7 - CALL reduce using rule 3 (V -> .) - ID reduce using rule 3 (V -> .) - READ reduce using rule 3 (V -> .) - WRITE reduce using rule 3 (V -> .) - IF reduce using rule 3 (V -> .) - WHILE reduce using rule 3 (V -> .) - FOR reduce using rule 3 (V -> .) - ENDWHILE reduce using rule 3 (V -> .) + RPAREN shift and go to state 106 - V shift and go to state 103 state 87 - (22) B -> FOR LEFT_PARENTESIS EL COMA . B RIGHT_PARENTESIS V B ENDFOR V B - (15) B -> . CALL ID SEMICOLON V B - (16) B -> . ID INDICES EQUAL E SEMICOLON V B - (17) B -> . READ ID SEMICOLON V B - (18) B -> . WRITE STRING WRITE_AUX SEMICOLON V B - (19) B -> . WRITE E WRITE_AUX SEMICOLON V B - (20) B -> . IF LEFT_PARENTESIS EL RIGHT_PARENTESIS B ELSE_AUX ENDIF V B - (21) B -> . WHILE LEFT_PARENTESIS EL RIGHT_PARENTESIS V B ENDWHILE V B - (22) B -> . FOR LEFT_PARENTESIS EL COMA B RIGHT_PARENTESIS V B ENDFOR V B - (23) B -> . - - CALL shift and go to state 10 - ID shift and go to state 11 - READ shift and go to state 12 - WRITE shift and go to state 13 - IF shift and go to state 14 - WHILE shift and go to state 15 - FOR shift and go to state 16 - RIGHT_PARENTESIS reduce using rule 23 (B -> .) - - B shift and go to state 104 + (31) PRINTLN_RULE -> PRINTLN LPAREN STRING . RPAREN SEMICOLON + + RPAREN shift and go to state 107 + state 88 - (2) V -> BE VARIABLES SEMICOLON B V . - - CALL reduce using rule 2 (V -> BE VARIABLES SEMICOLON B V .) - ID reduce using rule 2 (V -> BE VARIABLES SEMICOLON B V .) - READ reduce using rule 2 (V -> BE VARIABLES SEMICOLON B V .) - WRITE reduce using rule 2 (V -> BE VARIABLES SEMICOLON B V .) - IF reduce using rule 2 (V -> BE VARIABLES SEMICOLON B V .) - WHILE reduce using rule 2 (V -> BE VARIABLES SEMICOLON B V .) - FOR reduce using rule 2 (V -> BE VARIABLES SEMICOLON B V .) - FINISH reduce using rule 2 (V -> BE VARIABLES SEMICOLON B V .) - RETURN reduce using rule 2 (V -> BE VARIABLES SEMICOLON B V .) - BE reduce using rule 2 (V -> BE VARIABLES SEMICOLON B V .) - ELSE reduce using rule 2 (V -> BE VARIABLES SEMICOLON B V .) - ENDIF reduce using rule 2 (V -> BE VARIABLES SEMICOLON B V .) - RIGHT_PARENTESIS reduce using rule 2 (V -> BE VARIABLES SEMICOLON B V .) - ENDWHILE reduce using rule 2 (V -> BE VARIABLES SEMICOLON B V .) - ENDFOR reduce using rule 2 (V -> BE VARIABLES SEMICOLON B V .) + (32) PRINTLN_RULE -> PRINTLN LPAREN EXPRESSION . RPAREN SEMICOLON + + RPAREN shift and go to state 108 state 89 - (6) VARIABLES -> T ID LEFT_PARENTESIS CONSTANT . RIGHT_PARENTESIS - (7) VARIABLES -> T ID LEFT_PARENTESIS CONSTANT . COMA CONSTANT RIGHT_PARENTESIS - (8) VARIABLES -> T ID LEFT_PARENTESIS CONSTANT . COMA CONSTANT COMA CONSTANT RIGHT_PARENTESIS + (28) INPUT_RULE -> INPUT LPAREN EXPRESSION . RPAREN SEMICOLON - RIGHT_PARENTESIS shift and go to state 105 - COMA shift and go to state 106 + RPAREN shift and go to state 109 state 90 - (13) R -> ROUTINE LEFT_PARENTESIS ID RIGHT_PARENTESIS V B RETURN . R - (13) R -> . ROUTINE LEFT_PARENTESIS ID RIGHT_PARENTESIS V B RETURN R - (14) R -> . + (6) SUBROUTINE_RULE -> SUBROUTINE ID SUBACTION B RETURN . - ROUTINE shift and go to state 3 - START reduce using rule 14 (R -> .) - $end reduce using rule 14 (R -> .) + SUBROUTINE reduce using rule 6 (SUBROUTINE_RULE -> SUBROUTINE ID SUBACTION B RETURN .) + IF reduce using rule 6 (SUBROUTINE_RULE -> SUBROUTINE ID SUBACTION B RETURN .) + WHILE reduce using rule 6 (SUBROUTINE_RULE -> SUBROUTINE ID SUBACTION B RETURN .) + GOSUB reduce using rule 6 (SUBROUTINE_RULE -> SUBROUTINE ID SUBACTION B RETURN .) + FOR reduce using rule 6 (SUBROUTINE_RULE -> SUBROUTINE ID SUBACTION B RETURN .) + PRINT reduce using rule 6 (SUBROUTINE_RULE -> SUBROUTINE ID SUBACTION B RETURN .) + PRINTLN reduce using rule 6 (SUBROUTINE_RULE -> SUBROUTINE ID SUBACTION B RETURN .) + INPUT reduce using rule 6 (SUBROUTINE_RULE -> SUBROUTINE ID SUBACTION B RETURN .) + ID reduce using rule 6 (SUBROUTINE_RULE -> SUBROUTINE ID SUBACTION B RETURN .) + FINISH reduce using rule 6 (SUBROUTINE_RULE -> SUBROUTINE ID SUBACTION B RETURN .) - R shift and go to state 107 state 91 - (15) B -> CALL ID SEMICOLON V B . - - FINISH reduce using rule 15 (B -> CALL ID SEMICOLON V B .) - BE reduce using rule 15 (B -> CALL ID SEMICOLON V B .) - CALL reduce using rule 15 (B -> CALL ID SEMICOLON V B .) - ID reduce using rule 15 (B -> CALL ID SEMICOLON V B .) - READ reduce using rule 15 (B -> CALL ID SEMICOLON V B .) - WRITE reduce using rule 15 (B -> CALL ID SEMICOLON V B .) - IF reduce using rule 15 (B -> CALL ID SEMICOLON V B .) - WHILE reduce using rule 15 (B -> CALL ID SEMICOLON V B .) - FOR reduce using rule 15 (B -> CALL ID SEMICOLON V B .) - RETURN reduce using rule 15 (B -> CALL ID SEMICOLON V B .) - ELSE reduce using rule 15 (B -> CALL ID SEMICOLON V B .) - ENDIF reduce using rule 15 (B -> CALL ID SEMICOLON V B .) - RIGHT_PARENTESIS reduce using rule 15 (B -> CALL ID SEMICOLON V B .) - ENDWHILE reduce using rule 15 (B -> CALL ID SEMICOLON V B .) - ENDFOR reduce using rule 15 (B -> CALL ID SEMICOLON V B .) + (8) DECL -> DIM ID AS TYPE SEMICOLON DECL . + + SUBROUTINE reduce using rule 8 (DECL -> DIM ID AS TYPE SEMICOLON DECL .) + IF reduce using rule 8 (DECL -> DIM ID AS TYPE SEMICOLON DECL .) + WHILE reduce using rule 8 (DECL -> DIM ID AS TYPE SEMICOLON DECL .) + GOSUB reduce using rule 8 (DECL -> DIM ID AS TYPE SEMICOLON DECL .) + FOR reduce using rule 8 (DECL -> DIM ID AS TYPE SEMICOLON DECL .) + PRINT reduce using rule 8 (DECL -> DIM ID AS TYPE SEMICOLON DECL .) + PRINTLN reduce using rule 8 (DECL -> DIM ID AS TYPE SEMICOLON DECL .) + INPUT reduce using rule 8 (DECL -> DIM ID AS TYPE SEMICOLON DECL .) + ID reduce using rule 8 (DECL -> DIM ID AS TYPE SEMICOLON DECL .) + FINISH reduce using rule 8 (DECL -> DIM ID AS TYPE SEMICOLON DECL .) state 92 - (16) B -> ID INDICES EQUAL E SEMICOLON . V B - (2) V -> . BE VARIABLES SEMICOLON B V - (3) V -> . - - ! shift/reduce conflict for BE resolved as shift - BE shift and go to state 7 - CALL reduce using rule 3 (V -> .) - ID reduce using rule 3 (V -> .) - READ reduce using rule 3 (V -> .) - WRITE reduce using rule 3 (V -> .) - IF reduce using rule 3 (V -> .) - WHILE reduce using rule 3 (V -> .) - FOR reduce using rule 3 (V -> .) - FINISH reduce using rule 3 (V -> .) - RETURN reduce using rule 3 (V -> .) - ELSE reduce using rule 3 (V -> .) - ENDIF reduce using rule 3 (V -> .) - RIGHT_PARENTESIS reduce using rule 3 (V -> .) - ENDWHILE reduce using rule 3 (V -> .) - ENDFOR reduce using rule 3 (V -> .) - - ! BE [ reduce using rule 3 (V -> .) ] - - V shift and go to state 108 + (9) DECL -> DIM ID ARRAY AS TYPE SEMICOLON . DECL + (8) DECL -> . DIM ID AS TYPE SEMICOLON DECL + (9) DECL -> . DIM ID ARRAY AS TYPE SEMICOLON DECL + (10) DECL -> . + + DIM shift and go to state 6 + SUBROUTINE reduce using rule 10 (DECL -> .) + IF reduce using rule 10 (DECL -> .) + WHILE reduce using rule 10 (DECL -> .) + GOSUB reduce using rule 10 (DECL -> .) + FOR reduce using rule 10 (DECL -> .) + PRINT reduce using rule 10 (DECL -> .) + PRINTLN reduce using rule 10 (DECL -> .) + INPUT reduce using rule 10 (DECL -> .) + ID reduce using rule 10 (DECL -> .) + FINISH reduce using rule 10 (DECL -> .) + + DECL shift and go to state 110 state 93 - (25) INDICES -> LEFT_PARENTESIS E COMA E . RIGHT_PARENTESIS - (26) INDICES -> LEFT_PARENTESIS E COMA E . COMA E RIGHT_PARENTESIS - - RIGHT_PARENTESIS shift and go to state 110 - COMA shift and go to state 109 + (48) OR_LEVEL -> OR_LEVEL OR AND_LEVEL . + (50) AND_LEVEL -> AND_LEVEL . AND RELATIONAL_LEVEL + + OR reduce using rule 48 (OR_LEVEL -> OR_LEVEL OR AND_LEVEL .) + RBRACKET reduce using rule 48 (OR_LEVEL -> OR_LEVEL OR AND_LEVEL .) + RPAREN reduce using rule 48 (OR_LEVEL -> OR_LEVEL OR AND_LEVEL .) + SEMICOLON reduce using rule 48 (OR_LEVEL -> OR_LEVEL OR AND_LEVEL .) + IF reduce using rule 48 (OR_LEVEL -> OR_LEVEL OR AND_LEVEL .) + WHILE reduce using rule 48 (OR_LEVEL -> OR_LEVEL OR AND_LEVEL .) + GOSUB reduce using rule 48 (OR_LEVEL -> OR_LEVEL OR AND_LEVEL .) + FOR reduce using rule 48 (OR_LEVEL -> OR_LEVEL OR AND_LEVEL .) + PRINT reduce using rule 48 (OR_LEVEL -> OR_LEVEL OR AND_LEVEL .) + PRINTLN reduce using rule 48 (OR_LEVEL -> OR_LEVEL OR AND_LEVEL .) + INPUT reduce using rule 48 (OR_LEVEL -> OR_LEVEL OR AND_LEVEL .) + ID reduce using rule 48 (OR_LEVEL -> OR_LEVEL OR AND_LEVEL .) + NEXT reduce using rule 48 (OR_LEVEL -> OR_LEVEL OR AND_LEVEL .) + AND shift and go to state 72 state 94 - (17) B -> READ ID SEMICOLON V B . - - FINISH reduce using rule 17 (B -> READ ID SEMICOLON V B .) - BE reduce using rule 17 (B -> READ ID SEMICOLON V B .) - CALL reduce using rule 17 (B -> READ ID SEMICOLON V B .) - ID reduce using rule 17 (B -> READ ID SEMICOLON V B .) - READ reduce using rule 17 (B -> READ ID SEMICOLON V B .) - WRITE reduce using rule 17 (B -> READ ID SEMICOLON V B .) - IF reduce using rule 17 (B -> READ ID SEMICOLON V B .) - WHILE reduce using rule 17 (B -> READ ID SEMICOLON V B .) - FOR reduce using rule 17 (B -> READ ID SEMICOLON V B .) - RETURN reduce using rule 17 (B -> READ ID SEMICOLON V B .) - ELSE reduce using rule 17 (B -> READ ID SEMICOLON V B .) - ENDIF reduce using rule 17 (B -> READ ID SEMICOLON V B .) - RIGHT_PARENTESIS reduce using rule 17 (B -> READ ID SEMICOLON V B .) - ENDWHILE reduce using rule 17 (B -> READ ID SEMICOLON V B .) - ENDFOR reduce using rule 17 (B -> READ ID SEMICOLON V B .) + (50) AND_LEVEL -> AND_LEVEL AND RELATIONAL_LEVEL . + (52) RELATIONAL_LEVEL -> RELATIONAL_LEVEL . RELATIONAL ADDSUB_LEVEL + + AND reduce using rule 50 (AND_LEVEL -> AND_LEVEL AND RELATIONAL_LEVEL .) + OR reduce using rule 50 (AND_LEVEL -> AND_LEVEL AND RELATIONAL_LEVEL .) + RBRACKET reduce using rule 50 (AND_LEVEL -> AND_LEVEL AND RELATIONAL_LEVEL .) + RPAREN reduce using rule 50 (AND_LEVEL -> AND_LEVEL AND RELATIONAL_LEVEL .) + SEMICOLON reduce using rule 50 (AND_LEVEL -> AND_LEVEL AND RELATIONAL_LEVEL .) + IF reduce using rule 50 (AND_LEVEL -> AND_LEVEL AND RELATIONAL_LEVEL .) + WHILE reduce using rule 50 (AND_LEVEL -> AND_LEVEL AND RELATIONAL_LEVEL .) + GOSUB reduce using rule 50 (AND_LEVEL -> AND_LEVEL AND RELATIONAL_LEVEL .) + FOR reduce using rule 50 (AND_LEVEL -> AND_LEVEL AND RELATIONAL_LEVEL .) + PRINT reduce using rule 50 (AND_LEVEL -> AND_LEVEL AND RELATIONAL_LEVEL .) + PRINTLN reduce using rule 50 (AND_LEVEL -> AND_LEVEL AND RELATIONAL_LEVEL .) + INPUT reduce using rule 50 (AND_LEVEL -> AND_LEVEL AND RELATIONAL_LEVEL .) + ID reduce using rule 50 (AND_LEVEL -> AND_LEVEL AND RELATIONAL_LEVEL .) + NEXT reduce using rule 50 (AND_LEVEL -> AND_LEVEL AND RELATIONAL_LEVEL .) + RELATIONAL shift and go to state 73 state 95 - (18) B -> WRITE STRING WRITE_AUX SEMICOLON V . B - (15) B -> . CALL ID SEMICOLON V B - (16) B -> . ID INDICES EQUAL E SEMICOLON V B - (17) B -> . READ ID SEMICOLON V B - (18) B -> . WRITE STRING WRITE_AUX SEMICOLON V B - (19) B -> . WRITE E WRITE_AUX SEMICOLON V B - (20) B -> . IF LEFT_PARENTESIS EL RIGHT_PARENTESIS B ELSE_AUX ENDIF V B - (21) B -> . WHILE LEFT_PARENTESIS EL RIGHT_PARENTESIS V B ENDWHILE V B - (22) B -> . FOR LEFT_PARENTESIS EL COMA B RIGHT_PARENTESIS V B ENDFOR V B - (23) B -> . - - ! shift/reduce conflict for CALL resolved as shift - ! shift/reduce conflict for ID resolved as shift - ! shift/reduce conflict for READ resolved as shift - ! shift/reduce conflict for WRITE resolved as shift - ! shift/reduce conflict for IF resolved as shift - ! shift/reduce conflict for WHILE resolved as shift - ! shift/reduce conflict for FOR resolved as shift - CALL shift and go to state 10 - ID shift and go to state 11 - READ shift and go to state 12 - WRITE shift and go to state 13 - IF shift and go to state 14 - WHILE shift and go to state 15 - FOR shift and go to state 16 - BE reduce using rule 23 (B -> .) - FINISH reduce using rule 23 (B -> .) - RETURN reduce using rule 23 (B -> .) - ELSE reduce using rule 23 (B -> .) - ENDIF reduce using rule 23 (B -> .) - RIGHT_PARENTESIS reduce using rule 23 (B -> .) - ENDWHILE reduce using rule 23 (B -> .) - ENDFOR reduce using rule 23 (B -> .) - - ! CALL [ reduce using rule 23 (B -> .) ] - ! ID [ reduce using rule 23 (B -> .) ] - ! READ [ reduce using rule 23 (B -> .) ] - ! WRITE [ reduce using rule 23 (B -> .) ] - ! IF [ reduce using rule 23 (B -> .) ] - ! WHILE [ reduce using rule 23 (B -> .) ] - ! FOR [ reduce using rule 23 (B -> .) ] - - B shift and go to state 111 + (52) RELATIONAL_LEVEL -> RELATIONAL_LEVEL RELATIONAL ADDSUB_LEVEL . + (54) ADDSUB_LEVEL -> ADDSUB_LEVEL . ADDSUB MULTDIV_LEVEL + + RELATIONAL reduce using rule 52 (RELATIONAL_LEVEL -> RELATIONAL_LEVEL RELATIONAL ADDSUB_LEVEL .) + AND reduce using rule 52 (RELATIONAL_LEVEL -> RELATIONAL_LEVEL RELATIONAL ADDSUB_LEVEL .) + OR reduce using rule 52 (RELATIONAL_LEVEL -> RELATIONAL_LEVEL RELATIONAL ADDSUB_LEVEL .) + RBRACKET reduce using rule 52 (RELATIONAL_LEVEL -> RELATIONAL_LEVEL RELATIONAL ADDSUB_LEVEL .) + RPAREN reduce using rule 52 (RELATIONAL_LEVEL -> RELATIONAL_LEVEL RELATIONAL ADDSUB_LEVEL .) + SEMICOLON reduce using rule 52 (RELATIONAL_LEVEL -> RELATIONAL_LEVEL RELATIONAL ADDSUB_LEVEL .) + IF reduce using rule 52 (RELATIONAL_LEVEL -> RELATIONAL_LEVEL RELATIONAL ADDSUB_LEVEL .) + WHILE reduce using rule 52 (RELATIONAL_LEVEL -> RELATIONAL_LEVEL RELATIONAL ADDSUB_LEVEL .) + GOSUB reduce using rule 52 (RELATIONAL_LEVEL -> RELATIONAL_LEVEL RELATIONAL ADDSUB_LEVEL .) + FOR reduce using rule 52 (RELATIONAL_LEVEL -> RELATIONAL_LEVEL RELATIONAL ADDSUB_LEVEL .) + PRINT reduce using rule 52 (RELATIONAL_LEVEL -> RELATIONAL_LEVEL RELATIONAL ADDSUB_LEVEL .) + PRINTLN reduce using rule 52 (RELATIONAL_LEVEL -> RELATIONAL_LEVEL RELATIONAL ADDSUB_LEVEL .) + INPUT reduce using rule 52 (RELATIONAL_LEVEL -> RELATIONAL_LEVEL RELATIONAL ADDSUB_LEVEL .) + ID reduce using rule 52 (RELATIONAL_LEVEL -> RELATIONAL_LEVEL RELATIONAL ADDSUB_LEVEL .) + NEXT reduce using rule 52 (RELATIONAL_LEVEL -> RELATIONAL_LEVEL RELATIONAL ADDSUB_LEVEL .) + ADDSUB shift and go to state 74 -state 96 - (30) WRITE_AUX -> COMA STRING WRITE_AUX . +state 96 - SEMICOLON reduce using rule 30 (WRITE_AUX -> COMA STRING WRITE_AUX .) + (54) ADDSUB_LEVEL -> ADDSUB_LEVEL ADDSUB MULTDIV_LEVEL . + (56) MULTDIV_LEVEL -> MULTDIV_LEVEL . MULTDIV NOT_LEVEL + + ADDSUB reduce using rule 54 (ADDSUB_LEVEL -> ADDSUB_LEVEL ADDSUB MULTDIV_LEVEL .) + RELATIONAL reduce using rule 54 (ADDSUB_LEVEL -> ADDSUB_LEVEL ADDSUB MULTDIV_LEVEL .) + AND reduce using rule 54 (ADDSUB_LEVEL -> ADDSUB_LEVEL ADDSUB MULTDIV_LEVEL .) + OR reduce using rule 54 (ADDSUB_LEVEL -> ADDSUB_LEVEL ADDSUB MULTDIV_LEVEL .) + RBRACKET reduce using rule 54 (ADDSUB_LEVEL -> ADDSUB_LEVEL ADDSUB MULTDIV_LEVEL .) + RPAREN reduce using rule 54 (ADDSUB_LEVEL -> ADDSUB_LEVEL ADDSUB MULTDIV_LEVEL .) + SEMICOLON reduce using rule 54 (ADDSUB_LEVEL -> ADDSUB_LEVEL ADDSUB MULTDIV_LEVEL .) + IF reduce using rule 54 (ADDSUB_LEVEL -> ADDSUB_LEVEL ADDSUB MULTDIV_LEVEL .) + WHILE reduce using rule 54 (ADDSUB_LEVEL -> ADDSUB_LEVEL ADDSUB MULTDIV_LEVEL .) + GOSUB reduce using rule 54 (ADDSUB_LEVEL -> ADDSUB_LEVEL ADDSUB MULTDIV_LEVEL .) + FOR reduce using rule 54 (ADDSUB_LEVEL -> ADDSUB_LEVEL ADDSUB MULTDIV_LEVEL .) + PRINT reduce using rule 54 (ADDSUB_LEVEL -> ADDSUB_LEVEL ADDSUB MULTDIV_LEVEL .) + PRINTLN reduce using rule 54 (ADDSUB_LEVEL -> ADDSUB_LEVEL ADDSUB MULTDIV_LEVEL .) + INPUT reduce using rule 54 (ADDSUB_LEVEL -> ADDSUB_LEVEL ADDSUB MULTDIV_LEVEL .) + ID reduce using rule 54 (ADDSUB_LEVEL -> ADDSUB_LEVEL ADDSUB MULTDIV_LEVEL .) + NEXT reduce using rule 54 (ADDSUB_LEVEL -> ADDSUB_LEVEL ADDSUB MULTDIV_LEVEL .) + MULTDIV shift and go to state 75 state 97 - (31) WRITE_AUX -> COMA ID INDICES . WRITE_AUX - (30) WRITE_AUX -> . COMA STRING WRITE_AUX - (31) WRITE_AUX -> . COMA ID INDICES WRITE_AUX - (32) WRITE_AUX -> . - - COMA shift and go to state 48 - SEMICOLON reduce using rule 32 (WRITE_AUX -> .) + (56) MULTDIV_LEVEL -> MULTDIV_LEVEL MULTDIV NOT_LEVEL . + + MULTDIV reduce using rule 56 (MULTDIV_LEVEL -> MULTDIV_LEVEL MULTDIV NOT_LEVEL .) + ADDSUB reduce using rule 56 (MULTDIV_LEVEL -> MULTDIV_LEVEL MULTDIV NOT_LEVEL .) + RELATIONAL reduce using rule 56 (MULTDIV_LEVEL -> MULTDIV_LEVEL MULTDIV NOT_LEVEL .) + AND reduce using rule 56 (MULTDIV_LEVEL -> MULTDIV_LEVEL MULTDIV NOT_LEVEL .) + OR reduce using rule 56 (MULTDIV_LEVEL -> MULTDIV_LEVEL MULTDIV NOT_LEVEL .) + RBRACKET reduce using rule 56 (MULTDIV_LEVEL -> MULTDIV_LEVEL MULTDIV NOT_LEVEL .) + RPAREN reduce using rule 56 (MULTDIV_LEVEL -> MULTDIV_LEVEL MULTDIV NOT_LEVEL .) + SEMICOLON reduce using rule 56 (MULTDIV_LEVEL -> MULTDIV_LEVEL MULTDIV NOT_LEVEL .) + IF reduce using rule 56 (MULTDIV_LEVEL -> MULTDIV_LEVEL MULTDIV NOT_LEVEL .) + WHILE reduce using rule 56 (MULTDIV_LEVEL -> MULTDIV_LEVEL MULTDIV NOT_LEVEL .) + GOSUB reduce using rule 56 (MULTDIV_LEVEL -> MULTDIV_LEVEL MULTDIV NOT_LEVEL .) + FOR reduce using rule 56 (MULTDIV_LEVEL -> MULTDIV_LEVEL MULTDIV NOT_LEVEL .) + PRINT reduce using rule 56 (MULTDIV_LEVEL -> MULTDIV_LEVEL MULTDIV NOT_LEVEL .) + PRINTLN reduce using rule 56 (MULTDIV_LEVEL -> MULTDIV_LEVEL MULTDIV NOT_LEVEL .) + INPUT reduce using rule 56 (MULTDIV_LEVEL -> MULTDIV_LEVEL MULTDIV NOT_LEVEL .) + ID reduce using rule 56 (MULTDIV_LEVEL -> MULTDIV_LEVEL MULTDIV NOT_LEVEL .) + NEXT reduce using rule 56 (MULTDIV_LEVEL -> MULTDIV_LEVEL MULTDIV NOT_LEVEL .) - WRITE_AUX shift and go to state 112 state 98 - (19) B -> WRITE E WRITE_AUX SEMICOLON V . B - (15) B -> . CALL ID SEMICOLON V B - (16) B -> . ID INDICES EQUAL E SEMICOLON V B - (17) B -> . READ ID SEMICOLON V B - (18) B -> . WRITE STRING WRITE_AUX SEMICOLON V B - (19) B -> . WRITE E WRITE_AUX SEMICOLON V B - (20) B -> . IF LEFT_PARENTESIS EL RIGHT_PARENTESIS B ELSE_AUX ENDIF V B - (21) B -> . WHILE LEFT_PARENTESIS EL RIGHT_PARENTESIS V B ENDWHILE V B - (22) B -> . FOR LEFT_PARENTESIS EL COMA B RIGHT_PARENTESIS V B ENDFOR V B - (23) B -> . - - ! shift/reduce conflict for CALL resolved as shift - ! shift/reduce conflict for ID resolved as shift - ! shift/reduce conflict for READ resolved as shift - ! shift/reduce conflict for WRITE resolved as shift - ! shift/reduce conflict for IF resolved as shift - ! shift/reduce conflict for WHILE resolved as shift - ! shift/reduce conflict for FOR resolved as shift - CALL shift and go to state 10 - ID shift and go to state 11 - READ shift and go to state 12 - WRITE shift and go to state 13 - IF shift and go to state 14 - WHILE shift and go to state 15 - FOR shift and go to state 16 - BE reduce using rule 23 (B -> .) - FINISH reduce using rule 23 (B -> .) - RETURN reduce using rule 23 (B -> .) - ELSE reduce using rule 23 (B -> .) - ENDIF reduce using rule 23 (B -> .) - RIGHT_PARENTESIS reduce using rule 23 (B -> .) - ENDWHILE reduce using rule 23 (B -> .) - ENDFOR reduce using rule 23 (B -> .) - - ! CALL [ reduce using rule 23 (B -> .) ] - ! ID [ reduce using rule 23 (B -> .) ] - ! READ [ reduce using rule 23 (B -> .) ] - ! WRITE [ reduce using rule 23 (B -> .) ] - ! IF [ reduce using rule 23 (B -> .) ] - ! WHILE [ reduce using rule 23 (B -> .) ] - ! FOR [ reduce using rule 23 (B -> .) ] - - B shift and go to state 113 + (61) F -> ID ARRAY BOUND_CHECK . + + MULTDIV reduce using rule 61 (F -> ID ARRAY BOUND_CHECK .) + ADDSUB reduce using rule 61 (F -> ID ARRAY BOUND_CHECK .) + RELATIONAL reduce using rule 61 (F -> ID ARRAY BOUND_CHECK .) + AND reduce using rule 61 (F -> ID ARRAY BOUND_CHECK .) + OR reduce using rule 61 (F -> ID ARRAY BOUND_CHECK .) + RBRACKET reduce using rule 61 (F -> ID ARRAY BOUND_CHECK .) + RPAREN reduce using rule 61 (F -> ID ARRAY BOUND_CHECK .) + SEMICOLON reduce using rule 61 (F -> ID ARRAY BOUND_CHECK .) + IF reduce using rule 61 (F -> ID ARRAY BOUND_CHECK .) + WHILE reduce using rule 61 (F -> ID ARRAY BOUND_CHECK .) + GOSUB reduce using rule 61 (F -> ID ARRAY BOUND_CHECK .) + FOR reduce using rule 61 (F -> ID ARRAY BOUND_CHECK .) + PRINT reduce using rule 61 (F -> ID ARRAY BOUND_CHECK .) + PRINTLN reduce using rule 61 (F -> ID ARRAY BOUND_CHECK .) + INPUT reduce using rule 61 (F -> ID ARRAY BOUND_CHECK .) + ID reduce using rule 61 (F -> ID ARRAY BOUND_CHECK .) + NEXT reduce using rule 61 (F -> ID ARRAY BOUND_CHECK .) -state 99 - (38) E -> LEFT_PARENTESIS E RIGHT_PARENTESIS E_AUX . +state 99 - COMA reduce using rule 38 (E -> LEFT_PARENTESIS E RIGHT_PARENTESIS E_AUX .) - SEMICOLON reduce using rule 38 (E -> LEFT_PARENTESIS E RIGHT_PARENTESIS E_AUX .) - RIGHT_PARENTESIS reduce using rule 38 (E -> LEFT_PARENTESIS E RIGHT_PARENTESIS E_AUX .) + (64) F -> LPAREN EXPRESSION RPAREN . + + MULTDIV reduce using rule 64 (F -> LPAREN EXPRESSION RPAREN .) + ADDSUB reduce using rule 64 (F -> LPAREN EXPRESSION RPAREN .) + RELATIONAL reduce using rule 64 (F -> LPAREN EXPRESSION RPAREN .) + AND reduce using rule 64 (F -> LPAREN EXPRESSION RPAREN .) + OR reduce using rule 64 (F -> LPAREN EXPRESSION RPAREN .) + RBRACKET reduce using rule 64 (F -> LPAREN EXPRESSION RPAREN .) + RPAREN reduce using rule 64 (F -> LPAREN EXPRESSION RPAREN .) + SEMICOLON reduce using rule 64 (F -> LPAREN EXPRESSION RPAREN .) + IF reduce using rule 64 (F -> LPAREN EXPRESSION RPAREN .) + WHILE reduce using rule 64 (F -> LPAREN EXPRESSION RPAREN .) + GOSUB reduce using rule 64 (F -> LPAREN EXPRESSION RPAREN .) + FOR reduce using rule 64 (F -> LPAREN EXPRESSION RPAREN .) + PRINT reduce using rule 64 (F -> LPAREN EXPRESSION RPAREN .) + PRINTLN reduce using rule 64 (F -> LPAREN EXPRESSION RPAREN .) + INPUT reduce using rule 64 (F -> LPAREN EXPRESSION RPAREN .) + ID reduce using rule 64 (F -> LPAREN EXPRESSION RPAREN .) + NEXT reduce using rule 64 (F -> LPAREN EXPRESSION RPAREN .) state 100 - (33) EL -> LEFT_PARENTESIS EL RIGHT_PARENTESIS . EL_AUX - (36) EL_AUX -> . COMPARISON EL - (37) EL_AUX -> . + (39) IF_RULE -> IF LPAREN EXPRESSION IF_ACTION . RPAREN THEN B END + (40) IFELSE_RULE -> IF LPAREN EXPRESSION IF_ACTION . RPAREN THEN B ELSE_ACTION ELSE_RULE END - COMPARISON shift and go to state 84 - RIGHT_PARENTESIS reduce using rule 37 (EL_AUX -> .) - COMA reduce using rule 37 (EL_AUX -> .) + RPAREN shift and go to state 111 - EL_AUX shift and go to state 114 state 101 - (20) B -> IF LEFT_PARENTESIS EL RIGHT_PARENTESIS B . ELSE_AUX ENDIF V B - (28) ELSE_AUX -> . ELSE B - (29) ELSE_AUX -> . + (36) WHILE_RULE -> WHILE LPAREN WHILE_ACTION EXPRESSION . WHILE_ACTION_JUMP RPAREN B END + (38) WHILE_ACTION_JUMP -> . - ELSE shift and go to state 116 - ENDIF reduce using rule 29 (ELSE_AUX -> .) + RPAREN reduce using rule 38 (WHILE_ACTION_JUMP -> .) - ELSE_AUX shift and go to state 115 + WHILE_ACTION_JUMP shift and go to state 112 state 102 - (36) EL_AUX -> COMPARISON EL . + (44) ASSIGN -> ID EQUALS EXPRESSION SEMICOLON . - RIGHT_PARENTESIS reduce using rule 36 (EL_AUX -> COMPARISON EL .) - COMA reduce using rule 36 (EL_AUX -> COMPARISON EL .) + IF reduce using rule 44 (ASSIGN -> ID EQUALS EXPRESSION SEMICOLON .) + WHILE reduce using rule 44 (ASSIGN -> ID EQUALS EXPRESSION SEMICOLON .) + GOSUB reduce using rule 44 (ASSIGN -> ID EQUALS EXPRESSION SEMICOLON .) + FOR reduce using rule 44 (ASSIGN -> ID EQUALS EXPRESSION SEMICOLON .) + PRINT reduce using rule 44 (ASSIGN -> ID EQUALS EXPRESSION SEMICOLON .) + PRINTLN reduce using rule 44 (ASSIGN -> ID EQUALS EXPRESSION SEMICOLON .) + INPUT reduce using rule 44 (ASSIGN -> ID EQUALS EXPRESSION SEMICOLON .) + ID reduce using rule 44 (ASSIGN -> ID EQUALS EXPRESSION SEMICOLON .) + FINISH reduce using rule 44 (ASSIGN -> ID EQUALS EXPRESSION SEMICOLON .) + RETURN reduce using rule 44 (ASSIGN -> ID EQUALS EXPRESSION SEMICOLON .) + NEXT reduce using rule 44 (ASSIGN -> ID EQUALS EXPRESSION SEMICOLON .) + END reduce using rule 44 (ASSIGN -> ID EQUALS EXPRESSION SEMICOLON .) + ELSE reduce using rule 44 (ASSIGN -> ID EQUALS EXPRESSION SEMICOLON .) + TO reduce using rule 44 (ASSIGN -> ID EQUALS EXPRESSION SEMICOLON .) state 103 - (21) B -> WHILE LEFT_PARENTESIS EL RIGHT_PARENTESIS V . B ENDWHILE V B - (15) B -> . CALL ID SEMICOLON V B - (16) B -> . ID INDICES EQUAL E SEMICOLON V B - (17) B -> . READ ID SEMICOLON V B - (18) B -> . WRITE STRING WRITE_AUX SEMICOLON V B - (19) B -> . WRITE E WRITE_AUX SEMICOLON V B - (20) B -> . IF LEFT_PARENTESIS EL RIGHT_PARENTESIS B ELSE_AUX ENDIF V B - (21) B -> . WHILE LEFT_PARENTESIS EL RIGHT_PARENTESIS V B ENDWHILE V B - (22) B -> . FOR LEFT_PARENTESIS EL COMA B RIGHT_PARENTESIS V B ENDFOR V B - (23) B -> . - - CALL shift and go to state 10 - ID shift and go to state 11 - READ shift and go to state 12 - WRITE shift and go to state 13 - IF shift and go to state 14 - WHILE shift and go to state 15 - FOR shift and go to state 16 - ENDWHILE reduce using rule 23 (B -> .) - - B shift and go to state 117 + (45) ASSIGN -> ID ARRAY BOUND_CHECK EQUALS . EXPRESSION SEMICOLON + (47) EXPRESSION -> . OR_LEVEL + (48) OR_LEVEL -> . OR_LEVEL OR AND_LEVEL + (49) OR_LEVEL -> . AND_LEVEL + (50) AND_LEVEL -> . AND_LEVEL AND RELATIONAL_LEVEL + (51) AND_LEVEL -> . RELATIONAL_LEVEL + (52) RELATIONAL_LEVEL -> . RELATIONAL_LEVEL RELATIONAL ADDSUB_LEVEL + (53) RELATIONAL_LEVEL -> . ADDSUB_LEVEL + (54) ADDSUB_LEVEL -> . ADDSUB_LEVEL ADDSUB MULTDIV_LEVEL + (55) ADDSUB_LEVEL -> . MULTDIV_LEVEL + (56) MULTDIV_LEVEL -> . MULTDIV_LEVEL MULTDIV NOT_LEVEL + (57) MULTDIV_LEVEL -> . NOT_LEVEL + (58) NOT_LEVEL -> . NOT NOT_LEVEL + (59) NOT_LEVEL -> . F + (60) F -> . ID + (61) F -> . ID ARRAY BOUND_CHECK + (62) F -> . FNUMBER + (63) F -> . NUMBER + (64) F -> . LPAREN EXPRESSION RPAREN + + NOT shift and go to state 50 + ID shift and go to state 52 + FNUMBER shift and go to state 53 + NUMBER shift and go to state 54 + LPAREN shift and go to state 55 + + EXPRESSION shift and go to state 113 + OR_LEVEL shift and go to state 44 + AND_LEVEL shift and go to state 45 + RELATIONAL_LEVEL shift and go to state 46 + ADDSUB_LEVEL shift and go to state 47 + MULTDIV_LEVEL shift and go to state 48 + NOT_LEVEL shift and go to state 49 + F shift and go to state 51 state 104 - (22) B -> FOR LEFT_PARENTESIS EL COMA B . RIGHT_PARENTESIS V B ENDFOR V B + (34) FOR_RULE -> FOR ASSIGN TO EXPRESSION . FOR_ACTION B NEXT ID + (35) FOR_ACTION -> . - RIGHT_PARENTESIS shift and go to state 118 + IF reduce using rule 35 (FOR_ACTION -> .) + WHILE reduce using rule 35 (FOR_ACTION -> .) + GOSUB reduce using rule 35 (FOR_ACTION -> .) + FOR reduce using rule 35 (FOR_ACTION -> .) + PRINT reduce using rule 35 (FOR_ACTION -> .) + PRINTLN reduce using rule 35 (FOR_ACTION -> .) + INPUT reduce using rule 35 (FOR_ACTION -> .) + ID reduce using rule 35 (FOR_ACTION -> .) + NEXT reduce using rule 35 (FOR_ACTION -> .) + FOR_ACTION shift and go to state 114 state 105 - (6) VARIABLES -> T ID LEFT_PARENTESIS CONSTANT RIGHT_PARENTESIS . + (29) PRINT_RULE -> PRINT LPAREN STRING RPAREN . SEMICOLON - SEMICOLON reduce using rule 6 (VARIABLES -> T ID LEFT_PARENTESIS CONSTANT RIGHT_PARENTESIS .) + SEMICOLON shift and go to state 115 state 106 - (7) VARIABLES -> T ID LEFT_PARENTESIS CONSTANT COMA . CONSTANT RIGHT_PARENTESIS - (8) VARIABLES -> T ID LEFT_PARENTESIS CONSTANT COMA . CONSTANT COMA CONSTANT RIGHT_PARENTESIS + (30) PRINT_RULE -> PRINT LPAREN EXPRESSION RPAREN . SEMICOLON - CONSTANT shift and go to state 119 + SEMICOLON shift and go to state 116 state 107 - (13) R -> ROUTINE LEFT_PARENTESIS ID RIGHT_PARENTESIS V B RETURN R . + (31) PRINTLN_RULE -> PRINTLN LPAREN STRING RPAREN . SEMICOLON - START reduce using rule 13 (R -> ROUTINE LEFT_PARENTESIS ID RIGHT_PARENTESIS V B RETURN R .) - $end reduce using rule 13 (R -> ROUTINE LEFT_PARENTESIS ID RIGHT_PARENTESIS V B RETURN R .) + SEMICOLON shift and go to state 117 state 108 - (16) B -> ID INDICES EQUAL E SEMICOLON V . B - (15) B -> . CALL ID SEMICOLON V B - (16) B -> . ID INDICES EQUAL E SEMICOLON V B - (17) B -> . READ ID SEMICOLON V B - (18) B -> . WRITE STRING WRITE_AUX SEMICOLON V B - (19) B -> . WRITE E WRITE_AUX SEMICOLON V B - (20) B -> . IF LEFT_PARENTESIS EL RIGHT_PARENTESIS B ELSE_AUX ENDIF V B - (21) B -> . WHILE LEFT_PARENTESIS EL RIGHT_PARENTESIS V B ENDWHILE V B - (22) B -> . FOR LEFT_PARENTESIS EL COMA B RIGHT_PARENTESIS V B ENDFOR V B - (23) B -> . - - ! shift/reduce conflict for CALL resolved as shift - ! shift/reduce conflict for ID resolved as shift - ! shift/reduce conflict for READ resolved as shift - ! shift/reduce conflict for WRITE resolved as shift - ! shift/reduce conflict for IF resolved as shift - ! shift/reduce conflict for WHILE resolved as shift - ! shift/reduce conflict for FOR resolved as shift - CALL shift and go to state 10 - ID shift and go to state 11 - READ shift and go to state 12 - WRITE shift and go to state 13 - IF shift and go to state 14 - WHILE shift and go to state 15 - FOR shift and go to state 16 - BE reduce using rule 23 (B -> .) - FINISH reduce using rule 23 (B -> .) - RETURN reduce using rule 23 (B -> .) - ELSE reduce using rule 23 (B -> .) - ENDIF reduce using rule 23 (B -> .) - RIGHT_PARENTESIS reduce using rule 23 (B -> .) - ENDWHILE reduce using rule 23 (B -> .) - ENDFOR reduce using rule 23 (B -> .) - - ! CALL [ reduce using rule 23 (B -> .) ] - ! ID [ reduce using rule 23 (B -> .) ] - ! READ [ reduce using rule 23 (B -> .) ] - ! WRITE [ reduce using rule 23 (B -> .) ] - ! IF [ reduce using rule 23 (B -> .) ] - ! WHILE [ reduce using rule 23 (B -> .) ] - ! FOR [ reduce using rule 23 (B -> .) ] - - B shift and go to state 120 + (32) PRINTLN_RULE -> PRINTLN LPAREN EXPRESSION RPAREN . SEMICOLON + + SEMICOLON shift and go to state 118 + state 109 - (26) INDICES -> LEFT_PARENTESIS E COMA E COMA . E RIGHT_PARENTESIS - (38) E -> . LEFT_PARENTESIS E RIGHT_PARENTESIS E_AUX - (39) E -> . CONSTANT E_AUX - (40) E -> . ID INDICES E_AUX + (28) INPUT_RULE -> INPUT LPAREN EXPRESSION RPAREN . SEMICOLON - LEFT_PARENTESIS shift and go to state 32 - CONSTANT shift and go to state 33 - ID shift and go to state 34 + SEMICOLON shift and go to state 119 - E shift and go to state 121 state 110 - (25) INDICES -> LEFT_PARENTESIS E COMA E RIGHT_PARENTESIS . + (9) DECL -> DIM ID ARRAY AS TYPE SEMICOLON DECL . - EQUAL reduce using rule 25 (INDICES -> LEFT_PARENTESIS E COMA E RIGHT_PARENTESIS .) - PLUS reduce using rule 25 (INDICES -> LEFT_PARENTESIS E COMA E RIGHT_PARENTESIS .) - STAR reduce using rule 25 (INDICES -> LEFT_PARENTESIS E COMA E RIGHT_PARENTESIS .) - SLASH reduce using rule 25 (INDICES -> LEFT_PARENTESIS E COMA E RIGHT_PARENTESIS .) - MINUS reduce using rule 25 (INDICES -> LEFT_PARENTESIS E COMA E RIGHT_PARENTESIS .) - COMA reduce using rule 25 (INDICES -> LEFT_PARENTESIS E COMA E RIGHT_PARENTESIS .) - SEMICOLON reduce using rule 25 (INDICES -> LEFT_PARENTESIS E COMA E RIGHT_PARENTESIS .) - RIGHT_PARENTESIS reduce using rule 25 (INDICES -> LEFT_PARENTESIS E COMA E RIGHT_PARENTESIS .) + SUBROUTINE reduce using rule 9 (DECL -> DIM ID ARRAY AS TYPE SEMICOLON DECL .) + IF reduce using rule 9 (DECL -> DIM ID ARRAY AS TYPE SEMICOLON DECL .) + WHILE reduce using rule 9 (DECL -> DIM ID ARRAY AS TYPE SEMICOLON DECL .) + GOSUB reduce using rule 9 (DECL -> DIM ID ARRAY AS TYPE SEMICOLON DECL .) + FOR reduce using rule 9 (DECL -> DIM ID ARRAY AS TYPE SEMICOLON DECL .) + PRINT reduce using rule 9 (DECL -> DIM ID ARRAY AS TYPE SEMICOLON DECL .) + PRINTLN reduce using rule 9 (DECL -> DIM ID ARRAY AS TYPE SEMICOLON DECL .) + INPUT reduce using rule 9 (DECL -> DIM ID ARRAY AS TYPE SEMICOLON DECL .) + ID reduce using rule 9 (DECL -> DIM ID ARRAY AS TYPE SEMICOLON DECL .) + FINISH reduce using rule 9 (DECL -> DIM ID ARRAY AS TYPE SEMICOLON DECL .) state 111 - (18) B -> WRITE STRING WRITE_AUX SEMICOLON V B . - - FINISH reduce using rule 18 (B -> WRITE STRING WRITE_AUX SEMICOLON V B .) - BE reduce using rule 18 (B -> WRITE STRING WRITE_AUX SEMICOLON V B .) - CALL reduce using rule 18 (B -> WRITE STRING WRITE_AUX SEMICOLON V B .) - ID reduce using rule 18 (B -> WRITE STRING WRITE_AUX SEMICOLON V B .) - READ reduce using rule 18 (B -> WRITE STRING WRITE_AUX SEMICOLON V B .) - WRITE reduce using rule 18 (B -> WRITE STRING WRITE_AUX SEMICOLON V B .) - IF reduce using rule 18 (B -> WRITE STRING WRITE_AUX SEMICOLON V B .) - WHILE reduce using rule 18 (B -> WRITE STRING WRITE_AUX SEMICOLON V B .) - FOR reduce using rule 18 (B -> WRITE STRING WRITE_AUX SEMICOLON V B .) - RETURN reduce using rule 18 (B -> WRITE STRING WRITE_AUX SEMICOLON V B .) - ELSE reduce using rule 18 (B -> WRITE STRING WRITE_AUX SEMICOLON V B .) - ENDIF reduce using rule 18 (B -> WRITE STRING WRITE_AUX SEMICOLON V B .) - RIGHT_PARENTESIS reduce using rule 18 (B -> WRITE STRING WRITE_AUX SEMICOLON V B .) - ENDWHILE reduce using rule 18 (B -> WRITE STRING WRITE_AUX SEMICOLON V B .) - ENDFOR reduce using rule 18 (B -> WRITE STRING WRITE_AUX SEMICOLON V B .) + (39) IF_RULE -> IF LPAREN EXPRESSION IF_ACTION RPAREN . THEN B END + (40) IFELSE_RULE -> IF LPAREN EXPRESSION IF_ACTION RPAREN . THEN B ELSE_ACTION ELSE_RULE END + + THEN shift and go to state 120 state 112 - (31) WRITE_AUX -> COMA ID INDICES WRITE_AUX . + (36) WHILE_RULE -> WHILE LPAREN WHILE_ACTION EXPRESSION WHILE_ACTION_JUMP . RPAREN B END - SEMICOLON reduce using rule 31 (WRITE_AUX -> COMA ID INDICES WRITE_AUX .) + RPAREN shift and go to state 121 state 113 - (19) B -> WRITE E WRITE_AUX SEMICOLON V B . - - FINISH reduce using rule 19 (B -> WRITE E WRITE_AUX SEMICOLON V B .) - BE reduce using rule 19 (B -> WRITE E WRITE_AUX SEMICOLON V B .) - CALL reduce using rule 19 (B -> WRITE E WRITE_AUX SEMICOLON V B .) - ID reduce using rule 19 (B -> WRITE E WRITE_AUX SEMICOLON V B .) - READ reduce using rule 19 (B -> WRITE E WRITE_AUX SEMICOLON V B .) - WRITE reduce using rule 19 (B -> WRITE E WRITE_AUX SEMICOLON V B .) - IF reduce using rule 19 (B -> WRITE E WRITE_AUX SEMICOLON V B .) - WHILE reduce using rule 19 (B -> WRITE E WRITE_AUX SEMICOLON V B .) - FOR reduce using rule 19 (B -> WRITE E WRITE_AUX SEMICOLON V B .) - RETURN reduce using rule 19 (B -> WRITE E WRITE_AUX SEMICOLON V B .) - ELSE reduce using rule 19 (B -> WRITE E WRITE_AUX SEMICOLON V B .) - ENDIF reduce using rule 19 (B -> WRITE E WRITE_AUX SEMICOLON V B .) - RIGHT_PARENTESIS reduce using rule 19 (B -> WRITE E WRITE_AUX SEMICOLON V B .) - ENDWHILE reduce using rule 19 (B -> WRITE E WRITE_AUX SEMICOLON V B .) - ENDFOR reduce using rule 19 (B -> WRITE E WRITE_AUX SEMICOLON V B .) - + (45) ASSIGN -> ID ARRAY BOUND_CHECK EQUALS EXPRESSION . SEMICOLON -state 114 + SEMICOLON shift and go to state 122 - (33) EL -> LEFT_PARENTESIS EL RIGHT_PARENTESIS EL_AUX . - RIGHT_PARENTESIS reduce using rule 33 (EL -> LEFT_PARENTESIS EL RIGHT_PARENTESIS EL_AUX .) - COMA reduce using rule 33 (EL -> LEFT_PARENTESIS EL RIGHT_PARENTESIS EL_AUX .) +state 114 + (34) FOR_RULE -> FOR ASSIGN TO EXPRESSION FOR_ACTION . B NEXT ID + (16) B -> . STATEMENT B + (17) B -> . STATEMENT + (18) B -> . + (19) STATEMENT -> . IF_RULE + (20) STATEMENT -> . IFELSE_RULE + (21) STATEMENT -> . WHILE_RULE + (22) STATEMENT -> . GOSUB_RULE + (23) STATEMENT -> . FOR_RULE + (24) STATEMENT -> . PRINT_RULE + (25) STATEMENT -> . PRINTLN_RULE + (26) STATEMENT -> . INPUT_RULE + (27) STATEMENT -> . ASSIGN + (39) IF_RULE -> . IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B END + (40) IFELSE_RULE -> . IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B ELSE_ACTION ELSE_RULE END + (36) WHILE_RULE -> . WHILE LPAREN WHILE_ACTION EXPRESSION WHILE_ACTION_JUMP RPAREN B END + (33) GOSUB_RULE -> . GOSUB ID SEMICOLON + (34) FOR_RULE -> . FOR ASSIGN TO EXPRESSION FOR_ACTION B NEXT ID + (29) PRINT_RULE -> . PRINT LPAREN STRING RPAREN SEMICOLON + (30) PRINT_RULE -> . PRINT LPAREN EXPRESSION RPAREN SEMICOLON + (31) PRINTLN_RULE -> . PRINTLN LPAREN STRING RPAREN SEMICOLON + (32) PRINTLN_RULE -> . PRINTLN LPAREN EXPRESSION RPAREN SEMICOLON + (28) INPUT_RULE -> . INPUT LPAREN EXPRESSION RPAREN SEMICOLON + (44) ASSIGN -> . ID EQUALS EXPRESSION SEMICOLON + (45) ASSIGN -> . ID ARRAY BOUND_CHECK EQUALS EXPRESSION SEMICOLON + + NEXT reduce using rule 18 (B -> .) + IF shift and go to state 29 + WHILE shift and go to state 30 + GOSUB shift and go to state 31 + FOR shift and go to state 33 + PRINT shift and go to state 34 + PRINTLN shift and go to state 35 + INPUT shift and go to state 36 + ID shift and go to state 32 + + ASSIGN shift and go to state 28 + B shift and go to state 123 + STATEMENT shift and go to state 19 + IF_RULE shift and go to state 20 + IFELSE_RULE shift and go to state 21 + WHILE_RULE shift and go to state 22 + GOSUB_RULE shift and go to state 23 + FOR_RULE shift and go to state 24 + PRINT_RULE shift and go to state 25 + PRINTLN_RULE shift and go to state 26 + INPUT_RULE shift and go to state 27 state 115 - (20) B -> IF LEFT_PARENTESIS EL RIGHT_PARENTESIS B ELSE_AUX . ENDIF V B + (29) PRINT_RULE -> PRINT LPAREN STRING RPAREN SEMICOLON . - ENDIF shift and go to state 122 + IF reduce using rule 29 (PRINT_RULE -> PRINT LPAREN STRING RPAREN SEMICOLON .) + WHILE reduce using rule 29 (PRINT_RULE -> PRINT LPAREN STRING RPAREN SEMICOLON .) + GOSUB reduce using rule 29 (PRINT_RULE -> PRINT LPAREN STRING RPAREN SEMICOLON .) + FOR reduce using rule 29 (PRINT_RULE -> PRINT LPAREN STRING RPAREN SEMICOLON .) + PRINT reduce using rule 29 (PRINT_RULE -> PRINT LPAREN STRING RPAREN SEMICOLON .) + PRINTLN reduce using rule 29 (PRINT_RULE -> PRINT LPAREN STRING RPAREN SEMICOLON .) + INPUT reduce using rule 29 (PRINT_RULE -> PRINT LPAREN STRING RPAREN SEMICOLON .) + ID reduce using rule 29 (PRINT_RULE -> PRINT LPAREN STRING RPAREN SEMICOLON .) + FINISH reduce using rule 29 (PRINT_RULE -> PRINT LPAREN STRING RPAREN SEMICOLON .) + RETURN reduce using rule 29 (PRINT_RULE -> PRINT LPAREN STRING RPAREN SEMICOLON .) + NEXT reduce using rule 29 (PRINT_RULE -> PRINT LPAREN STRING RPAREN SEMICOLON .) + END reduce using rule 29 (PRINT_RULE -> PRINT LPAREN STRING RPAREN SEMICOLON .) + ELSE reduce using rule 29 (PRINT_RULE -> PRINT LPAREN STRING RPAREN SEMICOLON .) state 116 - (28) ELSE_AUX -> ELSE . B - (15) B -> . CALL ID SEMICOLON V B - (16) B -> . ID INDICES EQUAL E SEMICOLON V B - (17) B -> . READ ID SEMICOLON V B - (18) B -> . WRITE STRING WRITE_AUX SEMICOLON V B - (19) B -> . WRITE E WRITE_AUX SEMICOLON V B - (20) B -> . IF LEFT_PARENTESIS EL RIGHT_PARENTESIS B ELSE_AUX ENDIF V B - (21) B -> . WHILE LEFT_PARENTESIS EL RIGHT_PARENTESIS V B ENDWHILE V B - (22) B -> . FOR LEFT_PARENTESIS EL COMA B RIGHT_PARENTESIS V B ENDFOR V B - (23) B -> . - - CALL shift and go to state 10 - ID shift and go to state 11 - READ shift and go to state 12 - WRITE shift and go to state 13 - IF shift and go to state 14 - WHILE shift and go to state 15 - FOR shift and go to state 16 - ENDIF reduce using rule 23 (B -> .) + (30) PRINT_RULE -> PRINT LPAREN EXPRESSION RPAREN SEMICOLON . + + IF reduce using rule 30 (PRINT_RULE -> PRINT LPAREN EXPRESSION RPAREN SEMICOLON .) + WHILE reduce using rule 30 (PRINT_RULE -> PRINT LPAREN EXPRESSION RPAREN SEMICOLON .) + GOSUB reduce using rule 30 (PRINT_RULE -> PRINT LPAREN EXPRESSION RPAREN SEMICOLON .) + FOR reduce using rule 30 (PRINT_RULE -> PRINT LPAREN EXPRESSION RPAREN SEMICOLON .) + PRINT reduce using rule 30 (PRINT_RULE -> PRINT LPAREN EXPRESSION RPAREN SEMICOLON .) + PRINTLN reduce using rule 30 (PRINT_RULE -> PRINT LPAREN EXPRESSION RPAREN SEMICOLON .) + INPUT reduce using rule 30 (PRINT_RULE -> PRINT LPAREN EXPRESSION RPAREN SEMICOLON .) + ID reduce using rule 30 (PRINT_RULE -> PRINT LPAREN EXPRESSION RPAREN SEMICOLON .) + FINISH reduce using rule 30 (PRINT_RULE -> PRINT LPAREN EXPRESSION RPAREN SEMICOLON .) + RETURN reduce using rule 30 (PRINT_RULE -> PRINT LPAREN EXPRESSION RPAREN SEMICOLON .) + NEXT reduce using rule 30 (PRINT_RULE -> PRINT LPAREN EXPRESSION RPAREN SEMICOLON .) + END reduce using rule 30 (PRINT_RULE -> PRINT LPAREN EXPRESSION RPAREN SEMICOLON .) + ELSE reduce using rule 30 (PRINT_RULE -> PRINT LPAREN EXPRESSION RPAREN SEMICOLON .) - B shift and go to state 123 state 117 - (21) B -> WHILE LEFT_PARENTESIS EL RIGHT_PARENTESIS V B . ENDWHILE V B + (31) PRINTLN_RULE -> PRINTLN LPAREN STRING RPAREN SEMICOLON . - ENDWHILE shift and go to state 124 + IF reduce using rule 31 (PRINTLN_RULE -> PRINTLN LPAREN STRING RPAREN SEMICOLON .) + WHILE reduce using rule 31 (PRINTLN_RULE -> PRINTLN LPAREN STRING RPAREN SEMICOLON .) + GOSUB reduce using rule 31 (PRINTLN_RULE -> PRINTLN LPAREN STRING RPAREN SEMICOLON .) + FOR reduce using rule 31 (PRINTLN_RULE -> PRINTLN LPAREN STRING RPAREN SEMICOLON .) + PRINT reduce using rule 31 (PRINTLN_RULE -> PRINTLN LPAREN STRING RPAREN SEMICOLON .) + PRINTLN reduce using rule 31 (PRINTLN_RULE -> PRINTLN LPAREN STRING RPAREN SEMICOLON .) + INPUT reduce using rule 31 (PRINTLN_RULE -> PRINTLN LPAREN STRING RPAREN SEMICOLON .) + ID reduce using rule 31 (PRINTLN_RULE -> PRINTLN LPAREN STRING RPAREN SEMICOLON .) + FINISH reduce using rule 31 (PRINTLN_RULE -> PRINTLN LPAREN STRING RPAREN SEMICOLON .) + RETURN reduce using rule 31 (PRINTLN_RULE -> PRINTLN LPAREN STRING RPAREN SEMICOLON .) + NEXT reduce using rule 31 (PRINTLN_RULE -> PRINTLN LPAREN STRING RPAREN SEMICOLON .) + END reduce using rule 31 (PRINTLN_RULE -> PRINTLN LPAREN STRING RPAREN SEMICOLON .) + ELSE reduce using rule 31 (PRINTLN_RULE -> PRINTLN LPAREN STRING RPAREN SEMICOLON .) state 118 - (22) B -> FOR LEFT_PARENTESIS EL COMA B RIGHT_PARENTESIS . V B ENDFOR V B - (2) V -> . BE VARIABLES SEMICOLON B V - (3) V -> . + (32) PRINTLN_RULE -> PRINTLN LPAREN EXPRESSION RPAREN SEMICOLON . - BE shift and go to state 7 - CALL reduce using rule 3 (V -> .) - ID reduce using rule 3 (V -> .) - READ reduce using rule 3 (V -> .) - WRITE reduce using rule 3 (V -> .) - IF reduce using rule 3 (V -> .) - WHILE reduce using rule 3 (V -> .) - FOR reduce using rule 3 (V -> .) - ENDFOR reduce using rule 3 (V -> .) + IF reduce using rule 32 (PRINTLN_RULE -> PRINTLN LPAREN EXPRESSION RPAREN SEMICOLON .) + WHILE reduce using rule 32 (PRINTLN_RULE -> PRINTLN LPAREN EXPRESSION RPAREN SEMICOLON .) + GOSUB reduce using rule 32 (PRINTLN_RULE -> PRINTLN LPAREN EXPRESSION RPAREN SEMICOLON .) + FOR reduce using rule 32 (PRINTLN_RULE -> PRINTLN LPAREN EXPRESSION RPAREN SEMICOLON .) + PRINT reduce using rule 32 (PRINTLN_RULE -> PRINTLN LPAREN EXPRESSION RPAREN SEMICOLON .) + PRINTLN reduce using rule 32 (PRINTLN_RULE -> PRINTLN LPAREN EXPRESSION RPAREN SEMICOLON .) + INPUT reduce using rule 32 (PRINTLN_RULE -> PRINTLN LPAREN EXPRESSION RPAREN SEMICOLON .) + ID reduce using rule 32 (PRINTLN_RULE -> PRINTLN LPAREN EXPRESSION RPAREN SEMICOLON .) + FINISH reduce using rule 32 (PRINTLN_RULE -> PRINTLN LPAREN EXPRESSION RPAREN SEMICOLON .) + RETURN reduce using rule 32 (PRINTLN_RULE -> PRINTLN LPAREN EXPRESSION RPAREN SEMICOLON .) + NEXT reduce using rule 32 (PRINTLN_RULE -> PRINTLN LPAREN EXPRESSION RPAREN SEMICOLON .) + END reduce using rule 32 (PRINTLN_RULE -> PRINTLN LPAREN EXPRESSION RPAREN SEMICOLON .) + ELSE reduce using rule 32 (PRINTLN_RULE -> PRINTLN LPAREN EXPRESSION RPAREN SEMICOLON .) - V shift and go to state 125 state 119 - (7) VARIABLES -> T ID LEFT_PARENTESIS CONSTANT COMA CONSTANT . RIGHT_PARENTESIS - (8) VARIABLES -> T ID LEFT_PARENTESIS CONSTANT COMA CONSTANT . COMA CONSTANT RIGHT_PARENTESIS + (28) INPUT_RULE -> INPUT LPAREN EXPRESSION RPAREN SEMICOLON . - RIGHT_PARENTESIS shift and go to state 127 - COMA shift and go to state 126 + IF reduce using rule 28 (INPUT_RULE -> INPUT LPAREN EXPRESSION RPAREN SEMICOLON .) + WHILE reduce using rule 28 (INPUT_RULE -> INPUT LPAREN EXPRESSION RPAREN SEMICOLON .) + GOSUB reduce using rule 28 (INPUT_RULE -> INPUT LPAREN EXPRESSION RPAREN SEMICOLON .) + FOR reduce using rule 28 (INPUT_RULE -> INPUT LPAREN EXPRESSION RPAREN SEMICOLON .) + PRINT reduce using rule 28 (INPUT_RULE -> INPUT LPAREN EXPRESSION RPAREN SEMICOLON .) + PRINTLN reduce using rule 28 (INPUT_RULE -> INPUT LPAREN EXPRESSION RPAREN SEMICOLON .) + INPUT reduce using rule 28 (INPUT_RULE -> INPUT LPAREN EXPRESSION RPAREN SEMICOLON .) + ID reduce using rule 28 (INPUT_RULE -> INPUT LPAREN EXPRESSION RPAREN SEMICOLON .) + FINISH reduce using rule 28 (INPUT_RULE -> INPUT LPAREN EXPRESSION RPAREN SEMICOLON .) + RETURN reduce using rule 28 (INPUT_RULE -> INPUT LPAREN EXPRESSION RPAREN SEMICOLON .) + NEXT reduce using rule 28 (INPUT_RULE -> INPUT LPAREN EXPRESSION RPAREN SEMICOLON .) + END reduce using rule 28 (INPUT_RULE -> INPUT LPAREN EXPRESSION RPAREN SEMICOLON .) + ELSE reduce using rule 28 (INPUT_RULE -> INPUT LPAREN EXPRESSION RPAREN SEMICOLON .) state 120 - (16) B -> ID INDICES EQUAL E SEMICOLON V B . - - FINISH reduce using rule 16 (B -> ID INDICES EQUAL E SEMICOLON V B .) - BE reduce using rule 16 (B -> ID INDICES EQUAL E SEMICOLON V B .) - CALL reduce using rule 16 (B -> ID INDICES EQUAL E SEMICOLON V B .) - ID reduce using rule 16 (B -> ID INDICES EQUAL E SEMICOLON V B .) - READ reduce using rule 16 (B -> ID INDICES EQUAL E SEMICOLON V B .) - WRITE reduce using rule 16 (B -> ID INDICES EQUAL E SEMICOLON V B .) - IF reduce using rule 16 (B -> ID INDICES EQUAL E SEMICOLON V B .) - WHILE reduce using rule 16 (B -> ID INDICES EQUAL E SEMICOLON V B .) - FOR reduce using rule 16 (B -> ID INDICES EQUAL E SEMICOLON V B .) - RETURN reduce using rule 16 (B -> ID INDICES EQUAL E SEMICOLON V B .) - ELSE reduce using rule 16 (B -> ID INDICES EQUAL E SEMICOLON V B .) - ENDIF reduce using rule 16 (B -> ID INDICES EQUAL E SEMICOLON V B .) - RIGHT_PARENTESIS reduce using rule 16 (B -> ID INDICES EQUAL E SEMICOLON V B .) - ENDWHILE reduce using rule 16 (B -> ID INDICES EQUAL E SEMICOLON V B .) - ENDFOR reduce using rule 16 (B -> ID INDICES EQUAL E SEMICOLON V B .) - + (39) IF_RULE -> IF LPAREN EXPRESSION IF_ACTION RPAREN THEN . B END + (40) IFELSE_RULE -> IF LPAREN EXPRESSION IF_ACTION RPAREN THEN . B ELSE_ACTION ELSE_RULE END + (16) B -> . STATEMENT B + (17) B -> . STATEMENT + (18) B -> . + (19) STATEMENT -> . IF_RULE + (20) STATEMENT -> . IFELSE_RULE + (21) STATEMENT -> . WHILE_RULE + (22) STATEMENT -> . GOSUB_RULE + (23) STATEMENT -> . FOR_RULE + (24) STATEMENT -> . PRINT_RULE + (25) STATEMENT -> . PRINTLN_RULE + (26) STATEMENT -> . INPUT_RULE + (27) STATEMENT -> . ASSIGN + (39) IF_RULE -> . IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B END + (40) IFELSE_RULE -> . IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B ELSE_ACTION ELSE_RULE END + (36) WHILE_RULE -> . WHILE LPAREN WHILE_ACTION EXPRESSION WHILE_ACTION_JUMP RPAREN B END + (33) GOSUB_RULE -> . GOSUB ID SEMICOLON + (34) FOR_RULE -> . FOR ASSIGN TO EXPRESSION FOR_ACTION B NEXT ID + (29) PRINT_RULE -> . PRINT LPAREN STRING RPAREN SEMICOLON + (30) PRINT_RULE -> . PRINT LPAREN EXPRESSION RPAREN SEMICOLON + (31) PRINTLN_RULE -> . PRINTLN LPAREN STRING RPAREN SEMICOLON + (32) PRINTLN_RULE -> . PRINTLN LPAREN EXPRESSION RPAREN SEMICOLON + (28) INPUT_RULE -> . INPUT LPAREN EXPRESSION RPAREN SEMICOLON + (44) ASSIGN -> . ID EQUALS EXPRESSION SEMICOLON + (45) ASSIGN -> . ID ARRAY BOUND_CHECK EQUALS EXPRESSION SEMICOLON + + END reduce using rule 18 (B -> .) + ELSE reduce using rule 18 (B -> .) + IF shift and go to state 29 + WHILE shift and go to state 30 + GOSUB shift and go to state 31 + FOR shift and go to state 33 + PRINT shift and go to state 34 + PRINTLN shift and go to state 35 + INPUT shift and go to state 36 + ID shift and go to state 32 + + B shift and go to state 124 + STATEMENT shift and go to state 19 + IF_RULE shift and go to state 20 + IFELSE_RULE shift and go to state 21 + WHILE_RULE shift and go to state 22 + GOSUB_RULE shift and go to state 23 + FOR_RULE shift and go to state 24 + PRINT_RULE shift and go to state 25 + PRINTLN_RULE shift and go to state 26 + INPUT_RULE shift and go to state 27 + ASSIGN shift and go to state 28 state 121 - (26) INDICES -> LEFT_PARENTESIS E COMA E COMA E . RIGHT_PARENTESIS + (36) WHILE_RULE -> WHILE LPAREN WHILE_ACTION EXPRESSION WHILE_ACTION_JUMP RPAREN . B END + (16) B -> . STATEMENT B + (17) B -> . STATEMENT + (18) B -> . + (19) STATEMENT -> . IF_RULE + (20) STATEMENT -> . IFELSE_RULE + (21) STATEMENT -> . WHILE_RULE + (22) STATEMENT -> . GOSUB_RULE + (23) STATEMENT -> . FOR_RULE + (24) STATEMENT -> . PRINT_RULE + (25) STATEMENT -> . PRINTLN_RULE + (26) STATEMENT -> . INPUT_RULE + (27) STATEMENT -> . ASSIGN + (39) IF_RULE -> . IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B END + (40) IFELSE_RULE -> . IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B ELSE_ACTION ELSE_RULE END + (36) WHILE_RULE -> . WHILE LPAREN WHILE_ACTION EXPRESSION WHILE_ACTION_JUMP RPAREN B END + (33) GOSUB_RULE -> . GOSUB ID SEMICOLON + (34) FOR_RULE -> . FOR ASSIGN TO EXPRESSION FOR_ACTION B NEXT ID + (29) PRINT_RULE -> . PRINT LPAREN STRING RPAREN SEMICOLON + (30) PRINT_RULE -> . PRINT LPAREN EXPRESSION RPAREN SEMICOLON + (31) PRINTLN_RULE -> . PRINTLN LPAREN STRING RPAREN SEMICOLON + (32) PRINTLN_RULE -> . PRINTLN LPAREN EXPRESSION RPAREN SEMICOLON + (28) INPUT_RULE -> . INPUT LPAREN EXPRESSION RPAREN SEMICOLON + (44) ASSIGN -> . ID EQUALS EXPRESSION SEMICOLON + (45) ASSIGN -> . ID ARRAY BOUND_CHECK EQUALS EXPRESSION SEMICOLON + + END reduce using rule 18 (B -> .) + IF shift and go to state 29 + WHILE shift and go to state 30 + GOSUB shift and go to state 31 + FOR shift and go to state 33 + PRINT shift and go to state 34 + PRINTLN shift and go to state 35 + INPUT shift and go to state 36 + ID shift and go to state 32 + + B shift and go to state 125 + STATEMENT shift and go to state 19 + IF_RULE shift and go to state 20 + IFELSE_RULE shift and go to state 21 + WHILE_RULE shift and go to state 22 + GOSUB_RULE shift and go to state 23 + FOR_RULE shift and go to state 24 + PRINT_RULE shift and go to state 25 + PRINTLN_RULE shift and go to state 26 + INPUT_RULE shift and go to state 27 + ASSIGN shift and go to state 28 - RIGHT_PARENTESIS shift and go to state 128 +state 122 + (45) ASSIGN -> ID ARRAY BOUND_CHECK EQUALS EXPRESSION SEMICOLON . -state 122 + IF reduce using rule 45 (ASSIGN -> ID ARRAY BOUND_CHECK EQUALS EXPRESSION SEMICOLON .) + WHILE reduce using rule 45 (ASSIGN -> ID ARRAY BOUND_CHECK EQUALS EXPRESSION SEMICOLON .) + GOSUB reduce using rule 45 (ASSIGN -> ID ARRAY BOUND_CHECK EQUALS EXPRESSION SEMICOLON .) + FOR reduce using rule 45 (ASSIGN -> ID ARRAY BOUND_CHECK EQUALS EXPRESSION SEMICOLON .) + PRINT reduce using rule 45 (ASSIGN -> ID ARRAY BOUND_CHECK EQUALS EXPRESSION SEMICOLON .) + PRINTLN reduce using rule 45 (ASSIGN -> ID ARRAY BOUND_CHECK EQUALS EXPRESSION SEMICOLON .) + INPUT reduce using rule 45 (ASSIGN -> ID ARRAY BOUND_CHECK EQUALS EXPRESSION SEMICOLON .) + ID reduce using rule 45 (ASSIGN -> ID ARRAY BOUND_CHECK EQUALS EXPRESSION SEMICOLON .) + FINISH reduce using rule 45 (ASSIGN -> ID ARRAY BOUND_CHECK EQUALS EXPRESSION SEMICOLON .) + RETURN reduce using rule 45 (ASSIGN -> ID ARRAY BOUND_CHECK EQUALS EXPRESSION SEMICOLON .) + NEXT reduce using rule 45 (ASSIGN -> ID ARRAY BOUND_CHECK EQUALS EXPRESSION SEMICOLON .) + END reduce using rule 45 (ASSIGN -> ID ARRAY BOUND_CHECK EQUALS EXPRESSION SEMICOLON .) + ELSE reduce using rule 45 (ASSIGN -> ID ARRAY BOUND_CHECK EQUALS EXPRESSION SEMICOLON .) + TO reduce using rule 45 (ASSIGN -> ID ARRAY BOUND_CHECK EQUALS EXPRESSION SEMICOLON .) - (20) B -> IF LEFT_PARENTESIS EL RIGHT_PARENTESIS B ELSE_AUX ENDIF . V B - (2) V -> . BE VARIABLES SEMICOLON B V - (3) V -> . - - ! shift/reduce conflict for BE resolved as shift - BE shift and go to state 7 - CALL reduce using rule 3 (V -> .) - ID reduce using rule 3 (V -> .) - READ reduce using rule 3 (V -> .) - WRITE reduce using rule 3 (V -> .) - IF reduce using rule 3 (V -> .) - WHILE reduce using rule 3 (V -> .) - FOR reduce using rule 3 (V -> .) - FINISH reduce using rule 3 (V -> .) - RETURN reduce using rule 3 (V -> .) - ELSE reduce using rule 3 (V -> .) - ENDIF reduce using rule 3 (V -> .) - RIGHT_PARENTESIS reduce using rule 3 (V -> .) - ENDWHILE reduce using rule 3 (V -> .) - ENDFOR reduce using rule 3 (V -> .) - - ! BE [ reduce using rule 3 (V -> .) ] - - V shift and go to state 129 state 123 - (28) ELSE_AUX -> ELSE B . + (34) FOR_RULE -> FOR ASSIGN TO EXPRESSION FOR_ACTION B . NEXT ID - ENDIF reduce using rule 28 (ELSE_AUX -> ELSE B .) + NEXT shift and go to state 126 state 124 - (21) B -> WHILE LEFT_PARENTESIS EL RIGHT_PARENTESIS V B ENDWHILE . V B - (2) V -> . BE VARIABLES SEMICOLON B V - (3) V -> . - - ! shift/reduce conflict for BE resolved as shift - BE shift and go to state 7 - CALL reduce using rule 3 (V -> .) - ID reduce using rule 3 (V -> .) - READ reduce using rule 3 (V -> .) - WRITE reduce using rule 3 (V -> .) - IF reduce using rule 3 (V -> .) - WHILE reduce using rule 3 (V -> .) - FOR reduce using rule 3 (V -> .) - FINISH reduce using rule 3 (V -> .) - RETURN reduce using rule 3 (V -> .) - ELSE reduce using rule 3 (V -> .) - ENDIF reduce using rule 3 (V -> .) - RIGHT_PARENTESIS reduce using rule 3 (V -> .) - ENDWHILE reduce using rule 3 (V -> .) - ENDFOR reduce using rule 3 (V -> .) - - ! BE [ reduce using rule 3 (V -> .) ] - - V shift and go to state 130 + (39) IF_RULE -> IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B . END + (40) IFELSE_RULE -> IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B . ELSE_ACTION ELSE_RULE END + (43) ELSE_ACTION -> . + + END shift and go to state 127 + ELSE reduce using rule 43 (ELSE_ACTION -> .) + + ELSE_ACTION shift and go to state 128 state 125 - (22) B -> FOR LEFT_PARENTESIS EL COMA B RIGHT_PARENTESIS V . B ENDFOR V B - (15) B -> . CALL ID SEMICOLON V B - (16) B -> . ID INDICES EQUAL E SEMICOLON V B - (17) B -> . READ ID SEMICOLON V B - (18) B -> . WRITE STRING WRITE_AUX SEMICOLON V B - (19) B -> . WRITE E WRITE_AUX SEMICOLON V B - (20) B -> . IF LEFT_PARENTESIS EL RIGHT_PARENTESIS B ELSE_AUX ENDIF V B - (21) B -> . WHILE LEFT_PARENTESIS EL RIGHT_PARENTESIS V B ENDWHILE V B - (22) B -> . FOR LEFT_PARENTESIS EL COMA B RIGHT_PARENTESIS V B ENDFOR V B - (23) B -> . - - CALL shift and go to state 10 - ID shift and go to state 11 - READ shift and go to state 12 - WRITE shift and go to state 13 - IF shift and go to state 14 - WHILE shift and go to state 15 - FOR shift and go to state 16 - ENDFOR reduce using rule 23 (B -> .) - - B shift and go to state 131 + (36) WHILE_RULE -> WHILE LPAREN WHILE_ACTION EXPRESSION WHILE_ACTION_JUMP RPAREN B . END + + END shift and go to state 129 + state 126 - (8) VARIABLES -> T ID LEFT_PARENTESIS CONSTANT COMA CONSTANT COMA . CONSTANT RIGHT_PARENTESIS + (34) FOR_RULE -> FOR ASSIGN TO EXPRESSION FOR_ACTION B NEXT . ID - CONSTANT shift and go to state 132 + ID shift and go to state 130 state 127 - (7) VARIABLES -> T ID LEFT_PARENTESIS CONSTANT COMA CONSTANT RIGHT_PARENTESIS . + (39) IF_RULE -> IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B END . - SEMICOLON reduce using rule 7 (VARIABLES -> T ID LEFT_PARENTESIS CONSTANT COMA CONSTANT RIGHT_PARENTESIS .) + IF reduce using rule 39 (IF_RULE -> IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B END .) + WHILE reduce using rule 39 (IF_RULE -> IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B END .) + GOSUB reduce using rule 39 (IF_RULE -> IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B END .) + FOR reduce using rule 39 (IF_RULE -> IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B END .) + PRINT reduce using rule 39 (IF_RULE -> IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B END .) + PRINTLN reduce using rule 39 (IF_RULE -> IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B END .) + INPUT reduce using rule 39 (IF_RULE -> IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B END .) + ID reduce using rule 39 (IF_RULE -> IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B END .) + FINISH reduce using rule 39 (IF_RULE -> IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B END .) + RETURN reduce using rule 39 (IF_RULE -> IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B END .) + NEXT reduce using rule 39 (IF_RULE -> IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B END .) + END reduce using rule 39 (IF_RULE -> IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B END .) + ELSE reduce using rule 39 (IF_RULE -> IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B END .) state 128 - (26) INDICES -> LEFT_PARENTESIS E COMA E COMA E RIGHT_PARENTESIS . + (40) IFELSE_RULE -> IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B ELSE_ACTION . ELSE_RULE END + (41) ELSE_RULE -> . ELSE B - EQUAL reduce using rule 26 (INDICES -> LEFT_PARENTESIS E COMA E COMA E RIGHT_PARENTESIS .) - PLUS reduce using rule 26 (INDICES -> LEFT_PARENTESIS E COMA E COMA E RIGHT_PARENTESIS .) - STAR reduce using rule 26 (INDICES -> LEFT_PARENTESIS E COMA E COMA E RIGHT_PARENTESIS .) - SLASH reduce using rule 26 (INDICES -> LEFT_PARENTESIS E COMA E COMA E RIGHT_PARENTESIS .) - MINUS reduce using rule 26 (INDICES -> LEFT_PARENTESIS E COMA E COMA E RIGHT_PARENTESIS .) - COMA reduce using rule 26 (INDICES -> LEFT_PARENTESIS E COMA E COMA E RIGHT_PARENTESIS .) - SEMICOLON reduce using rule 26 (INDICES -> LEFT_PARENTESIS E COMA E COMA E RIGHT_PARENTESIS .) - RIGHT_PARENTESIS reduce using rule 26 (INDICES -> LEFT_PARENTESIS E COMA E COMA E RIGHT_PARENTESIS .) + ELSE shift and go to state 132 + ELSE_RULE shift and go to state 131 state 129 - (20) B -> IF LEFT_PARENTESIS EL RIGHT_PARENTESIS B ELSE_AUX ENDIF V . B - (15) B -> . CALL ID SEMICOLON V B - (16) B -> . ID INDICES EQUAL E SEMICOLON V B - (17) B -> . READ ID SEMICOLON V B - (18) B -> . WRITE STRING WRITE_AUX SEMICOLON V B - (19) B -> . WRITE E WRITE_AUX SEMICOLON V B - (20) B -> . IF LEFT_PARENTESIS EL RIGHT_PARENTESIS B ELSE_AUX ENDIF V B - (21) B -> . WHILE LEFT_PARENTESIS EL RIGHT_PARENTESIS V B ENDWHILE V B - (22) B -> . FOR LEFT_PARENTESIS EL COMA B RIGHT_PARENTESIS V B ENDFOR V B - (23) B -> . - - ! shift/reduce conflict for CALL resolved as shift - ! shift/reduce conflict for ID resolved as shift - ! shift/reduce conflict for READ resolved as shift - ! shift/reduce conflict for WRITE resolved as shift - ! shift/reduce conflict for IF resolved as shift - ! shift/reduce conflict for WHILE resolved as shift - ! shift/reduce conflict for FOR resolved as shift - CALL shift and go to state 10 - ID shift and go to state 11 - READ shift and go to state 12 - WRITE shift and go to state 13 - IF shift and go to state 14 - WHILE shift and go to state 15 - FOR shift and go to state 16 - BE reduce using rule 23 (B -> .) - FINISH reduce using rule 23 (B -> .) - RETURN reduce using rule 23 (B -> .) - ELSE reduce using rule 23 (B -> .) - ENDIF reduce using rule 23 (B -> .) - RIGHT_PARENTESIS reduce using rule 23 (B -> .) - ENDWHILE reduce using rule 23 (B -> .) - ENDFOR reduce using rule 23 (B -> .) - - ! CALL [ reduce using rule 23 (B -> .) ] - ! ID [ reduce using rule 23 (B -> .) ] - ! READ [ reduce using rule 23 (B -> .) ] - ! WRITE [ reduce using rule 23 (B -> .) ] - ! IF [ reduce using rule 23 (B -> .) ] - ! WHILE [ reduce using rule 23 (B -> .) ] - ! FOR [ reduce using rule 23 (B -> .) ] - - B shift and go to state 133 + (36) WHILE_RULE -> WHILE LPAREN WHILE_ACTION EXPRESSION WHILE_ACTION_JUMP RPAREN B END . + + IF reduce using rule 36 (WHILE_RULE -> WHILE LPAREN WHILE_ACTION EXPRESSION WHILE_ACTION_JUMP RPAREN B END .) + WHILE reduce using rule 36 (WHILE_RULE -> WHILE LPAREN WHILE_ACTION EXPRESSION WHILE_ACTION_JUMP RPAREN B END .) + GOSUB reduce using rule 36 (WHILE_RULE -> WHILE LPAREN WHILE_ACTION EXPRESSION WHILE_ACTION_JUMP RPAREN B END .) + FOR reduce using rule 36 (WHILE_RULE -> WHILE LPAREN WHILE_ACTION EXPRESSION WHILE_ACTION_JUMP RPAREN B END .) + PRINT reduce using rule 36 (WHILE_RULE -> WHILE LPAREN WHILE_ACTION EXPRESSION WHILE_ACTION_JUMP RPAREN B END .) + PRINTLN reduce using rule 36 (WHILE_RULE -> WHILE LPAREN WHILE_ACTION EXPRESSION WHILE_ACTION_JUMP RPAREN B END .) + INPUT reduce using rule 36 (WHILE_RULE -> WHILE LPAREN WHILE_ACTION EXPRESSION WHILE_ACTION_JUMP RPAREN B END .) + ID reduce using rule 36 (WHILE_RULE -> WHILE LPAREN WHILE_ACTION EXPRESSION WHILE_ACTION_JUMP RPAREN B END .) + FINISH reduce using rule 36 (WHILE_RULE -> WHILE LPAREN WHILE_ACTION EXPRESSION WHILE_ACTION_JUMP RPAREN B END .) + RETURN reduce using rule 36 (WHILE_RULE -> WHILE LPAREN WHILE_ACTION EXPRESSION WHILE_ACTION_JUMP RPAREN B END .) + NEXT reduce using rule 36 (WHILE_RULE -> WHILE LPAREN WHILE_ACTION EXPRESSION WHILE_ACTION_JUMP RPAREN B END .) + END reduce using rule 36 (WHILE_RULE -> WHILE LPAREN WHILE_ACTION EXPRESSION WHILE_ACTION_JUMP RPAREN B END .) + ELSE reduce using rule 36 (WHILE_RULE -> WHILE LPAREN WHILE_ACTION EXPRESSION WHILE_ACTION_JUMP RPAREN B END .) + state 130 - (21) B -> WHILE LEFT_PARENTESIS EL RIGHT_PARENTESIS V B ENDWHILE V . B - (15) B -> . CALL ID SEMICOLON V B - (16) B -> . ID INDICES EQUAL E SEMICOLON V B - (17) B -> . READ ID SEMICOLON V B - (18) B -> . WRITE STRING WRITE_AUX SEMICOLON V B - (19) B -> . WRITE E WRITE_AUX SEMICOLON V B - (20) B -> . IF LEFT_PARENTESIS EL RIGHT_PARENTESIS B ELSE_AUX ENDIF V B - (21) B -> . WHILE LEFT_PARENTESIS EL RIGHT_PARENTESIS V B ENDWHILE V B - (22) B -> . FOR LEFT_PARENTESIS EL COMA B RIGHT_PARENTESIS V B ENDFOR V B - (23) B -> . - - ! shift/reduce conflict for CALL resolved as shift - ! shift/reduce conflict for ID resolved as shift - ! shift/reduce conflict for READ resolved as shift - ! shift/reduce conflict for WRITE resolved as shift - ! shift/reduce conflict for IF resolved as shift - ! shift/reduce conflict for WHILE resolved as shift - ! shift/reduce conflict for FOR resolved as shift - CALL shift and go to state 10 - ID shift and go to state 11 - READ shift and go to state 12 - WRITE shift and go to state 13 - IF shift and go to state 14 - WHILE shift and go to state 15 - FOR shift and go to state 16 - BE reduce using rule 23 (B -> .) - FINISH reduce using rule 23 (B -> .) - RETURN reduce using rule 23 (B -> .) - ELSE reduce using rule 23 (B -> .) - ENDIF reduce using rule 23 (B -> .) - RIGHT_PARENTESIS reduce using rule 23 (B -> .) - ENDWHILE reduce using rule 23 (B -> .) - ENDFOR reduce using rule 23 (B -> .) - - ! CALL [ reduce using rule 23 (B -> .) ] - ! ID [ reduce using rule 23 (B -> .) ] - ! READ [ reduce using rule 23 (B -> .) ] - ! WRITE [ reduce using rule 23 (B -> .) ] - ! IF [ reduce using rule 23 (B -> .) ] - ! WHILE [ reduce using rule 23 (B -> .) ] - ! FOR [ reduce using rule 23 (B -> .) ] + (34) FOR_RULE -> FOR ASSIGN TO EXPRESSION FOR_ACTION B NEXT ID . + + IF reduce using rule 34 (FOR_RULE -> FOR ASSIGN TO EXPRESSION FOR_ACTION B NEXT ID .) + WHILE reduce using rule 34 (FOR_RULE -> FOR ASSIGN TO EXPRESSION FOR_ACTION B NEXT ID .) + GOSUB reduce using rule 34 (FOR_RULE -> FOR ASSIGN TO EXPRESSION FOR_ACTION B NEXT ID .) + FOR reduce using rule 34 (FOR_RULE -> FOR ASSIGN TO EXPRESSION FOR_ACTION B NEXT ID .) + PRINT reduce using rule 34 (FOR_RULE -> FOR ASSIGN TO EXPRESSION FOR_ACTION B NEXT ID .) + PRINTLN reduce using rule 34 (FOR_RULE -> FOR ASSIGN TO EXPRESSION FOR_ACTION B NEXT ID .) + INPUT reduce using rule 34 (FOR_RULE -> FOR ASSIGN TO EXPRESSION FOR_ACTION B NEXT ID .) + ID reduce using rule 34 (FOR_RULE -> FOR ASSIGN TO EXPRESSION FOR_ACTION B NEXT ID .) + FINISH reduce using rule 34 (FOR_RULE -> FOR ASSIGN TO EXPRESSION FOR_ACTION B NEXT ID .) + RETURN reduce using rule 34 (FOR_RULE -> FOR ASSIGN TO EXPRESSION FOR_ACTION B NEXT ID .) + NEXT reduce using rule 34 (FOR_RULE -> FOR ASSIGN TO EXPRESSION FOR_ACTION B NEXT ID .) + END reduce using rule 34 (FOR_RULE -> FOR ASSIGN TO EXPRESSION FOR_ACTION B NEXT ID .) + ELSE reduce using rule 34 (FOR_RULE -> FOR ASSIGN TO EXPRESSION FOR_ACTION B NEXT ID .) - B shift and go to state 134 state 131 - (22) B -> FOR LEFT_PARENTESIS EL COMA B RIGHT_PARENTESIS V B . ENDFOR V B + (40) IFELSE_RULE -> IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B ELSE_ACTION ELSE_RULE . END - ENDFOR shift and go to state 135 + END shift and go to state 133 state 132 - (8) VARIABLES -> T ID LEFT_PARENTESIS CONSTANT COMA CONSTANT COMA CONSTANT . RIGHT_PARENTESIS - - RIGHT_PARENTESIS shift and go to state 136 + (41) ELSE_RULE -> ELSE . B + (16) B -> . STATEMENT B + (17) B -> . STATEMENT + (18) B -> . + (19) STATEMENT -> . IF_RULE + (20) STATEMENT -> . IFELSE_RULE + (21) STATEMENT -> . WHILE_RULE + (22) STATEMENT -> . GOSUB_RULE + (23) STATEMENT -> . FOR_RULE + (24) STATEMENT -> . PRINT_RULE + (25) STATEMENT -> . PRINTLN_RULE + (26) STATEMENT -> . INPUT_RULE + (27) STATEMENT -> . ASSIGN + (39) IF_RULE -> . IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B END + (40) IFELSE_RULE -> . IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B ELSE_ACTION ELSE_RULE END + (36) WHILE_RULE -> . WHILE LPAREN WHILE_ACTION EXPRESSION WHILE_ACTION_JUMP RPAREN B END + (33) GOSUB_RULE -> . GOSUB ID SEMICOLON + (34) FOR_RULE -> . FOR ASSIGN TO EXPRESSION FOR_ACTION B NEXT ID + (29) PRINT_RULE -> . PRINT LPAREN STRING RPAREN SEMICOLON + (30) PRINT_RULE -> . PRINT LPAREN EXPRESSION RPAREN SEMICOLON + (31) PRINTLN_RULE -> . PRINTLN LPAREN STRING RPAREN SEMICOLON + (32) PRINTLN_RULE -> . PRINTLN LPAREN EXPRESSION RPAREN SEMICOLON + (28) INPUT_RULE -> . INPUT LPAREN EXPRESSION RPAREN SEMICOLON + (44) ASSIGN -> . ID EQUALS EXPRESSION SEMICOLON + (45) ASSIGN -> . ID ARRAY BOUND_CHECK EQUALS EXPRESSION SEMICOLON + + END reduce using rule 18 (B -> .) + IF shift and go to state 29 + WHILE shift and go to state 30 + GOSUB shift and go to state 31 + FOR shift and go to state 33 + PRINT shift and go to state 34 + PRINTLN shift and go to state 35 + INPUT shift and go to state 36 + ID shift and go to state 32 + B shift and go to state 134 + STATEMENT shift and go to state 19 + IF_RULE shift and go to state 20 + IFELSE_RULE shift and go to state 21 + WHILE_RULE shift and go to state 22 + GOSUB_RULE shift and go to state 23 + FOR_RULE shift and go to state 24 + PRINT_RULE shift and go to state 25 + PRINTLN_RULE shift and go to state 26 + INPUT_RULE shift and go to state 27 + ASSIGN shift and go to state 28 state 133 - (20) B -> IF LEFT_PARENTESIS EL RIGHT_PARENTESIS B ELSE_AUX ENDIF V B . - - FINISH reduce using rule 20 (B -> IF LEFT_PARENTESIS EL RIGHT_PARENTESIS B ELSE_AUX ENDIF V B .) - BE reduce using rule 20 (B -> IF LEFT_PARENTESIS EL RIGHT_PARENTESIS B ELSE_AUX ENDIF V B .) - CALL reduce using rule 20 (B -> IF LEFT_PARENTESIS EL RIGHT_PARENTESIS B ELSE_AUX ENDIF V B .) - ID reduce using rule 20 (B -> IF LEFT_PARENTESIS EL RIGHT_PARENTESIS B ELSE_AUX ENDIF V B .) - READ reduce using rule 20 (B -> IF LEFT_PARENTESIS EL RIGHT_PARENTESIS B ELSE_AUX ENDIF V B .) - WRITE reduce using rule 20 (B -> IF LEFT_PARENTESIS EL RIGHT_PARENTESIS B ELSE_AUX ENDIF V B .) - IF reduce using rule 20 (B -> IF LEFT_PARENTESIS EL RIGHT_PARENTESIS B ELSE_AUX ENDIF V B .) - WHILE reduce using rule 20 (B -> IF LEFT_PARENTESIS EL RIGHT_PARENTESIS B ELSE_AUX ENDIF V B .) - FOR reduce using rule 20 (B -> IF LEFT_PARENTESIS EL RIGHT_PARENTESIS B ELSE_AUX ENDIF V B .) - RETURN reduce using rule 20 (B -> IF LEFT_PARENTESIS EL RIGHT_PARENTESIS B ELSE_AUX ENDIF V B .) - ELSE reduce using rule 20 (B -> IF LEFT_PARENTESIS EL RIGHT_PARENTESIS B ELSE_AUX ENDIF V B .) - ENDIF reduce using rule 20 (B -> IF LEFT_PARENTESIS EL RIGHT_PARENTESIS B ELSE_AUX ENDIF V B .) - RIGHT_PARENTESIS reduce using rule 20 (B -> IF LEFT_PARENTESIS EL RIGHT_PARENTESIS B ELSE_AUX ENDIF V B .) - ENDWHILE reduce using rule 20 (B -> IF LEFT_PARENTESIS EL RIGHT_PARENTESIS B ELSE_AUX ENDIF V B .) - ENDFOR reduce using rule 20 (B -> IF LEFT_PARENTESIS EL RIGHT_PARENTESIS B ELSE_AUX ENDIF V B .) + (40) IFELSE_RULE -> IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B ELSE_ACTION ELSE_RULE END . + + IF reduce using rule 40 (IFELSE_RULE -> IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B ELSE_ACTION ELSE_RULE END .) + WHILE reduce using rule 40 (IFELSE_RULE -> IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B ELSE_ACTION ELSE_RULE END .) + GOSUB reduce using rule 40 (IFELSE_RULE -> IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B ELSE_ACTION ELSE_RULE END .) + FOR reduce using rule 40 (IFELSE_RULE -> IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B ELSE_ACTION ELSE_RULE END .) + PRINT reduce using rule 40 (IFELSE_RULE -> IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B ELSE_ACTION ELSE_RULE END .) + PRINTLN reduce using rule 40 (IFELSE_RULE -> IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B ELSE_ACTION ELSE_RULE END .) + INPUT reduce using rule 40 (IFELSE_RULE -> IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B ELSE_ACTION ELSE_RULE END .) + ID reduce using rule 40 (IFELSE_RULE -> IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B ELSE_ACTION ELSE_RULE END .) + FINISH reduce using rule 40 (IFELSE_RULE -> IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B ELSE_ACTION ELSE_RULE END .) + RETURN reduce using rule 40 (IFELSE_RULE -> IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B ELSE_ACTION ELSE_RULE END .) + NEXT reduce using rule 40 (IFELSE_RULE -> IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B ELSE_ACTION ELSE_RULE END .) + END reduce using rule 40 (IFELSE_RULE -> IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B ELSE_ACTION ELSE_RULE END .) + ELSE reduce using rule 40 (IFELSE_RULE -> IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B ELSE_ACTION ELSE_RULE END .) state 134 - (21) B -> WHILE LEFT_PARENTESIS EL RIGHT_PARENTESIS V B ENDWHILE V B . - - FINISH reduce using rule 21 (B -> WHILE LEFT_PARENTESIS EL RIGHT_PARENTESIS V B ENDWHILE V B .) - BE reduce using rule 21 (B -> WHILE LEFT_PARENTESIS EL RIGHT_PARENTESIS V B ENDWHILE V B .) - CALL reduce using rule 21 (B -> WHILE LEFT_PARENTESIS EL RIGHT_PARENTESIS V B ENDWHILE V B .) - ID reduce using rule 21 (B -> WHILE LEFT_PARENTESIS EL RIGHT_PARENTESIS V B ENDWHILE V B .) - READ reduce using rule 21 (B -> WHILE LEFT_PARENTESIS EL RIGHT_PARENTESIS V B ENDWHILE V B .) - WRITE reduce using rule 21 (B -> WHILE LEFT_PARENTESIS EL RIGHT_PARENTESIS V B ENDWHILE V B .) - IF reduce using rule 21 (B -> WHILE LEFT_PARENTESIS EL RIGHT_PARENTESIS V B ENDWHILE V B .) - WHILE reduce using rule 21 (B -> WHILE LEFT_PARENTESIS EL RIGHT_PARENTESIS V B ENDWHILE V B .) - FOR reduce using rule 21 (B -> WHILE LEFT_PARENTESIS EL RIGHT_PARENTESIS V B ENDWHILE V B .) - RETURN reduce using rule 21 (B -> WHILE LEFT_PARENTESIS EL RIGHT_PARENTESIS V B ENDWHILE V B .) - ELSE reduce using rule 21 (B -> WHILE LEFT_PARENTESIS EL RIGHT_PARENTESIS V B ENDWHILE V B .) - ENDIF reduce using rule 21 (B -> WHILE LEFT_PARENTESIS EL RIGHT_PARENTESIS V B ENDWHILE V B .) - RIGHT_PARENTESIS reduce using rule 21 (B -> WHILE LEFT_PARENTESIS EL RIGHT_PARENTESIS V B ENDWHILE V B .) - ENDWHILE reduce using rule 21 (B -> WHILE LEFT_PARENTESIS EL RIGHT_PARENTESIS V B ENDWHILE V B .) - ENDFOR reduce using rule 21 (B -> WHILE LEFT_PARENTESIS EL RIGHT_PARENTESIS V B ENDWHILE V B .) - - -state 135 - - (22) B -> FOR LEFT_PARENTESIS EL COMA B RIGHT_PARENTESIS V B ENDFOR . V B - (2) V -> . BE VARIABLES SEMICOLON B V - (3) V -> . - - ! shift/reduce conflict for BE resolved as shift - BE shift and go to state 7 - CALL reduce using rule 3 (V -> .) - ID reduce using rule 3 (V -> .) - READ reduce using rule 3 (V -> .) - WRITE reduce using rule 3 (V -> .) - IF reduce using rule 3 (V -> .) - WHILE reduce using rule 3 (V -> .) - FOR reduce using rule 3 (V -> .) - FINISH reduce using rule 3 (V -> .) - RETURN reduce using rule 3 (V -> .) - ELSE reduce using rule 3 (V -> .) - ENDIF reduce using rule 3 (V -> .) - RIGHT_PARENTESIS reduce using rule 3 (V -> .) - ENDWHILE reduce using rule 3 (V -> .) - ENDFOR reduce using rule 3 (V -> .) - - ! BE [ reduce using rule 3 (V -> .) ] - - V shift and go to state 137 - -state 136 - - (8) VARIABLES -> T ID LEFT_PARENTESIS CONSTANT COMA CONSTANT COMA CONSTANT RIGHT_PARENTESIS . - - SEMICOLON reduce using rule 8 (VARIABLES -> T ID LEFT_PARENTESIS CONSTANT COMA CONSTANT COMA CONSTANT RIGHT_PARENTESIS .) - - -state 137 - - (22) B -> FOR LEFT_PARENTESIS EL COMA B RIGHT_PARENTESIS V B ENDFOR V . B - (15) B -> . CALL ID SEMICOLON V B - (16) B -> . ID INDICES EQUAL E SEMICOLON V B - (17) B -> . READ ID SEMICOLON V B - (18) B -> . WRITE STRING WRITE_AUX SEMICOLON V B - (19) B -> . WRITE E WRITE_AUX SEMICOLON V B - (20) B -> . IF LEFT_PARENTESIS EL RIGHT_PARENTESIS B ELSE_AUX ENDIF V B - (21) B -> . WHILE LEFT_PARENTESIS EL RIGHT_PARENTESIS V B ENDWHILE V B - (22) B -> . FOR LEFT_PARENTESIS EL COMA B RIGHT_PARENTESIS V B ENDFOR V B - (23) B -> . - - ! shift/reduce conflict for CALL resolved as shift - ! shift/reduce conflict for ID resolved as shift - ! shift/reduce conflict for READ resolved as shift - ! shift/reduce conflict for WRITE resolved as shift - ! shift/reduce conflict for IF resolved as shift - ! shift/reduce conflict for WHILE resolved as shift - ! shift/reduce conflict for FOR resolved as shift - CALL shift and go to state 10 - ID shift and go to state 11 - READ shift and go to state 12 - WRITE shift and go to state 13 - IF shift and go to state 14 - WHILE shift and go to state 15 - FOR shift and go to state 16 - BE reduce using rule 23 (B -> .) - FINISH reduce using rule 23 (B -> .) - RETURN reduce using rule 23 (B -> .) - ELSE reduce using rule 23 (B -> .) - ENDIF reduce using rule 23 (B -> .) - RIGHT_PARENTESIS reduce using rule 23 (B -> .) - ENDWHILE reduce using rule 23 (B -> .) - ENDFOR reduce using rule 23 (B -> .) - - ! CALL [ reduce using rule 23 (B -> .) ] - ! ID [ reduce using rule 23 (B -> .) ] - ! READ [ reduce using rule 23 (B -> .) ] - ! WRITE [ reduce using rule 23 (B -> .) ] - ! IF [ reduce using rule 23 (B -> .) ] - ! WHILE [ reduce using rule 23 (B -> .) ] - ! FOR [ reduce using rule 23 (B -> .) ] - - B shift and go to state 138 - -state 138 - - (22) B -> FOR LEFT_PARENTESIS EL COMA B RIGHT_PARENTESIS V B ENDFOR V B . - - FINISH reduce using rule 22 (B -> FOR LEFT_PARENTESIS EL COMA B RIGHT_PARENTESIS V B ENDFOR V B .) - BE reduce using rule 22 (B -> FOR LEFT_PARENTESIS EL COMA B RIGHT_PARENTESIS V B ENDFOR V B .) - CALL reduce using rule 22 (B -> FOR LEFT_PARENTESIS EL COMA B RIGHT_PARENTESIS V B ENDFOR V B .) - ID reduce using rule 22 (B -> FOR LEFT_PARENTESIS EL COMA B RIGHT_PARENTESIS V B ENDFOR V B .) - READ reduce using rule 22 (B -> FOR LEFT_PARENTESIS EL COMA B RIGHT_PARENTESIS V B ENDFOR V B .) - WRITE reduce using rule 22 (B -> FOR LEFT_PARENTESIS EL COMA B RIGHT_PARENTESIS V B ENDFOR V B .) - IF reduce using rule 22 (B -> FOR LEFT_PARENTESIS EL COMA B RIGHT_PARENTESIS V B ENDFOR V B .) - WHILE reduce using rule 22 (B -> FOR LEFT_PARENTESIS EL COMA B RIGHT_PARENTESIS V B ENDFOR V B .) - FOR reduce using rule 22 (B -> FOR LEFT_PARENTESIS EL COMA B RIGHT_PARENTESIS V B ENDFOR V B .) - RETURN reduce using rule 22 (B -> FOR LEFT_PARENTESIS EL COMA B RIGHT_PARENTESIS V B ENDFOR V B .) - ELSE reduce using rule 22 (B -> FOR LEFT_PARENTESIS EL COMA B RIGHT_PARENTESIS V B ENDFOR V B .) - ENDIF reduce using rule 22 (B -> FOR LEFT_PARENTESIS EL COMA B RIGHT_PARENTESIS V B ENDFOR V B .) - RIGHT_PARENTESIS reduce using rule 22 (B -> FOR LEFT_PARENTESIS EL COMA B RIGHT_PARENTESIS V B ENDFOR V B .) - ENDWHILE reduce using rule 22 (B -> FOR LEFT_PARENTESIS EL COMA B RIGHT_PARENTESIS V B ENDFOR V B .) - ENDFOR reduce using rule 22 (B -> FOR LEFT_PARENTESIS EL COMA B RIGHT_PARENTESIS V B ENDFOR V B .) + (41) ELSE_RULE -> ELSE B . + + END reduce using rule 41 (ELSE_RULE -> ELSE B .) WARNING: WARNING: Conflicts: WARNING: -WARNING: shift/reduce conflict for CALL in state 38 resolved as shift -WARNING: shift/reduce conflict for ID in state 38 resolved as shift -WARNING: shift/reduce conflict for READ in state 38 resolved as shift -WARNING: shift/reduce conflict for WRITE in state 38 resolved as shift -WARNING: shift/reduce conflict for IF in state 38 resolved as shift -WARNING: shift/reduce conflict for WHILE in state 38 resolved as shift -WARNING: shift/reduce conflict for FOR in state 38 resolved as shift -WARNING: shift/reduce conflict for BE in state 43 resolved as shift -WARNING: shift/reduce conflict for BE in state 46 resolved as shift -WARNING: shift/reduce conflict for BE in state 63 resolved as shift -WARNING: shift/reduce conflict for CALL in state 66 resolved as shift -WARNING: shift/reduce conflict for ID in state 66 resolved as shift -WARNING: shift/reduce conflict for READ in state 66 resolved as shift -WARNING: shift/reduce conflict for WRITE in state 66 resolved as shift -WARNING: shift/reduce conflict for IF in state 66 resolved as shift -WARNING: shift/reduce conflict for WHILE in state 66 resolved as shift -WARNING: shift/reduce conflict for FOR in state 66 resolved as shift -WARNING: shift/reduce conflict for CALL in state 70 resolved as shift -WARNING: shift/reduce conflict for ID in state 70 resolved as shift -WARNING: shift/reduce conflict for READ in state 70 resolved as shift -WARNING: shift/reduce conflict for WRITE in state 70 resolved as shift -WARNING: shift/reduce conflict for IF in state 70 resolved as shift -WARNING: shift/reduce conflict for WHILE in state 70 resolved as shift -WARNING: shift/reduce conflict for FOR in state 70 resolved as shift -WARNING: shift/reduce conflict for BE in state 71 resolved as shift -WARNING: shift/reduce conflict for BE in state 74 resolved as shift -WARNING: shift/reduce conflict for BE in state 92 resolved as shift -WARNING: shift/reduce conflict for CALL in state 95 resolved as shift -WARNING: shift/reduce conflict for ID in state 95 resolved as shift -WARNING: shift/reduce conflict for READ in state 95 resolved as shift -WARNING: shift/reduce conflict for WRITE in state 95 resolved as shift -WARNING: shift/reduce conflict for IF in state 95 resolved as shift -WARNING: shift/reduce conflict for WHILE in state 95 resolved as shift -WARNING: shift/reduce conflict for FOR in state 95 resolved as shift -WARNING: shift/reduce conflict for CALL in state 98 resolved as shift -WARNING: shift/reduce conflict for ID in state 98 resolved as shift -WARNING: shift/reduce conflict for READ in state 98 resolved as shift -WARNING: shift/reduce conflict for WRITE in state 98 resolved as shift -WARNING: shift/reduce conflict for IF in state 98 resolved as shift -WARNING: shift/reduce conflict for WHILE in state 98 resolved as shift -WARNING: shift/reduce conflict for FOR in state 98 resolved as shift -WARNING: shift/reduce conflict for CALL in state 108 resolved as shift -WARNING: shift/reduce conflict for ID in state 108 resolved as shift -WARNING: shift/reduce conflict for READ in state 108 resolved as shift -WARNING: shift/reduce conflict for WRITE in state 108 resolved as shift -WARNING: shift/reduce conflict for IF in state 108 resolved as shift -WARNING: shift/reduce conflict for WHILE in state 108 resolved as shift -WARNING: shift/reduce conflict for FOR in state 108 resolved as shift -WARNING: shift/reduce conflict for BE in state 122 resolved as shift -WARNING: shift/reduce conflict for BE in state 124 resolved as shift -WARNING: shift/reduce conflict for CALL in state 129 resolved as shift -WARNING: shift/reduce conflict for ID in state 129 resolved as shift -WARNING: shift/reduce conflict for READ in state 129 resolved as shift -WARNING: shift/reduce conflict for WRITE in state 129 resolved as shift -WARNING: shift/reduce conflict for IF in state 129 resolved as shift -WARNING: shift/reduce conflict for WHILE in state 129 resolved as shift -WARNING: shift/reduce conflict for FOR in state 129 resolved as shift -WARNING: shift/reduce conflict for CALL in state 130 resolved as shift -WARNING: shift/reduce conflict for ID in state 130 resolved as shift -WARNING: shift/reduce conflict for READ in state 130 resolved as shift -WARNING: shift/reduce conflict for WRITE in state 130 resolved as shift -WARNING: shift/reduce conflict for IF in state 130 resolved as shift -WARNING: shift/reduce conflict for WHILE in state 130 resolved as shift -WARNING: shift/reduce conflict for FOR in state 130 resolved as shift -WARNING: shift/reduce conflict for BE in state 135 resolved as shift -WARNING: shift/reduce conflict for CALL in state 137 resolved as shift -WARNING: shift/reduce conflict for ID in state 137 resolved as shift -WARNING: shift/reduce conflict for READ in state 137 resolved as shift -WARNING: shift/reduce conflict for WRITE in state 137 resolved as shift -WARNING: shift/reduce conflict for IF in state 137 resolved as shift -WARNING: shift/reduce conflict for WHILE in state 137 resolved as shift -WARNING: shift/reduce conflict for FOR in state 137 resolved as shift +WARNING: reduce/reduce conflict in state 19 resolved using rule (B -> STATEMENT) +WARNING: rejected rule (B -> ) in state 19 diff --git a/parsetab.py b/parsetab.py index 3a026d8..556ccdf 100644 --- a/parsetab.py +++ b/parsetab.py @@ -6,9 +6,9 @@ _lr_method = 'LALR' -_lr_signature = 'AND BE BOOLEAN_EXPRESSION CALL COMA COMPARISON CONSTANT CUBE ELSE ENDFOR ENDIF ENDWHILE EQUAL EQUAL_EQUAL FINISH FLOAT FOR GREATER_THAN GREATER_THAN_EQUAL ID IF INT LEFT_PARENTESIS LENGTH LENGTH_I LENGTH_J LENGTH_K LESS_THAN LESS_THAN_EQUAL MATHEMATICAL_CONSTANT MATHEMATICAL_EXPRESSION MATRIX MEAN MEDIAN MINUS MODE NOT NOT_EQUAL OR PLUS READ RETURN RIGHT_PARENTESIS ROUTINE RREF SEMICOLON SLASH STAR START STRING VECTOR WHILE WRITE\n PROGRAMA : R START V B FINISH R\n \n V : BE VARIABLES SEMICOLON B V\n |\n \n VARIABLES : FLOAT ID\n | T ID\n | T ID LEFT_PARENTESIS CONSTANT RIGHT_PARENTESIS\n | T ID LEFT_PARENTESIS CONSTANT COMA CONSTANT RIGHT_PARENTESIS\n | T ID LEFT_PARENTESIS CONSTANT COMA CONSTANT COMA CONSTANT RIGHT_PARENTESIS\n \n T : INT\n | VECTOR\n | MATRIX\n | CUBE\n \n R : ROUTINE LEFT_PARENTESIS ID RIGHT_PARENTESIS V B RETURN R\n |\n \n B : CALL ID SEMICOLON V B\n | ID INDICES EQUAL E SEMICOLON V B\n | READ ID SEMICOLON V B\n | WRITE STRING WRITE_AUX SEMICOLON V B\n | WRITE E WRITE_AUX SEMICOLON V B\n | IF LEFT_PARENTESIS EL RIGHT_PARENTESIS B ELSE_AUX ENDIF V B\n | WHILE LEFT_PARENTESIS EL RIGHT_PARENTESIS V B ENDWHILE V B\n | FOR LEFT_PARENTESIS EL COMA B RIGHT_PARENTESIS V B ENDFOR V B\n |\n \n INDICES : LEFT_PARENTESIS E RIGHT_PARENTESIS\n | LEFT_PARENTESIS E COMA E RIGHT_PARENTESIS\n | LEFT_PARENTESIS E COMA E COMA E RIGHT_PARENTESIS\n |\n \n ELSE_AUX : ELSE B\n |\n \n WRITE_AUX : COMA STRING WRITE_AUX\n | COMA ID INDICES WRITE_AUX\n |\n \n EL : LEFT_PARENTESIS EL RIGHT_PARENTESIS EL_AUX\n | CONSTANT EL_AUX\n | ID EL_AUX\n \n EL_AUX : COMPARISON EL\n |\n \n E : LEFT_PARENTESIS E RIGHT_PARENTESIS E_AUX\n | CONSTANT E_AUX\n | ID INDICES E_AUX\n \n E_AUX : PLUS E\n | STAR E\n | SLASH E\n | MINUS E\n |\n ' +_lr_signature = 'ADDSUB AND AS DIM ELSE END EQUALS FINISH FLOAT FNUMBER FOR GOSUB ID IF INPUT INT LBRACKET LPAREN MULTDIV NEXT NOT NUMBER OR PRINT PRINTLN PROGRAM RBRACKET RELATIONAL RETURN RPAREN SEMICOLON START STRING SUBROUTINE THEN TO WHILE\n S : MAIN_ACTION PROGRAM START DECL R MAIN_ACTION_C B FINISH\n \n MAIN_ACTION_C :\n \n MAIN_ACTION :\n \n R : SUBROUTINE_RULE R\n |\n \n SUBROUTINE_RULE : SUBROUTINE ID SUBACTION B RETURN\n \n SUBACTION :\n \n DECL : DIM ID AS TYPE SEMICOLON DECL\n | DIM ID ARRAY AS TYPE SEMICOLON DECL\n |\n \n ARRAY : ARRAY_RULE ARRAY\n | ARRAY_RULE\n \n ARRAY_RULE : LBRACKET EXPRESSION RBRACKET\n \n TYPE : INT\n | FLOAT\n \n B : STATEMENT B\n | STATEMENT\n |\n \n STATEMENT : IF_RULE\n | IFELSE_RULE\n | WHILE_RULE\n | GOSUB_RULE\n | FOR_RULE\n | PRINT_RULE\n | PRINTLN_RULE\n | INPUT_RULE\n | ASSIGN\n \n INPUT_RULE : INPUT LPAREN EXPRESSION RPAREN SEMICOLON\n \n PRINT_RULE : PRINT LPAREN STRING RPAREN SEMICOLON\n | PRINT LPAREN EXPRESSION RPAREN SEMICOLON\n \n PRINTLN_RULE : PRINTLN LPAREN STRING RPAREN SEMICOLON\n | PRINTLN LPAREN EXPRESSION RPAREN SEMICOLON\n \n GOSUB_RULE : GOSUB ID SEMICOLON\n \n FOR_RULE : FOR ASSIGN TO EXPRESSION FOR_ACTION B NEXT ID\n \n FOR_ACTION :\n \n WHILE_RULE : WHILE LPAREN WHILE_ACTION EXPRESSION WHILE_ACTION_JUMP RPAREN B END\n \n WHILE_ACTION : \n \n WHILE_ACTION_JUMP :\n \n IF_RULE : IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B END\n \n IFELSE_RULE : IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B ELSE_ACTION ELSE_RULE END \n \n ELSE_RULE : ELSE B\n \n IF_ACTION :\n \n ELSE_ACTION :\n \n ASSIGN : ID EQUALS EXPRESSION SEMICOLON\n | ID ARRAY BOUND_CHECK EQUALS EXPRESSION SEMICOLON\n \n BOUND_CHECK :\n \n EXPRESSION : OR_LEVEL\n \n OR_LEVEL : OR_LEVEL OR AND_LEVEL\n | AND_LEVEL\n \n AND_LEVEL : AND_LEVEL AND RELATIONAL_LEVEL\n | RELATIONAL_LEVEL\n \n RELATIONAL_LEVEL : RELATIONAL_LEVEL RELATIONAL ADDSUB_LEVEL\n | ADDSUB_LEVEL\n \n ADDSUB_LEVEL : ADDSUB_LEVEL ADDSUB MULTDIV_LEVEL\n | MULTDIV_LEVEL\n \n MULTDIV_LEVEL : MULTDIV_LEVEL MULTDIV NOT_LEVEL\n | NOT_LEVEL\n \n NOT_LEVEL : NOT NOT_LEVEL\n | F\n \n F : ID\n | ID ARRAY BOUND_CHECK\n | FNUMBER\n | NUMBER\n | LPAREN EXPRESSION RPAREN\n \n ' -_lr_action_items = {'ROUTINE':([0,25,90,],[3,3,3,]),'START':([0,2,90,107,],[-14,4,-14,-13,]),'$end':([1,25,42,90,107,],[0,-14,-1,-14,-13,]),'LEFT_PARENTESIS':([3,11,13,14,15,16,28,32,34,35,36,37,40,44,52,53,54,55,57,69,73,84,109,],[5,28,32,35,36,37,32,32,28,57,57,57,64,32,32,32,32,32,57,32,28,57,32,]),'BE':([4,24,38,43,46,63,66,70,71,74,86,88,91,92,94,95,98,108,111,113,118,120,122,124,129,130,133,134,135,137,138,],[7,7,-23,7,7,7,-23,-23,7,7,7,-2,-15,7,-17,-23,-23,-23,-18,-19,7,-16,7,7,-23,-23,-20,-21,7,-23,-22,]),'CALL':([4,6,24,38,41,43,46,63,66,70,71,74,82,86,87,88,91,92,94,95,98,103,108,111,113,116,118,120,122,124,125,129,130,133,134,135,137,138,],[-3,10,-3,10,10,-3,-3,-3,10,10,-3,-3,10,-3,10,-2,-15,-3,-17,10,10,10,10,-18,-19,10,-3,-16,-3,-3,10,10,10,-20,-21,-3,10,-22,]),'ID':([4,5,6,10,12,13,18,19,20,21,22,23,24,28,32,35,36,37,38,41,43,44,46,48,52,53,54,55,57,63,66,69,70,71,74,82,84,86,87,88,91,92,94,95,98,103,108,109,111,113,116,118,120,122,124,125,129,130,133,134,135,137,138,],[-3,8,11,26,29,34,39,40,-9,-10,-11,-12,-3,34,34,60,60,60,11,11,-3,34,-3,73,34,34,34,34,60,-3,11,34,11,-3,-3,11,60,-3,11,-2,-15,-3,-17,11,11,11,11,34,-18,-19,11,-3,-16,-3,-3,11,11,11,-20,-21,-3,11,-22,]),'READ':([4,6,24,38,41,43,46,63,66,70,71,74,82,86,87,88,91,92,94,95,98,103,108,111,113,116,118,120,122,124,125,129,130,133,134,135,137,138,],[-3,12,-3,12,12,-3,-3,-3,12,12,-3,-3,12,-3,12,-2,-15,-3,-17,12,12,12,12,-18,-19,12,-3,-16,-3,-3,12,12,12,-20,-21,-3,12,-22,]),'WRITE':([4,6,24,38,41,43,46,63,66,70,71,74,82,86,87,88,91,92,94,95,98,103,108,111,113,116,118,120,122,124,125,129,130,133,134,135,137,138,],[-3,13,-3,13,13,-3,-3,-3,13,13,-3,-3,13,-3,13,-2,-15,-3,-17,13,13,13,13,-18,-19,13,-3,-16,-3,-3,13,13,13,-20,-21,-3,13,-22,]),'IF':([4,6,24,38,41,43,46,63,66,70,71,74,82,86,87,88,91,92,94,95,98,103,108,111,113,116,118,120,122,124,125,129,130,133,134,135,137,138,],[-3,14,-3,14,14,-3,-3,-3,14,14,-3,-3,14,-3,14,-2,-15,-3,-17,14,14,14,14,-18,-19,14,-3,-16,-3,-3,14,14,14,-20,-21,-3,14,-22,]),'WHILE':([4,6,24,38,41,43,46,63,66,70,71,74,82,86,87,88,91,92,94,95,98,103,108,111,113,116,118,120,122,124,125,129,130,133,134,135,137,138,],[-3,15,-3,15,15,-3,-3,-3,15,15,-3,-3,15,-3,15,-2,-15,-3,-17,15,15,15,15,-18,-19,15,-3,-16,-3,-3,15,15,15,-20,-21,-3,15,-22,]),'FOR':([4,6,24,38,41,43,46,63,66,70,71,74,82,86,87,88,91,92,94,95,98,103,108,111,113,116,118,120,122,124,125,129,130,133,134,135,137,138,],[-3,16,-3,16,16,-3,-3,-3,16,16,-3,-3,16,-3,16,-2,-15,-3,-17,16,16,16,16,-18,-19,16,-3,-16,-3,-3,16,16,16,-20,-21,-3,16,-22,]),'FINISH':([4,6,9,38,43,46,63,66,70,71,74,88,91,92,94,95,98,108,111,113,120,122,124,129,130,133,134,135,137,138,],[-3,-23,25,-23,-3,-3,-3,-23,-23,-3,-3,-2,-15,-3,-17,-23,-23,-23,-18,-19,-16,-3,-3,-23,-23,-20,-21,-3,-23,-22,]),'FLOAT':([7,],[18,]),'INT':([7,],[20,]),'VECTOR':([7,],[21,]),'MATRIX':([7,],[22,]),'CUBE':([7,],[23,]),'RIGHT_PARENTESIS':([8,33,34,38,43,45,46,50,51,56,58,59,60,61,63,66,68,70,71,74,75,76,77,78,79,80,81,83,85,87,88,89,91,92,93,94,95,98,99,100,102,104,108,110,111,113,114,119,120,121,122,124,128,129,130,132,133,134,135,137,138,],[24,-45,-27,-23,-3,68,-3,75,-39,-45,82,-37,-37,86,-3,-23,-24,-23,-3,-3,-45,-41,-42,-43,-44,-40,100,-34,-35,-23,-2,105,-15,-3,110,-17,-23,-23,-38,-37,-36,118,-23,-25,-18,-19,-33,127,-16,128,-3,-3,-26,-23,-23,136,-20,-21,-3,-23,-22,]),'EQUAL':([11,27,68,110,128,],[-27,44,-24,-25,-26,]),'STRING':([13,48,],[30,72,]),'CONSTANT':([13,28,32,35,36,37,44,52,53,54,55,57,64,69,84,106,109,126,],[33,33,33,59,59,59,33,33,33,33,33,59,89,33,59,119,33,132,]),'SEMICOLON':([17,26,29,30,31,33,34,39,40,47,49,51,56,67,68,72,73,75,76,77,78,79,80,96,97,99,105,110,112,127,128,136,],[38,43,46,-32,-32,-45,-27,-4,-5,71,74,-39,-45,92,-24,-32,-27,-45,-41,-42,-43,-44,-40,-30,-32,-38,-6,-25,-31,-7,-26,-8,]),'RETURN':([24,38,41,43,46,63,65,66,70,71,74,88,91,92,94,95,98,108,111,113,120,122,124,129,130,133,134,135,137,138,],[-3,-23,-23,-3,-3,-3,90,-23,-23,-3,-3,-2,-15,-3,-17,-23,-23,-23,-18,-19,-16,-3,-3,-23,-23,-20,-21,-3,-23,-22,]),'COMA':([30,31,33,34,45,51,56,59,60,62,68,72,73,75,76,77,78,79,80,83,85,89,93,97,99,100,102,110,114,119,128,],[48,48,-45,-27,69,-39,-45,-37,-37,87,-24,48,-27,-45,-41,-42,-43,-44,-40,-34,-35,106,109,48,-38,-37,-36,-25,-33,126,-26,]),'PLUS':([33,34,56,68,75,110,128,],[52,-27,52,-24,52,-25,-26,]),'STAR':([33,34,56,68,75,110,128,],[53,-27,53,-24,53,-25,-26,]),'SLASH':([33,34,56,68,75,110,128,],[54,-27,54,-24,54,-25,-26,]),'MINUS':([33,34,56,68,75,110,128,],[55,-27,55,-24,55,-25,-26,]),'ELSE':([38,43,46,63,66,70,71,74,82,88,91,92,94,95,98,101,108,111,113,120,122,124,129,130,133,134,135,137,138,],[-23,-3,-3,-3,-23,-23,-3,-3,-23,-2,-15,-3,-17,-23,-23,116,-23,-18,-19,-16,-3,-3,-23,-23,-20,-21,-3,-23,-22,]),'ENDIF':([38,43,46,63,66,70,71,74,82,88,91,92,94,95,98,101,108,111,113,115,116,120,122,123,124,129,130,133,134,135,137,138,],[-23,-3,-3,-3,-23,-23,-3,-3,-23,-2,-15,-3,-17,-23,-23,-29,-23,-18,-19,122,-23,-16,-3,-28,-3,-23,-23,-20,-21,-3,-23,-22,]),'ENDWHILE':([38,43,46,63,66,70,71,74,86,88,91,92,94,95,98,103,108,111,113,117,120,122,124,129,130,133,134,135,137,138,],[-23,-3,-3,-3,-23,-23,-3,-3,-3,-2,-15,-3,-17,-23,-23,-23,-23,-18,-19,124,-16,-3,-3,-23,-23,-20,-21,-3,-23,-22,]),'ENDFOR':([38,43,46,63,66,70,71,74,88,91,92,94,95,98,108,111,113,118,120,122,124,125,129,130,131,133,134,135,137,138,],[-23,-3,-3,-3,-23,-23,-3,-3,-2,-15,-3,-17,-23,-23,-23,-18,-19,-3,-16,-3,-3,-23,-23,-23,135,-20,-21,-3,-23,-22,]),'COMPARISON':([59,60,100,],[84,84,84,]),} +_lr_action_items = {'PROGRAM':([0,2,],[-3,3,]),'$end':([1,56,],[0,-1,]),'START':([3,],[4,]),'DIM':([4,68,92,],[6,6,6,]),'SUBROUTINE':([4,5,8,68,90,91,92,110,],[-10,9,9,-10,-6,-8,-10,-9,]),'IF':([4,5,7,8,11,12,13,16,19,20,21,22,23,24,25,26,27,28,37,42,44,45,46,47,48,49,51,52,53,54,68,70,76,77,81,90,91,92,93,94,95,96,97,98,99,102,104,110,114,115,116,117,118,119,120,121,122,127,129,130,132,133,],[-10,-5,-2,-5,29,-4,-7,-12,29,-19,-20,-21,-22,-23,-24,-25,-26,-27,29,-11,-47,-49,-51,-53,-55,-57,-59,-60,-62,-63,-10,-13,-58,-46,-33,-6,-8,-10,-48,-50,-52,-54,-56,-61,-64,-44,-35,-9,29,-29,-30,-31,-32,-28,29,29,-45,-39,-36,-34,29,-40,]),'WHILE':([4,5,7,8,11,12,13,16,19,20,21,22,23,24,25,26,27,28,37,42,44,45,46,47,48,49,51,52,53,54,68,70,76,77,81,90,91,92,93,94,95,96,97,98,99,102,104,110,114,115,116,117,118,119,120,121,122,127,129,130,132,133,],[-10,-5,-2,-5,30,-4,-7,-12,30,-19,-20,-21,-22,-23,-24,-25,-26,-27,30,-11,-47,-49,-51,-53,-55,-57,-59,-60,-62,-63,-10,-13,-58,-46,-33,-6,-8,-10,-48,-50,-52,-54,-56,-61,-64,-44,-35,-9,30,-29,-30,-31,-32,-28,30,30,-45,-39,-36,-34,30,-40,]),'GOSUB':([4,5,7,8,11,12,13,16,19,20,21,22,23,24,25,26,27,28,37,42,44,45,46,47,48,49,51,52,53,54,68,70,76,77,81,90,91,92,93,94,95,96,97,98,99,102,104,110,114,115,116,117,118,119,120,121,122,127,129,130,132,133,],[-10,-5,-2,-5,31,-4,-7,-12,31,-19,-20,-21,-22,-23,-24,-25,-26,-27,31,-11,-47,-49,-51,-53,-55,-57,-59,-60,-62,-63,-10,-13,-58,-46,-33,-6,-8,-10,-48,-50,-52,-54,-56,-61,-64,-44,-35,-9,31,-29,-30,-31,-32,-28,31,31,-45,-39,-36,-34,31,-40,]),'FOR':([4,5,7,8,11,12,13,16,19,20,21,22,23,24,25,26,27,28,37,42,44,45,46,47,48,49,51,52,53,54,68,70,76,77,81,90,91,92,93,94,95,96,97,98,99,102,104,110,114,115,116,117,118,119,120,121,122,127,129,130,132,133,],[-10,-5,-2,-5,33,-4,-7,-12,33,-19,-20,-21,-22,-23,-24,-25,-26,-27,33,-11,-47,-49,-51,-53,-55,-57,-59,-60,-62,-63,-10,-13,-58,-46,-33,-6,-8,-10,-48,-50,-52,-54,-56,-61,-64,-44,-35,-9,33,-29,-30,-31,-32,-28,33,33,-45,-39,-36,-34,33,-40,]),'PRINT':([4,5,7,8,11,12,13,16,19,20,21,22,23,24,25,26,27,28,37,42,44,45,46,47,48,49,51,52,53,54,68,70,76,77,81,90,91,92,93,94,95,96,97,98,99,102,104,110,114,115,116,117,118,119,120,121,122,127,129,130,132,133,],[-10,-5,-2,-5,34,-4,-7,-12,34,-19,-20,-21,-22,-23,-24,-25,-26,-27,34,-11,-47,-49,-51,-53,-55,-57,-59,-60,-62,-63,-10,-13,-58,-46,-33,-6,-8,-10,-48,-50,-52,-54,-56,-61,-64,-44,-35,-9,34,-29,-30,-31,-32,-28,34,34,-45,-39,-36,-34,34,-40,]),'PRINTLN':([4,5,7,8,11,12,13,16,19,20,21,22,23,24,25,26,27,28,37,42,44,45,46,47,48,49,51,52,53,54,68,70,76,77,81,90,91,92,93,94,95,96,97,98,99,102,104,110,114,115,116,117,118,119,120,121,122,127,129,130,132,133,],[-10,-5,-2,-5,35,-4,-7,-12,35,-19,-20,-21,-22,-23,-24,-25,-26,-27,35,-11,-47,-49,-51,-53,-55,-57,-59,-60,-62,-63,-10,-13,-58,-46,-33,-6,-8,-10,-48,-50,-52,-54,-56,-61,-64,-44,-35,-9,35,-29,-30,-31,-32,-28,35,35,-45,-39,-36,-34,35,-40,]),'INPUT':([4,5,7,8,11,12,13,16,19,20,21,22,23,24,25,26,27,28,37,42,44,45,46,47,48,49,51,52,53,54,68,70,76,77,81,90,91,92,93,94,95,96,97,98,99,102,104,110,114,115,116,117,118,119,120,121,122,127,129,130,132,133,],[-10,-5,-2,-5,36,-4,-7,-12,36,-19,-20,-21,-22,-23,-24,-25,-26,-27,36,-11,-47,-49,-51,-53,-55,-57,-59,-60,-62,-63,-10,-13,-58,-46,-33,-6,-8,-10,-48,-50,-52,-54,-56,-61,-64,-44,-35,-9,36,-29,-30,-31,-32,-28,36,36,-45,-39,-36,-34,36,-40,]),'ID':([4,5,6,7,8,9,11,12,13,16,17,19,20,21,22,23,24,25,26,27,28,31,33,37,42,44,45,46,47,48,49,50,51,52,53,54,55,58,59,61,64,65,66,68,70,71,72,73,74,75,76,77,80,81,84,90,91,92,93,94,95,96,97,98,99,102,103,104,110,114,115,116,117,118,119,120,121,122,126,127,129,130,132,133,],[-10,-5,10,-2,-5,13,32,-4,-7,-12,52,32,-19,-20,-21,-22,-23,-24,-25,-26,-27,60,32,32,-11,-47,-49,-51,-53,-55,-57,52,-59,-60,-62,-63,52,52,-37,52,52,52,52,-10,-13,52,52,52,52,52,-58,-46,52,-33,52,-6,-8,-10,-48,-50,-52,-54,-56,-61,-64,-44,52,-35,-9,32,-29,-30,-31,-32,-28,32,32,-45,130,-39,-36,-34,32,-40,]),'FINISH':([4,5,7,8,11,12,18,19,20,21,22,23,24,25,26,27,28,57,68,81,90,91,92,102,110,115,116,117,118,119,122,127,129,130,133,],[-10,-5,-2,-5,-18,-4,56,-17,-19,-20,-21,-22,-23,-24,-25,-26,-27,-16,-10,-33,-6,-8,-10,-44,-9,-29,-30,-31,-32,-28,-45,-39,-36,-34,-40,]),'AS':([10,15,16,42,70,],[14,41,-12,-11,-13,]),'LBRACKET':([10,16,32,52,70,],[17,17,17,17,-13,]),'RETURN':([13,19,20,21,22,23,24,25,26,27,28,37,57,67,81,102,115,116,117,118,119,122,127,129,130,133,],[-7,-17,-19,-20,-21,-22,-23,-24,-25,-26,-27,-18,-16,90,-33,-44,-29,-30,-31,-32,-28,-45,-39,-36,-34,-40,]),'INT':([14,41,],[39,39,]),'FLOAT':([14,41,],[40,40,]),'EQUALS':([16,32,42,62,70,83,],[-12,61,-11,-46,-13,103,]),'MULTDIV':([16,42,48,49,51,52,53,54,70,76,77,96,97,98,99,],[-12,-11,75,-57,-59,-60,-62,-63,-13,-58,-46,75,-56,-61,-64,]),'ADDSUB':([16,42,47,48,49,51,52,53,54,70,76,77,95,96,97,98,99,],[-12,-11,74,-55,-57,-59,-60,-62,-63,-13,-58,-46,74,-54,-56,-61,-64,]),'RELATIONAL':([16,42,46,47,48,49,51,52,53,54,70,76,77,94,95,96,97,98,99,],[-12,-11,73,-53,-55,-57,-59,-60,-62,-63,-13,-58,-46,73,-52,-54,-56,-61,-64,]),'AND':([16,42,45,46,47,48,49,51,52,53,54,70,76,77,93,94,95,96,97,98,99,],[-12,-11,72,-51,-53,-55,-57,-59,-60,-62,-63,-13,-58,-46,72,-50,-52,-54,-56,-61,-64,]),'OR':([16,42,44,45,46,47,48,49,51,52,53,54,70,76,77,93,94,95,96,97,98,99,],[-12,-11,71,-49,-51,-53,-55,-57,-59,-60,-62,-63,-13,-58,-46,-48,-50,-52,-54,-56,-61,-64,]),'RBRACKET':([16,42,43,44,45,46,47,48,49,51,52,53,54,70,76,77,93,94,95,96,97,98,99,],[-12,-11,70,-47,-49,-51,-53,-55,-57,-59,-60,-62,-63,-13,-58,-46,-48,-50,-52,-54,-56,-61,-64,]),'RPAREN':([16,42,44,45,46,47,48,49,51,52,53,54,70,76,77,78,79,85,86,87,88,89,93,94,95,96,97,98,99,100,101,112,],[-12,-11,-47,-49,-51,-53,-55,-57,-59,-60,-62,-63,-13,-58,-46,99,-42,105,106,107,108,109,-48,-50,-52,-54,-56,-61,-64,111,-38,121,]),'SEMICOLON':([16,38,39,40,42,44,45,46,47,48,49,51,52,53,54,60,69,70,76,77,82,93,94,95,96,97,98,99,105,106,107,108,109,113,],[-12,68,-14,-15,-11,-47,-49,-51,-53,-55,-57,-59,-60,-62,-63,81,92,-13,-58,-46,102,-48,-50,-52,-54,-56,-61,-64,115,116,117,118,119,122,]),'NEXT':([16,19,20,21,22,23,24,25,26,27,28,42,44,45,46,47,48,49,51,52,53,54,57,70,76,77,81,93,94,95,96,97,98,99,102,104,114,115,116,117,118,119,122,123,127,129,130,133,],[-12,-17,-19,-20,-21,-22,-23,-24,-25,-26,-27,-11,-47,-49,-51,-53,-55,-57,-59,-60,-62,-63,-16,-13,-58,-46,-33,-48,-50,-52,-54,-56,-61,-64,-44,-35,-18,-29,-30,-31,-32,-28,-45,126,-39,-36,-34,-40,]),'NOT':([17,50,55,58,59,61,64,65,66,71,72,73,74,75,80,84,103,],[50,50,50,50,-37,50,50,50,50,50,50,50,50,50,50,50,50,]),'FNUMBER':([17,50,55,58,59,61,64,65,66,71,72,73,74,75,80,84,103,],[53,53,53,53,-37,53,53,53,53,53,53,53,53,53,53,53,53,]),'NUMBER':([17,50,55,58,59,61,64,65,66,71,72,73,74,75,80,84,103,],[54,54,54,54,-37,54,54,54,54,54,54,54,54,54,54,54,54,]),'LPAREN':([17,29,30,34,35,36,50,55,58,59,61,64,65,66,71,72,73,74,75,80,84,103,],[55,58,59,64,65,66,55,55,55,-37,55,55,55,55,55,55,55,55,55,55,55,55,]),'END':([19,20,21,22,23,24,25,26,27,28,57,81,102,115,116,117,118,119,120,121,122,124,125,127,129,130,131,132,133,134,],[-17,-19,-20,-21,-22,-23,-24,-25,-26,-27,-16,-33,-44,-29,-30,-31,-32,-28,-18,-18,-45,127,129,-39,-36,-34,133,-18,-40,-41,]),'ELSE':([19,20,21,22,23,24,25,26,27,28,57,81,102,115,116,117,118,119,120,122,124,127,128,129,130,133,],[-17,-19,-20,-21,-22,-23,-24,-25,-26,-27,-16,-33,-44,-29,-30,-31,-32,-28,-18,-45,-43,-39,132,-36,-34,-40,]),'TO':([63,102,122,],[84,-44,-45,]),'STRING':([64,65,],[85,87,]),'THEN':([111,],[120,]),} _lr_action = {} for _k, _v in _lr_action_items.items(): @@ -17,7 +17,7 @@ _lr_action[_x][_k] = _y del _lr_action_items -_lr_goto_items = {'PROGRAMA':([0,],[1,]),'R':([0,25,90,],[2,42,107,]),'V':([4,24,43,46,63,71,74,86,92,118,122,124,135,],[6,41,66,70,88,95,98,103,108,125,129,130,137,]),'B':([6,38,41,66,70,82,87,95,98,103,108,116,125,129,130,137,],[9,63,65,91,94,101,104,111,113,117,120,123,131,133,134,138,]),'VARIABLES':([7,],[17,]),'T':([7,],[19,]),'INDICES':([11,34,73,],[27,56,97,]),'E':([13,28,32,44,52,53,54,55,69,109,],[31,45,50,67,76,77,78,79,93,121,]),'WRITE_AUX':([30,31,72,97,],[47,49,96,112,]),'E_AUX':([33,56,75,],[51,80,99,]),'EL':([35,36,37,57,84,],[58,61,62,81,102,]),'EL_AUX':([59,60,100,],[83,85,114,]),'ELSE_AUX':([101,],[115,]),} +_lr_goto_items = {'S':([0,],[1,]),'MAIN_ACTION':([0,],[2,]),'DECL':([4,68,92,],[5,91,110,]),'R':([5,8,],[7,12,]),'SUBROUTINE_RULE':([5,8,],[8,8,]),'MAIN_ACTION_C':([7,],[11,]),'ARRAY':([10,16,32,52,],[15,42,62,77,]),'ARRAY_RULE':([10,16,32,52,],[16,16,16,16,]),'B':([11,19,37,114,120,121,132,],[18,57,67,123,124,125,134,]),'STATEMENT':([11,19,37,114,120,121,132,],[19,19,19,19,19,19,19,]),'IF_RULE':([11,19,37,114,120,121,132,],[20,20,20,20,20,20,20,]),'IFELSE_RULE':([11,19,37,114,120,121,132,],[21,21,21,21,21,21,21,]),'WHILE_RULE':([11,19,37,114,120,121,132,],[22,22,22,22,22,22,22,]),'GOSUB_RULE':([11,19,37,114,120,121,132,],[23,23,23,23,23,23,23,]),'FOR_RULE':([11,19,37,114,120,121,132,],[24,24,24,24,24,24,24,]),'PRINT_RULE':([11,19,37,114,120,121,132,],[25,25,25,25,25,25,25,]),'PRINTLN_RULE':([11,19,37,114,120,121,132,],[26,26,26,26,26,26,26,]),'INPUT_RULE':([11,19,37,114,120,121,132,],[27,27,27,27,27,27,27,]),'ASSIGN':([11,19,33,37,114,120,121,132,],[28,28,63,28,28,28,28,28,]),'SUBACTION':([13,],[37,]),'TYPE':([14,41,],[38,69,]),'EXPRESSION':([17,55,58,61,64,65,66,80,84,103,],[43,78,79,82,86,88,89,101,104,113,]),'OR_LEVEL':([17,55,58,61,64,65,66,80,84,103,],[44,44,44,44,44,44,44,44,44,44,]),'AND_LEVEL':([17,55,58,61,64,65,66,71,80,84,103,],[45,45,45,45,45,45,45,93,45,45,45,]),'RELATIONAL_LEVEL':([17,55,58,61,64,65,66,71,72,80,84,103,],[46,46,46,46,46,46,46,46,94,46,46,46,]),'ADDSUB_LEVEL':([17,55,58,61,64,65,66,71,72,73,80,84,103,],[47,47,47,47,47,47,47,47,47,95,47,47,47,]),'MULTDIV_LEVEL':([17,55,58,61,64,65,66,71,72,73,74,80,84,103,],[48,48,48,48,48,48,48,48,48,48,96,48,48,48,]),'NOT_LEVEL':([17,50,55,58,61,64,65,66,71,72,73,74,75,80,84,103,],[49,76,49,49,49,49,49,49,49,49,49,49,97,49,49,49,]),'F':([17,50,55,58,61,64,65,66,71,72,73,74,75,80,84,103,],[51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,]),'WHILE_ACTION':([59,],[80,]),'BOUND_CHECK':([62,77,],[83,98,]),'IF_ACTION':([79,],[100,]),'WHILE_ACTION_JUMP':([101,],[112,]),'FOR_ACTION':([104,],[114,]),'ELSE_ACTION':([124,],[128,]),'ELSE_RULE':([128,],[131,]),} _lr_goto = {} for _k, _v in _lr_goto_items.items(): @@ -26,50 +26,69 @@ _lr_goto[_x][_k] = _y del _lr_goto_items _lr_productions = [ - ("S' -> PROGRAMA","S'",1,None,None,None), - ('PROGRAMA -> R START V B FINISH R','PROGRAMA',6,'p_PROGRAMA','TA.py',118), - ('V -> BE VARIABLES SEMICOLON B V','V',5,'p_V','TA.py',125), - ('V -> ','V',0,'p_V','TA.py',126), - ('VARIABLES -> FLOAT ID','VARIABLES',2,'p_VARIABLES','TA.py',131), - ('VARIABLES -> T ID','VARIABLES',2,'p_VARIABLES','TA.py',132), - ('VARIABLES -> T ID LEFT_PARENTESIS CONSTANT RIGHT_PARENTESIS','VARIABLES',5,'p_VARIABLES','TA.py',133), - ('VARIABLES -> T ID LEFT_PARENTESIS CONSTANT COMA CONSTANT RIGHT_PARENTESIS','VARIABLES',7,'p_VARIABLES','TA.py',134), - ('VARIABLES -> T ID LEFT_PARENTESIS CONSTANT COMA CONSTANT COMA CONSTANT RIGHT_PARENTESIS','VARIABLES',9,'p_VARIABLES','TA.py',135), - ('T -> INT','T',1,'p_T','TA.py',142), - ('T -> VECTOR','T',1,'p_T','TA.py',143), - ('T -> MATRIX','T',1,'p_T','TA.py',144), - ('T -> CUBE','T',1,'p_T','TA.py',145), - ('R -> ROUTINE LEFT_PARENTESIS ID RIGHT_PARENTESIS V B RETURN R','R',8,'p_R','TA.py',152), - ('R -> ','R',0,'p_R','TA.py',153), - ('B -> CALL ID SEMICOLON V B','B',5,'p_B','TA.py',159), - ('B -> ID INDICES EQUAL E SEMICOLON V B','B',7,'p_B','TA.py',160), - ('B -> READ ID SEMICOLON V B','B',5,'p_B','TA.py',161), - ('B -> WRITE STRING WRITE_AUX SEMICOLON V B','B',6,'p_B','TA.py',162), - ('B -> WRITE E WRITE_AUX SEMICOLON V B','B',6,'p_B','TA.py',163), - ('B -> IF LEFT_PARENTESIS EL RIGHT_PARENTESIS B ELSE_AUX ENDIF V B','B',9,'p_B','TA.py',164), - ('B -> WHILE LEFT_PARENTESIS EL RIGHT_PARENTESIS V B ENDWHILE V B','B',9,'p_B','TA.py',165), - ('B -> FOR LEFT_PARENTESIS EL COMA B RIGHT_PARENTESIS V B ENDFOR V B','B',11,'p_B','TA.py',166), - ('B -> ','B',0,'p_B','TA.py',167), - ('INDICES -> LEFT_PARENTESIS E RIGHT_PARENTESIS','INDICES',3,'p_INDICES','TA.py',172), - ('INDICES -> LEFT_PARENTESIS E COMA E RIGHT_PARENTESIS','INDICES',5,'p_INDICES','TA.py',173), - ('INDICES -> LEFT_PARENTESIS E COMA E COMA E RIGHT_PARENTESIS','INDICES',7,'p_INDICES','TA.py',174), - ('INDICES -> ','INDICES',0,'p_INDICES','TA.py',175), - ('ELSE_AUX -> ELSE B','ELSE_AUX',2,'p_ELSE_AUX','TA.py',180), - ('ELSE_AUX -> ','ELSE_AUX',0,'p_ELSE_AUX','TA.py',181), - ('WRITE_AUX -> COMA STRING WRITE_AUX','WRITE_AUX',3,'p_WRITE_AUX','TA.py',186), - ('WRITE_AUX -> COMA ID INDICES WRITE_AUX','WRITE_AUX',4,'p_WRITE_AUX','TA.py',187), - ('WRITE_AUX -> ','WRITE_AUX',0,'p_WRITE_AUX','TA.py',188), - ('EL -> LEFT_PARENTESIS EL RIGHT_PARENTESIS EL_AUX','EL',4,'p_EL','TA.py',193), - ('EL -> CONSTANT EL_AUX','EL',2,'p_EL','TA.py',194), - ('EL -> ID EL_AUX','EL',2,'p_EL','TA.py',195), - ('EL_AUX -> COMPARISON EL','EL_AUX',2,'p_EL_AUX','TA.py',200), - ('EL_AUX -> ','EL_AUX',0,'p_EL_AUX','TA.py',201), - ('E -> LEFT_PARENTESIS E RIGHT_PARENTESIS E_AUX','E',4,'p_E','TA.py',206), - ('E -> CONSTANT E_AUX','E',2,'p_E','TA.py',207), - ('E -> ID INDICES E_AUX','E',3,'p_E','TA.py',208), - ('E_AUX -> PLUS E','E_AUX',2,'p_E_AUX','TA.py',213), - ('E_AUX -> STAR E','E_AUX',2,'p_E_AUX','TA.py',214), - ('E_AUX -> SLASH E','E_AUX',2,'p_E_AUX','TA.py',215), - ('E_AUX -> MINUS E','E_AUX',2,'p_E_AUX','TA.py',216), - ('E_AUX -> ','E_AUX',0,'p_E_AUX','TA.py',217), + ("S' -> S","S'",1,None,None,None), + ('S -> MAIN_ACTION PROGRAM START DECL R MAIN_ACTION_C B FINISH','S',8,'p_S','TA.py',110), + ('MAIN_ACTION_C -> ','MAIN_ACTION_C',0,'p_MAIN_ACTION_C','TA.py',116), + ('MAIN_ACTION -> ','MAIN_ACTION',0,'p_MAIN_ACTION','TA.py',123), + ('R -> SUBROUTINE_RULE R','R',2,'p_R','TA.py',130), + ('R -> ','R',0,'p_R','TA.py',131), + ('SUBROUTINE_RULE -> SUBROUTINE ID SUBACTION B RETURN','SUBROUTINE_RULE',5,'p_SUBROURINTE_RULE','TA.py',136), + ('SUBACTION -> ','SUBACTION',0,'p_SUBACTION','TA.py',146), + ('DECL -> DIM ID AS TYPE SEMICOLON DECL','DECL',6,'p_DECL','TA.py',154), + ('DECL -> DIM ID ARRAY AS TYPE SEMICOLON DECL','DECL',7,'p_DECL','TA.py',155), + ('DECL -> ','DECL',0,'p_DECL','TA.py',156), + ('ARRAY -> ARRAY_RULE ARRAY','ARRAY',2,'p_ARRAY','TA.py',171), + ('ARRAY -> ARRAY_RULE','ARRAY',1,'p_ARRAY','TA.py',172), + ('ARRAY_RULE -> LBRACKET EXPRESSION RBRACKET','ARRAY_RULE',3,'p_ARRAY_RULE','TA.py',181), + ('TYPE -> INT','TYPE',1,'p_TYPE','TA.py',187), + ('TYPE -> FLOAT','TYPE',1,'p_TYPE','TA.py',188), + ('B -> STATEMENT B','B',2,'p_B','TA.py',194), + ('B -> STATEMENT','B',1,'p_B','TA.py',195), + ('B -> ','B',0,'p_B','TA.py',196), + ('STATEMENT -> IF_RULE','STATEMENT',1,'p_STATEMENT','TA.py',201), + ('STATEMENT -> IFELSE_RULE','STATEMENT',1,'p_STATEMENT','TA.py',202), + ('STATEMENT -> WHILE_RULE','STATEMENT',1,'p_STATEMENT','TA.py',203), + ('STATEMENT -> GOSUB_RULE','STATEMENT',1,'p_STATEMENT','TA.py',204), + ('STATEMENT -> FOR_RULE','STATEMENT',1,'p_STATEMENT','TA.py',205), + ('STATEMENT -> PRINT_RULE','STATEMENT',1,'p_STATEMENT','TA.py',206), + ('STATEMENT -> PRINTLN_RULE','STATEMENT',1,'p_STATEMENT','TA.py',207), + ('STATEMENT -> INPUT_RULE','STATEMENT',1,'p_STATEMENT','TA.py',208), + ('STATEMENT -> ASSIGN','STATEMENT',1,'p_STATEMENT','TA.py',209), + ('INPUT_RULE -> INPUT LPAREN EXPRESSION RPAREN SEMICOLON','INPUT_RULE',5,'p_INPUT_RULE','TA.py',214), + ('PRINT_RULE -> PRINT LPAREN STRING RPAREN SEMICOLON','PRINT_RULE',5,'p_PRINT_RULE','TA.py',234), + ('PRINT_RULE -> PRINT LPAREN EXPRESSION RPAREN SEMICOLON','PRINT_RULE',5,'p_PRINT_RULE','TA.py',235), + ('PRINTLN_RULE -> PRINTLN LPAREN STRING RPAREN SEMICOLON','PRINTLN_RULE',5,'p_PRINTLN_RULE','TA.py',242), + ('PRINTLN_RULE -> PRINTLN LPAREN EXPRESSION RPAREN SEMICOLON','PRINTLN_RULE',5,'p_PRINTLN_RULE','TA.py',243), + ('GOSUB_RULE -> GOSUB ID SEMICOLON','GOSUB_RULE',3,'p_GOSUB_RULE','TA.py',250), + ('FOR_RULE -> FOR ASSIGN TO EXPRESSION FOR_ACTION B NEXT ID','FOR_RULE',8,'p_FOR_RULE','TA.py',262), + ('FOR_ACTION -> ','FOR_ACTION',0,'p_FOR_ACTION','TA.py',275), + ('WHILE_RULE -> WHILE LPAREN WHILE_ACTION EXPRESSION WHILE_ACTION_JUMP RPAREN B END','WHILE_RULE',8,'p_WHILE_RULE','TA.py',287), + ('WHILE_ACTION -> ','WHILE_ACTION',0,'p_WHILE_ACTION','TA.py',299), + ('WHILE_ACTION_JUMP -> ','WHILE_ACTION_JUMP',0,'p_WHILE_ACTION_JUMP','TA.py',306), + ('IF_RULE -> IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B END','IF_RULE',8,'p_IF_RULE','TA.py',315), + ('IFELSE_RULE -> IF LPAREN EXPRESSION IF_ACTION RPAREN THEN B ELSE_ACTION ELSE_RULE END','IFELSE_RULE',10,'p_IFELSE_RULE','TA.py',324), + ('ELSE_RULE -> ELSE B','ELSE_RULE',2,'p_ELSE_RULE','TA.py',333), + ('IF_ACTION -> ','IF_ACTION',0,'p_IF_ACTION','TA.py',339), + ('ELSE_ACTION -> ','ELSE_ACTION',0,'p_ELSE_ACTION','TA.py',347), + ('ASSIGN -> ID EQUALS EXPRESSION SEMICOLON','ASSIGN',4,'p_ASSIGN','TA.py',359), + ('ASSIGN -> ID ARRAY BOUND_CHECK EQUALS EXPRESSION SEMICOLON','ASSIGN',6,'p_ASSIGN','TA.py',360), + ('BOUND_CHECK -> ','BOUND_CHECK',0,'p_BOUND_CHECK','TA.py',384), + ('EXPRESSION -> OR_LEVEL','EXPRESSION',1,'p_EXPRESSION','TA.py',392), + ('OR_LEVEL -> OR_LEVEL OR AND_LEVEL','OR_LEVEL',3,'p_OR_LEVEL','TA.py',399), + ('OR_LEVEL -> AND_LEVEL','OR_LEVEL',1,'p_OR_LEVEL','TA.py',400), + ('AND_LEVEL -> AND_LEVEL AND RELATIONAL_LEVEL','AND_LEVEL',3,'p_AND_LEVEL','TA.py',411), + ('AND_LEVEL -> RELATIONAL_LEVEL','AND_LEVEL',1,'p_AND_LEVEL','TA.py',412), + ('RELATIONAL_LEVEL -> RELATIONAL_LEVEL RELATIONAL ADDSUB_LEVEL','RELATIONAL_LEVEL',3,'p_RELATIONAL_LEVEL','TA.py',423), + ('RELATIONAL_LEVEL -> ADDSUB_LEVEL','RELATIONAL_LEVEL',1,'p_RELATIONAL_LEVEL','TA.py',424), + ('ADDSUB_LEVEL -> ADDSUB_LEVEL ADDSUB MULTDIV_LEVEL','ADDSUB_LEVEL',3,'p_ADDSUB_LEVEL','TA.py',446), + ('ADDSUB_LEVEL -> MULTDIV_LEVEL','ADDSUB_LEVEL',1,'p_ADDSUB_LEVEL','TA.py',447), + ('MULTDIV_LEVEL -> MULTDIV_LEVEL MULTDIV NOT_LEVEL','MULTDIV_LEVEL',3,'p_MULTDIV_LEVEL','TA.py',461), + ('MULTDIV_LEVEL -> NOT_LEVEL','MULTDIV_LEVEL',1,'p_MULTDIV_LEVEL','TA.py',462), + ('NOT_LEVEL -> NOT NOT_LEVEL','NOT_LEVEL',2,'p_NOT_LEVEL','TA.py',481), + ('NOT_LEVEL -> F','NOT_LEVEL',1,'p_NOT_LEVEL','TA.py',482), + ('F -> ID','F',1,'p_F','TA.py',494), + ('F -> ID ARRAY BOUND_CHECK','F',3,'p_F','TA.py',495), + ('F -> FNUMBER','F',1,'p_F','TA.py',496), + ('F -> NUMBER','F',1,'p_F','TA.py',497), + ('F -> LPAREN EXPRESSION RPAREN','F',3,'p_F','TA.py',498), ] diff --git a/presentacion1.txt b/presentacion1.txt new file mode 100644 index 0000000..e8d142e --- /dev/null +++ b/presentacion1.txt @@ -0,0 +1,55 @@ +PROGRAMBEGIN + +RUN + +BE a as FLOAT; +BE b as FLOAT; +BE c as FLOAT; + +BE raiz as FLOAT; + +BE eps as FLOAT; +BE x as FLOAT; +BE izquierda as FLOAT; +BE derecha as FLOAT; +BE centro as FLOAT; +BE den as FLOAT; +BE num as FLOAT; + +BE aux as FLOAT; + +ROUTINE sqrt + derecha = x; + izquierda = 0; + WHILE(derecha - izquierda > eps) + centro = (izquierda + derecha)/2; + IF(centro * centro > x) + INCASE + derecha = centro; + OTHERWISE + izquierda = centro; + END + END + raiz = izquierda; +ENDROUTINE + +ROUTINE lee + WRITELINE("ax2+bx+c: "); + READ(a); + READ(b); + READ(c); +ENDROUTINE + +CALL lee; + +eps = 0.001; +x = (b*b - 4*a*c); +CALL sqrt; + +WRITELINE((b*(-1)+raiz)/(2*a)); +WRITELINE((b*(-1)-raiz)/(2*a)); + + + + +PROGRAMDONE \ No newline at end of file diff --git a/presentacion2.txt b/presentacion2.txt new file mode 100644 index 0000000..5a7aba6 --- /dev/null +++ b/presentacion2.txt @@ -0,0 +1,24 @@ +PROGRAMBEGIN + +RUN + +BE number as INT; +BE aux as FLOAT; +BE res as INT; +BE stop as INT; + +WRITELINE("un valor por favor"); +READ(number); +aux = number; + +WHILE(number > 0) + aux = number/10; + number = number/10; + res = (aux-number) * 10; + WRITE("RESPUESTA: "); + WRITELINE(res); + +END + + +PROGRAMDONE \ No newline at end of file diff --git a/presentacion3.txt b/presentacion3.txt new file mode 100644 index 0000000..85b43c7 --- /dev/null +++ b/presentacion3.txt @@ -0,0 +1,113 @@ +PROGRAMBEGIN +RUN +BE a[5][5] as INT; +BE b[5][5] as INT; +BE res[5][5] as INT; +BE temp as INT; +BE ax as INT; +BE ay as INT; +BE bx as INT; +BE by as INT; + +BE i as INT; +BE j as INT; +BE k as INT; + +BE option as INT; + +ROUTINE input_values + WRITELINE("Dimension X de la matriz A"); + READ(ax); + WRITELINE("Dimension Y de la matriz A"); + READ(ay); + WRITELINE("Dimension X de la matriz B"); + READ(bx); + WRITELINE("Dimension Y de la matriz B"); + READ(by); +ENDROUTINE + +ROUTINE read_values + WRITELINE("valores de la matriz A"); + FOR i=0; SCALE ax + FOR j=0; SCALE ay + READ(a[i][j]); + ENDFOR j + ENDFOR i + + WRITELINE("valores de la matriz B"); + FOR i=0; SCALE bx + FOR j=0; SCALE by + READ(b[i][j]); + ENDFOR j + ENDFOR i +ENDROUTINE + +ROUTINE add_matrix + FOR i=0; SCALE ax + FOR j=0; SCALE ay + res[i][j] = a[i][j] + b[i][j]; + ENDFOR j + ENDFOR i + + FOR i=0; SCALE ax + FOR j=0; SCALE ay + WRITE(res[i][j]); + WRITE(" "); + ENDFOR j + WRITELINE(""); + ENDFOR i +ENDROUTINE + +ROUTINE mult_matrix + FOR i=0; SCALE ax + FOR j=0; SCALE by + FOR k=0; SCALE ay + res[i][j] = res[i][j] + (a[i][k] * b[k][j]); + ENDFOR k + ENDFOR j + ENDFOR i + + FOR i=0; SCALE ax + FOR j=0; SCALE by + WRITE(res[i][j]); + WRITE(" "); + ENDFOR j + WRITELINE(""); + ENDFOR i +ENDROUTINE + +CALL input_values; + +WHILE(ax >= 5 || ay >= 5 || bx >= 5 || by >= 5) + WRITELINE("The values exceed the limits of the matrix"); + WRITELINE("Please insert new values"); + CALL input_values; +END + +CALL read_values; + +WRITELINE("que se quiere hacer con las matrices"); +WRITELINE("1 para sumarlas"); +WRITELINE("2 para multiplicarlas"); + +READ(option); + +IF(option == 1) +INCASE + IF(ax == bx && ay == by) + INCASE + CALL add_matrix; + OTHERWISE + WRITELINE("dimensiones incorrectas"); + END +END +IF(option == 2) +INCASE + IF(ay == bx) + INCASE + CALL mult_matrix; + OTHERWISE + WRITELINE("dimensiones incorrectas"); + END +END +PROGRAMDONE \ No newline at end of file diff --git a/presentacion4.txt b/presentacion4.txt new file mode 100644 index 0000000..fca9815 --- /dev/null +++ b/presentacion4.txt @@ -0,0 +1,58 @@ +PROGRAMBEGIN + +RUN + +BE array[10] as INT; +BE len as INT; +BE i as INT; +BE x as INT; +BE j as INT; + +BE aux as INT; + +ROUTINE leeArray + WRITE("cual es la longitud del arreglo? "); + READ(len); + + FOR i=0; SCALE len + WRITE("cual es el elemento "); + WRITE(i); + WRITE(" del arreglo? "); + READ(array[i]); + ENDFOR i + WRITELINE("el arreglo que ingresaste es: "); + FOR i=0; SCALE len + x = array[i]; + WRITE(x); + WRITE(" "); + + ENDFOR i + WRITELINE(" "); +ENDROUTINE + +ROUTINE sortArray + FOR i=0; SCALE len + FOR j=i; SCALE len + IF(array[j]